Когда я начал писать первые SQL-операторы в своих программах, я чувствовал себя вполне комфортно, защищая себя от SQL-инъекций очень простым методом, который мне показал коллега. Он заменил все одинарные кавычки на две одинарные.
Так, например, есть поле поиска, в котором вы можете ввести имя клиента для поиска в таблице клиентов. Если вы введете
Питерская парикмахерская
Оператор SELECT будет выглядеть как
SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'
Если теперь злоумышленник вставит это:
';DROP TABLE FOO; --
Заявление будет выглядеть так:
SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'
Это не приведет к удалению какой-либо таблицы, но будет искать в таблице клиента имя клиента '; DROP TABLE FOO; - которое, я полагаю, не будет найдено; -)
Теперь, спустя некоторое время написания операторов и защиты от SQL-инъекций с помощью этого метода, я прочитал, что многие разработчики используют параметризованные операторы, но я никогда не читал статью, где использовался «наш» метод. Так что, безусловно, есть веская причина для этого.
Какие сценарии будут охватывать параметризованные операторы, а наш метод - нет? Каковы преимущества параметризованных операторов по сравнению с нашим методом?
Спасибо
Philipp