Проблема с внедрением MySQL

В последнее время я кодировал свой веб-сайт на PHP и очень гордился собой за свои передовые методы очистки ввода перед тем, как использовать его в запросе. Все шло отлично, пока мой друг не сказал, что мне нужно очистить свой ввод. Когда я попытался объяснить ему, что он был продезинфицирован, он показал мне, что нашел все в таблице «пользователи» в моей базе данных. Я не знал, как это сделать, поэтому подумал, что опубликую то, что я делал неправильно, из-за чего моя дезинфекция не работала. Вот код PHP, который он использовал:

start_mysql(); // Starts the databases stuff, etc.

$id = mysql_real_escape_string($_GET['id']);
$game = mysql_query("SELECT * FROM `games` WHERE `id` = $id LIMIT 0, 1");

Все, что он делал, это менял параметр id, давая ему возможность использовать SQL-инъекцию в моей базе данных. Я думал, что mysql_real_escape_string экранирует все подобные символы, но, видимо, я ошибался. Я провел несколько тестов с обычной строкой, чтобы увидеть, что произойдет, и вот что там написано

URL: /game.php?id= 'OR' '='

echo($_GET['id']); // This echo'd: \' OR \'\' = \'
echo(mysql_real_escape_string($_GET['id'])); // This echo'd: \\\' OR \\\'\\\' = \\\'

Итак, мой простой вопрос: что я Я делаю что-то не так?

7
задан Matt 16 June 2011 в 19:29
поделиться