Конечно, первый шаг для предотвращения атак SQL-инъекций - это всегда использовать параметризованные запросы, никогда не конкатенировать предоставленный клиентом текст в строку SQL.Использование хранимых процедур не имеет значения, если вы сделали шаг к параметризации.
Однако существует вторичный источник внедрения SQL, где сам код SQL (обычно в SP) должен будет составлять некоторый SQL, который затемEXEC'd.Следовательно, все еще возможно быть уязвимым для внедрения, даже если ваш ASP-код всегда использует параметризованные запросы.Если вы можете быть уверены, что ни один из ваших SQL не сделает этого и никогда не будет делать , то вы достаточно защищены от SQL-инъекций.В зависимости от того, что вы делаете и какую версию SQL Server вы используете, бывают случаи, когда SQL-компоновка SQL неизбежна.
Учитывая вышесказанное, для здравого подхода может потребоваться, чтобы ваш код проверял входящие строковые данные на наличие шаблонов SQL.Это может быть довольно интенсивной работой, потому что злоумышленники могут довольно тщательно избегать обнаружения шаблонов SQL.Даже если вы чувствуете, что используемый вами SQL не является уязвимым, полезно иметь возможность обнаруживать такие попытки, даже если они терпят неудачу.Хорошо иметь возможность подобрать это и записать дополнительную информацию о HTTP-запросах, несущих попытку.
Экранирование является наиболее надежным подходом, в этом случае, хотя все код, который использует данныев вашей базе данных необходимо понимать механизм выхода и уметь удалять данные, чтобы использовать их.Представьте, например, инструмент для создания отчетов на стороне сервера, который должен был бы удалить поля базы данных, прежде чем включать их в отчеты.
Server.HTMLEncode
предотвращает другую форму внедрения.Без этого злоумышленник может внедрить HTML (включая JavaScript) в выходные данные вашего сайта.Например, представьте приложение-магазин, позволяющее покупателям просматривать продукты, которые другие покупатели могут прочитать.Злонамеренный «клиент» может внедрить некоторый HTML-код, который может позволить им собрать информацию о других реальных клиентах, которые читают их «обзор» популярного продукта.
Следовательно всегда используйте Server.HTMLEncode
ввсе строковые данные, полученные из базы данных.