Недавно один из веб-сайтов наших клиентов стал жертвой атаки SQL-инъекцией из-за невозможности очистки параметров строки запроса, предоставленных странице. С тех пор уязвимый код был идентифицирован и исправляется, но меня удивляет, что MySQL и SQL Server обрабатывают строки с несколькими запросами.
Уязвимый код используется на нескольких десятках веб-сайтов, два из которых работают на SQL-сервере, а остальные - на MySQL. С этим кодом мы никогда ранее не подвергались атаке инъекций (по милости Бога), но как только мы выпустили два веб-сайта, которые работают на сервере SQL (с одной и той же кодовой базой), этот сайт был быстро использован. Способ введения был довольно прост:
page.asp?param=1;delete from [some_table];
Как я уже сказал, уязвимый код распределяется между многими сайтами, но если я пытаюсь выполнить инъекцию такого же типа на наших сайтах MySQL, ASP выдает красивую ошибку сервера, которая сообщает нам, что в запросе произошла ошибка:
SELECT * FROM Table1 WHERE ID = 1;DELETE FROM TABLE1;
Тестируя это далее, я смог убедиться, что драйвер MySQL ODBC 3.51 не позволяет выполнять два запроса SQL в одном и том же выражении, когда объект ADODB.Connection вызывает Execute (""), а собственный клиент SQL Server (10.1). ) не имеет проблем при выполнении двух параллельных запросов. Это на самом деле просто конфигурация провайдера, которая делает SQL-сервер уязвимым таким образом, а MySQL - нет, или это происходит откуда-то еще?