Все, що я бачив на ін'єкціях SQL-ін'єкцій, схоже, говорить про те, що параметризовані запити, особливо в збережених процедурах, є єдиним способом захисту від таких атак. Поки я працював (ще в темні століття) зберігаються процедури розглядалися як погана практика, головним чином тому, що вони розглядалися як менш рентабельні; менш випробуваний; сильно поєднані; і заблокував систему в одного постачальника; ( це питання охоплює деякі інші причини).
Хоча, коли я працював, проекти практично не знали про можливість таких атак; Для захисту бази даних від корупції різного роду були прийняті різні правила. Ці правила можна узагальнити як:
- Жоден клієнт / додаток не мав прямого доступу до таблиць баз даних.
- Усі звернення до всіх таблиць проводилися через представлення даних (а всі оновлення базових таблиць здійснювались через тригери).
- Усі елементи даних мали вказаний домен.
- Жоден елемент даних не був допущений до зведення нанівець - це мало наслідки, які зусилля DBA моментували зубами; але був примусовий.
- Ролі та дозволи були встановлені належним чином - наприклад, обмежена роль для надання лише поглядам права на зміну даних.
Тож чи є набір (примусових) правил, таких як цей (хоча це не обов'язково саме цей набір), підходящою альтернативою параметризованим запитам у запобіганні атак на ін'єкцію SQL? Якщо ні, то чому б і ні? Чи можна захистити базу даних від таких атак спеціальними заходами для бази даних?
EDIT
Наголос на питанні незначно змінився, з огляду на отримані початкові відповіді. Основне питання не змінилося.
EDIT2
Підхід, покладаючись на параматеризовані запити, видається лише периферійним кроком у захисті від атак на системи. Мені здається, що більш фундаментальні засоби захисту є і бажаними, і можуть покладатися на такі запити не потрібно або менш критично навіть захищати спеціально від нападів ін'єкцій.
Підхід, включений у моє запитання, базувався на "озброєнні" бази даних, і я не мав уявлення, чи є це життєздатним варіантом. Подальші дослідження показали, що існують такі підходи. Я знайшов такі джерела, які дають певні вказівки на такий тип підходу:
http://database-programmer.blogspot.com
http://thehelsinkideclaration.blogspot.com
Принципові особливості, які я взяв із цих джерел:
- Обширний словник даних у поєднанні з широким словником даних про безпеку
- Генерація тригерів, запитів та обмежень із словника даних
- Мінімізуйте код та максимізуйте дані
Хоча відповіді, які я мав до цього часу, дуже корисні і вказують на труднощі, що виникають внаслідок ігнорування параматеризованих запитів, в кінцевому підсумку вони не відповідають на мої початкові запитання (зараз підкреслено жирним шрифтом).