Допустим, у нас есть такое SQL предложение (работает MySQL 5.6):Может ли правильное форматирование SQL-предложений смягчать SQL-инъекцию?
SELECT * FROM order WHERE orderid = 12345 LIMIT 0, 1
Представим, что OrderID поставляется пользователем (взято из запроса URL). У нас есть «LIMIT 0, 1» часть, которая нормально будет возвращать только 1 строку результатов, но злоумышленник может сделать OrderID быть что-то вроде «12345 OR 1 = 1»
SELECT * FROM order WHERE orderid = 12345 OR 1=1 LIMIT 0, 1
Теперь это снова возвращает только один ряд , Теперь злоумышленник добавляет встроенный комментарий к переменной OrderId «12345 OR 1 = 1 -»
SELECT * FROM order WHERE orderid = 12345 OR 1=1 -- LIMIT 0, 1
На этот раз злоумышленник получает запись каждый заказа, потому что он закомментирован на «LIMIT 0, 1» часть.
Однако, если надлежащее форматирование будет использоваться следующим образом:
SELECT *
FROM order
WHERE orderid = 12345
LIMIT 0, 1
Встроенные комментарии (-) бы не закомментировать «LIMIT 0, 1», как на новой линии.
Может ли злоумышленник каким-то образом удалить «LIMIT 0, 1" часть даже при форматировании, как выше?
Ничего себе, никогда не думали о инъекционные '--'. – Taosique
Параметры запроса намного проще, а также предоставляют другие преимущества. –
короткий ответ, нет. готовить и дезинфицировать, думать кулинария – Marriott81