Я сделал довольно много чтения и до сих пор не понимаю 100%, как некоторые из инъекций SQL происходят!
Я хотел бы видеть, от тех, кто знает, конкретные примеры внедрения SQL на основе моего примера, чтобы он мог быть реплицирован, протестирован и исправлен. Я попытался SQL-инъекцией моего кода и не мог, поэтому я хотел бы, чтобы кто-то доказал мне иначе!
1.Am Правильно, что SQL-инъекция может происходить ТОЛЬКО с методами POST или GET, что означает, что на веб-сайте это должна быть форма сообщения, например «регистрация или поиск» или запрос типа «search.php? Tags = love»?
Сказать, что это возможно, чтобы ввести следующий код, который имеет метод POST?
$name = trim($_POST['username']); $mail = trim($_POST['email']); $password = trim($_POST['password ']); if ($errors == "false") { $sql = "INSERT INTO clients SET name='" . mysql_real_escape_string($name) . "', mail='" . mysql_real_escape_string($mail) . "', password='" . mysql_real_escape_string(sha1($password)) . "'"; $connection->execute($sql); }
2. У другого есть метод GET: rate.php?like&videoID=250&userID=30
$sql = "SELECT videoID FROM likes WHERE videoID = '" .mysql_real_escape_string($videoID). "' AND UID = '" .mysql_real_escape_string($userID). "' LIMIT 1"; $connection->execute($sql);
Пожалуйста, помогите тем, кто чувствует себя свободно с предметом, но используйте конкретные примеры.
Заранее спасибо,
Ilia
Атаки SQL-инъекций происходят, когда пользовательский ввод некорректно закодирован. Как правило, пользовательский ввод – это некоторые данные, которые пользователь отправляет с ее запросом, то есть значения в массивах $_GET
, $_POST
, $_COOKIE
, $_REQUEST
или $_SERVER
. Тем не менее, пользовательский ввод может также поступать из множества других источников, таких как сокеты, удаленные веб-сайты, файлы и т. Д. Поэтому вы должны действительно рассматривать все, кроме констант (например, 'foobar'
) в качестве пользовательского ввода .
В mysql_real_escape_string
используется для кодирования (= escape) пользовательских входов. Поэтому код корректен, т. Е. Не позволяет атаковать SQL-инъекциями.
Обратите внимание, что очень легко забыть вызов mysql_real_escape_string
– и достаточно одного времени для опытного злоумышленника! Поэтому вы можете использовать современный PDO с подготовленными операторами вместо adodb.
Я тщательно изучал эту тему недавно и хотел бы поделиться с другими довольно интересным материалом, тем самым сделав мой вопрос более полным и поучительным для всех.