Я проверял свои веб-страницы на наличие SQL-инъекций, когда главные страницы не отвечали на него, я создал тестовый скрипт:
<?
$a = $_POST["a"];
$username="...";
$password="...";
$database="...";
mysql_connect ('...',$username,$password);
mysql_select_db($database) or die( "Unable to select database");
$ress=mysql_query("SELECT username FROM userinfo WHERE id='$a'");
$row = mysql_fetch_array($ress);
print $row[0];
?>
<form name="form" action="hackMe.php" method="POST">
<input id="a" name="a" size="150">
<input name="Submit" type="submit" value="Submit">
</form>
Но когда я пытаюсь эту строку:
'; UPDATE userinfo SET email = '[email protected]' WHERE email = '[email protected]
Я просто получаю сообщение об ошибке, и нет изменений в базе данных.
Есть идеи почему?
котировка из руководства:
mysql_query () отправляет уникальный запрос (несколько запросов не поддерживаются) в текущую активную базу данных на сервере, который связан с указанным
Подсветка мной. mysql_query()
разрешает только один запрос на вызов, второй запрос после ;
игнорируется
Чтобы проверить SQL-инъекцию, вы должны использовать запрос, которому не нужен второй, чтобы причинить вред.
Редактировать:
Можно разрешить несколько запросов, но вы должны явно указать это в mysql_connect()
вызов.
mysql_connect($host, $username, $password, false, 65536);
// defined by MySQL:
// #define CLIENT_MULTI_STATEMENTS 65536 /* Enable/disable multi-stmt support */
Других решений пока нет …