Ако позволя на уеб робот да види тази страница, не би ли могъл да изтрие цялата база данни, ако обходи всяка връзка за изтриване на всяка страница?
да
Не може ли някой, който по някакъв начин е разбрал страницата, която извиква delete(), ръчно да зареди URL адреса с каквото и число да иска в $_GET и да изтрие записите?
да
По-добре ли е никога да не изтривате нищо чрез CRUD, а да добавите колона „Изтрити“ към таблицата и да изглежда така, сякаш е изтрита за потребителя?
Ако наистина искате да го изтриете, imo, изтриването е по-добре.
Просто параноичен ли съм?
Въобще не.
Ако току-що сте имали скрипт delete.php, който има нещо като следното (игнориране на CRUD atm и говорене за MySQL):
$q = "DELETE FROM mytable WHERE row = $_GET['id']";
$r = mysql_query($q);
Тогава да, първите ви две притеснения всъщност са какво ще се случи. Паяк, който се натъкне на тези връзки, би довел до изтриване на записите в DB, а злонамерен потребител, който открие връзките, би могъл по подобен начин да изтрие редове от DB.
Това обикновено се обработва по два начина:
Не предлагайте връзката delete.php на хора, които не трябва да я имат (хора, които не са влезли в системата, хора, които не са влезли като администратори и т.н.) -- но имайте предвид, че това е просто милост и не защитава вашата база данни от случайно/злонамерено изтриване.
В скрипта delete.php проверете дали лицето, което го изпълнява, има право да изтрива редове. По-голямата част от времето се извършва чрез проверка на променливите на сесията, които са били зададени при влизане (напр. if($_SESSION['can_delete'] != true){ die('Insufficient Privileges'); }
).
Въпреки че е полезно да не предлагате връзката delete.php на хора, които не трябва да я имат, трябва изрично да проверите за разрешения в скрипта delete.php, ако искате да е защитен.
person
jedwards
schedule
05.05.2012