Правилен ли с точки зрения безопасности следующий код..?
$id = $HTTP_GET_VARS['id'];
/* соединяемся с базой данных */
mysql_pconnect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db("mydb");
/* здесь функция вернёт корректное число удалённых записей */
mysql_query("DELETE FROM mytable WHERE id = '$id'");
printf ("Records deleted: %d\n", mysql_affected_rows());
1. galag63 - 20 Октября, 2009 - 15:21:54 - перейти к сообщению
2. Мелкий - 20 Октября, 2009 - 15:32:44 - перейти к сообщению
Нет, достаточно запросить скрипт как ?id=1%20or%201 и всё содержимое таблицы будет стёрто. (может, правда, слегка ошибаюсь в символах URL'a, но, главное смысл - передать в качестве id "1 or 1"). Аналогично можно выполнить вообще любую mysql команду.
3. EuGen - 20 Октября, 2009 - 15:55:05 - перейти к сообщению
galag63 пишет:
$id = $HTTP_GET_VARS['id'];
Это уже давно устарело. Или Ваш учебник слишком старый. Используйте $_GET, $_POST, $_COOKIE или $_REQUEST
4. Leviafant - 20 Октября, 2009 - 20:34:22 - перейти к сообщению
если у вас id является тока цифрой то используйте intval()
приблизительно так, но там уже как удобней будет
приблизительно так, но там уже как удобней будет
http://www.php.su/articles/?cat=...pdb&page=031
Цитата:
Обрабатывайте данные, получаемые из адресной строки или из формы, и приводите их к нужному типу во избежание ошибок и "взломов" сайта. (ещё пример: если требуется идентификатор, то есть целое число, надо обработать его с помощью intval: $id = intval($id)).