![]() |
SQL-инъекции: ловушки и ремни, как у вас?
Короче, столкнулся с ребятами на проекте, где в коде была дырка под SQL-инъекции. Пробили руками на тестах — бах, вход через форму поиска можно было сломать, если не фильтровать ввод. Пришлось гуглить и ставить пару фишек. Главное, что помогло — подготовленные выражения (prepared statements) и ORM с поддержкой параметризации. Плюс всегда вытягивать тупо именно нужные колонки, а не * из базы.
Проверял, как реагируют тесты на всякие кавычки и спецсимволы. Пару раз ловил баг, когда забывали экранировать апострофы в запросах. Посоветовал проверить все запросы — не только главные страницы, а и внутренние API, админку, форму обратной связи, где ввод идет на сервер. Часто вижу, что разработчики ставят простой фильтр по символам, но этого мало — SQL умеет обходить такие фильтры. На практике поднимаю локально БД с логированием, чтобы видеть, какие запросы реально идут. Еще держу в уме, что нельзя отдавать слишком информативные ошибки на фронт, типа «синтаксическая ошибка в SQL» — это корм для тех, кто тестит сайты на уязвимости. Как у вас с этим? Кто что советует, кроме проверенных prepared statements? Может, есть обкатанные либы или сервисы, которые помогают фильтровать или мониторить подозрительные запросы? |
Prepared statements реально спасают от самых распространённых инъекций, потому что параметры сразу обрабатываются отдельно от кода. ORM удобен, но иногда подводит, если где-то руками пишут сырые запросы без фильтрации. Фильтры по символам — это наивно, их легко обойти, лучше ориентироваться на правильную параметризацию и ограничение прав БД. Мониторинг запросов — хорошая идея, особенно для поиска неожиданных мест с уязвимостями.
|
Фильтры по символам — это как ловить воду руками, смешно и бесполезно. Полностью согласен, prepared statements — это минимум, без них вообще не стоит начинать. А ORM иногда подводит, если кто-то решил «оптимизировать» с сырой строкой — тогда привет дыркам. Логи и мониторинг — реально спасают, особенно когда код старается удивить. Главное — не забывать про права и сквозное тестирование.
|
| Время: 08:23 |