Как предотвратить инъекции в ASP / VBScript? - PullRequest
1 голос
/ 11 ноября 2008

Каковы наилучшие (или, по крайней мере, наиболее распространенные) способы в ASP (VBScript) для обработки ввода? Мои главные проблемы - это инъекции HTML / JavaScript и SQL. Есть ли какой-то эквивалент PHP htmlspecialchars или addslashes и так далее? Или я должен сделать это вручную с помощью функции замены строк?

Ответы [ 2 ]

5 голосов
/ 11 ноября 2008

Суть в следующем:

  1. Всегда кодируйте пользовательский ввод в формате HTML перед тем, как записывать его на свою страницу. Server.HTMLEncode() делает это для вас.
  2. Всегда используйте параметризованные запросы для взаимодействия с базой данных. Объекты ÀDODB.Command и ADODB.CommandParameter являются правильным выбором здесь.
  3. Всегда используйте утилиту URLScan и блокировку IIS на сервере IIS, который отображает страницу, если они не версии 6 и выше, для которых эти средства больше не требуются.

Если вы придерживаетесь пунктов 1 и 2 рабски , я не могу думать о многих вещах, которые могут пойти не так.

Большинство уязвимостей происходит из-за неправильной кодировки пользовательского ввода или построения строк SQL из него. Если вы по какой-то причине пришли к тому, что вам мешает ввод HTML-кодирования, вы обнаружили недостаток дизайна в своем приложении.

2 голосов
/ 11 ноября 2008

Я бы добавил в список Томалаков еще один пункт.

Избегайте использования конкатенации значений полей в коде SQL. То есть в некоторых случаях хранимая процедура может построить некоторый SQL в строке для последующего выполнения. Это хорошо, если только текстовое поле не используется как часть его конструкции.

Параметр команды может защитить код SQL, предназначенный для ввода значения от перехвата, при выполнении нежелательного SQL, но он позволяет такому нежелательному SQL стать данными в базе данных. Это уязвимость первого уровня. Уязвимость внедрения второго уровня существует, если значение поля затем используется в некоторой конкатенации строк SQL внутри хранимой процедуры.

Еще одним соображением является то, что это просто минимальная защита. Все, что он делает, это делает попытки атаки безвредными. Однако во многих случаях может быть лучше добавить к этому систему, которая предотвращает такой ввод данных в целом и / или изменяет администраторов для потенциальной атаки с использованием инъекций.

Именно здесь проверка ввода становится важной. Я не знаю ни одного инструмента, который бы сделал это для вас, но несколько простых регулярных выражений могут помочь. Например, «<\ w +» обнаружит попытку включить тег HTML в поле. </p>

...