Вопросы об атаках второго порядка в MYSQL - PullRequest
4 голосов
/ 26 октября 2011

прямо сейчас я использую подготовленные операторы, чтобы выбрать / вставить данные в MySQL. Хорошо, мой вопрос, который я узнал о атаках второго порядка. Так, например, пользователь регистрируется на моем сайте. И использует в качестве электронной почты или имя пользователя что-то вроде этого

"username '; DELETE Orders;--"

это получает вставки в таблицу MySQL

Поэтому, когда я снова получаю данные через подготовленное утверждение, и снова вставляю / делаю что-то с ним в подготовленном утверждении.

Я был бы в безопасности, потому что я использую подготовленные заявления?

Пример:

Get Bad Data:

$sql = "SELECT * FROM USERS where USERID = 1";
...
$stmt->bind_result($username);
...

Next Query:
INSERT or do other things:
$SQL = "SELECT * FROM email WHERE USERNAME = ?";
....
$stmt->bind_param('s', $username);
...

После моих размышлений я буду в безопасности, если я сделаю это так? Или возможна утечка?

Но я был бы атакован, если бы сделал это:

$sql = "SELECT * FROM email WHERE username = $username";
$stmt = $mysqli->prepare($sql);
$stmt->execute();

Спасибо: -)

1 Ответ

1 голос
/ 27 октября 2011

До тех пор, пока заполнители постоянно используются (везде!) для всех [переменных] данных , все атаки SQL-инъекций * срываются, второго порядка или иным образом.

Это не означает, что нет уязвимостей или других векторов атаки - но это означает, что кто-то с «умным именем пользователя» не сможет отправить неожиданное «УБРОСИТЬ»"в базу данных.Как уже указывалось, если где-нибудь использует «небезопасный оператор SQL», то wham! гарантии отключены.

(Набор «небезопасных операторов SQL» включает в себя:но не ограничиваясь этим, любое такое утверждение, которое не использует заполнители для всех [переменных] данных .)

Счастливое кодирование.


* Это предполагает, что в поддержке заполнителя / драйвере базы данных, конечно, нет ошибок / уязвимостей.Но это другая история ...

...