Хороший способ дезинфицировать вход в классическом аспе - PullRequest
7 голосов
/ 14 января 2009

Я должен обновить старые проекты на работе. У меня нет опыта работы с классическим asp, хотя я знаком со сценариями php.

  • Какие функции мне следует использовать?
  • Можете ли вы предоставить мне хорошую функцию для некоторой базовой защиты?
  • Есть ли что-то вроде параметризованного запроса в asp?

Спасибо!

Ответы [ 6 ]

9 голосов
/ 14 января 2009

Да, вы можете использовать параметризованные запросы в классическом ASP (точнее, в классическом ADO).

Вот ссылка .

Что касается вывода кодировки, у меня может возникнуть желание создать оболочку для последней библиотеки Microsoft Anti-XSS и вызвать ее с помощью Server.CreateObject. Я далеко не эксперт в такого рода вещах, поскольку я провожу гораздо больше времени в .Net, поэтому думаю, что это сработает.

Server.HTMLEncode на самом деле недостаточно хорош, так как он лишь помещает в черный список несколько символов кодирования. Библиотека Anti-XSS намного лучше, так как она включает в себя то, что приемлемо.

7 голосов
/ 14 января 2009

Всегда используйте Server.HTMLEncode для очистки пользовательского ввода.

Например, если вы устанавливаете переменную из текстового поля формы:

firstName = Server.HTMLEncode (trim (request.form ("firstname")))

2 голосов
/ 14 января 2009

Остерегайтесь внедрения SQL. Не объединяйте пользовательский ввод в строку SQL, а затем выполняйте ее. Вместо этого всегда используются параметризованные запросы.

1 голос
/ 14 января 2009

Одним из способов сделать это может быть добавление проверки в файл header.asp, который перебирает объект Request в поисках неподходящих символов. Например:

<%
    for each x in Request.Form ' Do this for Request.Querystring also
        If InStr(x,"<") <> 0 Then
            ' encode the value or redirect to error page?
        End If
    next
%>
1 голос
/ 14 января 2009

Существует множество функций, начинающихся с Is, таких как IsNumber, IsArray и так далее, которые могут представлять интерес. Также, если вы ожидаете целое число, вы можете использовать CLng(Request("blabla")), чтобы получить его, таким образом, если это не целое число, функция CLng вызовет ошибку.

0 голосов
/ 07 февраля 2019

Просто создайте функцию, которая будет вызываться каждый раз, когда вы хотите вывести строку. Он будет кодировать HTML и выводить его в виде текста. Например. escape html.

FUNCTION esc(a)
esc= Server.HTMLEncode(a)
END FUNCTION

variable = esc("<img src="https://i.imgur.com/eatOKWw.png">");

Response.Write variable

вывод: <img src="https://i.imgur.com/eatOKWw.png">

...