Если бы я разрешил поисковому роботу просматривать эту страницу, не мог бы он удалить всю базу данных, если бы он просканировал каждую ссылку удаления на каждой странице?
да.
Не мог ли кто-то, кто каким-то образом вычислил страницу, которая вызывает метод delete(), вручную загрузить URL-адрес с любым числом, которое он хотел, в $_GET и удалить записи?
да.
Не лучше ли никогда ничего не удалять с помощью CRUD, а добавить в таблицу столбец «Удалено» и сделать так, чтобы он выглядел так, как если бы он был удален для пользователя?
Если вы действительно хотите удалить его, имхо, лучше удалить.
Я просто параноик?
Нисколько.
Если у вас только что был скрипт delete.php, который имел что-то вроде следующего (игнорируя CRUD atm и говоря о MySQL):
$q = "DELETE FROM mytable WHERE row = $_GET['id']";
$r = mysql_query($q);
Тогда да, ваши первые две проблемы на самом деле связаны с тем, что произойдет. Паук, который наткнется на эти ссылки, приведет к удалению записей БД, а злоумышленник, обнаруживший ссылки, может аналогичным образом удалить строки из БД.
Обычно это решается двумя способами:
Не предлагайте ссылку на delete.php людям, у которых ее быть не должно (людям, которые не вошли в систему, людям, которые не вошли в систему как администраторы и т. д.), но обратите внимание, это всего лишь вежливость и не защищает вашу БД от случайного или злонамеренного удаления.
В сценарии delete.php убедитесь, что пользователю разрешено удалять строки. Большую часть времени выполняется путем проверки переменных сеанса, которые были установлены при входе в систему (например, if($_SESSION['can_delete'] != true){ die('Insufficient Privileges'); }
).
Хотя полезно не предлагать ссылку на delete.php людям, у которых она не должна быть, вам необходимо явным образом проверить разрешения в сценарии delete.php, если вы хотите, чтобы он был безопасным.
person
jedwards
schedule
05.05.2012