Используйте параметризованные запросы с ADODB или PDO . Эти библиотеки знают лучшую функцию escape на основе базы данных, к которой она подключена. Они позволяют переключаться между mysql и ms-sql без внесения уязвимостей.
Инъекции SQL для MySQL и MS-SQL радикально отличаются.
SQL-инъекция для MS-SQL намного более серьезна. Для одного вы можете составлять запросы:
select * from `table` where id='1' ; drop table `table`;-- '
Экранирование совершенно другое, addlashses () не не останавливает внедрение SQL под MS-SQL. Он использует систему двойных кавычек, поэтому это экранированный запрос:
select * from table where test='trying to inject '' didn''t work!'
Хакер также может получить доступ к cmd.exe, используя xp_cmdshell
из запроса sql. Убедитесь, что эта привилегия была удалена!
В MySQL вы не можете составлять стеки, поэтому обычно используется объединение select (работает только при внедрении в select, в противном случае вы можете использовать sub-select, но не можете сложить drop / обновить / удалить / вставить поверх выбора):
select somthing from table where 1 union select password from mysql.user
Экранирование выполняется с помощью обратной косой черты, addlashes () работает большую часть времени, но mysql_real_escape_string () намного лучше .
select * from table where test='trying to inject \' didn\'t work!'
Также вы хотите отключить file_priv, иначе хакер может удалить черный ход:
select test from table where name='jon' union select "<?php eval($_GET[e])?>" into outfile "/var/www/backdoor.php"-- '