Как мне сделать этот запрос SQL инъекцией? - PullRequest
2 голосов
/ 29 марта 2011

Как я могу сделать этот запрос SQL инъекцией?

$sql=mysql_query("SELECT * FROM updates ORDER BY item_id DESC LIMIT 16");
while($row=mysql_fetch_array($sql))
{
$msg_id=$row['item_id'];
$message=$row['item_content'];
}

Или кто-то может показать мне несколько примеров, или пришлите мне ссылку на учебник Я очень новичок в этом, и если бы кто-нибудь мог мне помочь, это было бы здорово! :)

Ответы [ 5 ]

8 голосов
/ 29 марта 2011

Этот запрос уже является "доказательством SQL-инъекции".

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

Например, если ваш запрос выглядел так:

$sql=mysql_query("SELECT * FROM updates where order_ref = '$order_ref' ORDER BY item_id DESC LIMIT 16");

Тогда у вас возникнет проблема, если на переменную $order_ref может влиять окружение (параметр HTTP-запроса, аргумент командной строки, в основном все, что может повлиять на пользователя). Если кто-то может передать значение в ваше приложение, например "'; delete from updates;", у вас возникнет проблема.

Одним из решений в моем примере выше было бы сначала экранировать значения в $order_ref следующим образом:

$safe_order_ref = mysql_real_escape_string($order_ref);
$sql=mysql_query("SELECT * FROM updates where order_ref = '$safe_order_ref' ORDER BY item_id DESC LIMIT 16");
1 голос
/ 29 марта 2011

Это уже так, поскольку вы не используете какой-либо пользовательский ввод для его создания.

0 голосов
/ 29 марта 2011

SQL-внедрение - это метод внедрения кода, использующий уязвимость безопасности, возникающую на уровне базы данных приложения.Уязвимость присутствует, когда пользовательский ввод либо неправильно фильтруется для строковых буквенных escape-символов, встроенных в операторы SQL, либо пользовательский ввод не является строго типизированным и, следовательно, неожиданно выполняется.Это пример более общего класса уязвимостей, которые могут возникать всякий раз, когда один язык программирования или сценариев встроен в другой.Атаки с использованием SQL-инъекций также известны как атаки с использованием SQL-вставок.

Подробнее см. ЗДЕСЬ .Прочитав это, вы должны знать, почему все говорят, что ваш запрос уже является SQL-инъекцией.

0 голосов
/ 29 марта 2011

Мой мужчина. Вы просто извлекаете данные из своей базы данных. Внедрение SQL происходит, когда пользователь вводит данные с помощью формы или переменной GET (GET не рекомендуется), которую вы будете использовать в самом запросе.

Допустим, у вас есть форма, в которой указано имя кого-либо.

Ваш SQL будет выглядеть так:

$query='SELECT * FROM people WHERE name='.$_POST['name'];

Вам необходимо очистить данные, отправленные пользователем, с помощью mysql_real_escape_string () или какой-либо другой функции очистки SQL.

Другое дело: ничто не является доказательством SQL-инъекции. Всегда есть забавный маленький способ использовать. То, что вы хотите сделать, это сделать так, чтобы много времени люди сдавались.

Продолжай в том же духе, брат.

0 голосов
/ 29 марта 2011

Это является устойчивым к инъекциям. Инъекция происходит, когда вы строите свой SQL из нескольких строк, некоторые из которых исходят от пользователя, в коллекции $ _GET, или $ _POST, или $ _COOKIE. Твой статичен - нет места для инъекций.

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