Как может работать этот тип SQL-инъекций, даже если безопасность вообще не рассматривается? - PullRequest
1 голос
/ 20 января 2010
bob'); drop table students; --

В PHP это не удастся:

mysql("statement1;statement2;");

Может быть только одно утверждение, поэтому я действительно сомневаюсь, как вышеописанная инъекция вообще может работать?

Ответы [ 4 ]

1 голос
/ 20 января 2010

Это просто мультфильм !

Вы правы, мультизапрос не работает по умолчанию и вообще не поддерживается простым расширением mysql в PHP.

Существуют более тонкие эксплойты SQL-инъекций, но тогда комиксы не будут такими смешными, не правда ли?

1 голос
/ 20 января 2010

Ну, это не работает в MySQL, но есть другие вещи, которые можно сделать с помощью SQL-инъекции.

Учтите это:

$sql = "SELECT * FROM users WHERE username = '$username' AND passwd = '$password'";

// run the query, check if the user exists, let them in, etc

Если вы напишите это в поле username:

admin' -- 

становится:

SELECT * FROM users WHERE username = 'admin' -- AND passwd = 'whatever'

Существует также возможность атак типа «отказ в обслуживании», когда они структурируют входные данные так, что выполнение запроса занимает очень много времени, тратя все ресурсы на вашем сервере.

//input:

admin' AND id IN (SELECT u1.id FROM users u1, users u2, users u3, users u4)

Если бы в вашей системе было 1000 пользователей, этот подзапрос попытался бы вернуть 1 000 000 000 000 записей.

1 голос
/ 20 января 2010

Этот тип внедрения будет работать, если в коде используется библиотека mysqli , поскольку он позволяет одновременно выполнять несколько запросов .

0 голосов
/ 20 января 2010

Не уверен, что это будет работать, но попробуйте использовать // в качестве разделителя вместо ;, например,

bob')// drop table students// --

Информация об отправке нескольких операторов с использованием оператора multi_query из PHP здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...