Як я це бачу, атаки ін'єкцій SQL можна запобігти:
- Ретельно перевіряйте, фільтруючи, кодуючи вхід (перед вставкою в SQL)
- Використання підготовлених операторів / параметризованих запитів
Я гадаю, що у кожного є плюси і мінуси, але чому номер 2 зняв і став вважатися більш-менш фактичним способом запобігання ін'єкційним атакам? Це просто безпечніше і менш схильне до помилок чи були інші фактори?
Як я розумію, якщо правильно використовувати # 1 і дотримуватися всіх застережень, він може бути таким же ефективним, як і №2.
Санітизація, фільтрування та кодування
З моєї сторони була певна плутанина між тим , що означають дезінфікування , фільтрування та кодування . Я скажу, що для моїх цілей все вищезазначене можна вважати варіантом 1. У цьому випадку я розумію, що дезінфекція та фільтрація можуть змінювати або відкидати вхідні дані, при цьому кодування зберігає дані як є , але кодує їх правильно, щоб уникнути нападів ін'єкцій. Я вважаю, що доступ до даних може розглядатися як спосіб кодування.
Параметризовані запити проти бібліотеки кодування
Є відповіді, де поняття parameterized queries
та до encoding libraries
них трактуються взаємозамінно. Виправте мене, якщо я помиляюся, але я маю враження, що вони різні.
Я розумію, що encoding libraries
незалежно від того, наскільки вони хороші, вони завжди можуть змінити SQL "Програму", оскільки вони вносять зміни в сам SQL, перш ніж він буде відправлений в RDBMS.
Parameterized queries
з іншого боку, надішліть програму SQL RDBMS, яка потім оптимізує запит, визначає план виконання запитів, вибирає індекси, які слід використовувати тощо, а потім підключає дані, як останній крок всередині RDBMS себе.
Кодування бібліотеки
data -> (encoding library)
|
v
SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement
Параметризований запит
data
|
v
SQL -> RDBMS (query execution plan defined) -> data -> execute statement
Історичне значення
Деякі відповіді згадують, що історично параметризовані запити (PQ) створювались з міркувань продуктивності, і до нападів ін'єкцій, які націлили націлені проблеми кодування, стали популярними. В якийсь момент стало очевидним, що PQ також досить ефективно проти нападів ін'єкцій. Щоб відповідати духу мого питання, чому PQ залишався методом вибору і чому він процвітав вище більшості інших методів, коли справа стосується запобігання атак SQL-ін'єкції?