Создайте «выходную» страницу, используя Classic ASP, избегая серьезных ошибок межсайтового скриптинга - PullRequest
0 голосов
/ 23 октября 2008

Я работаю над обновлением классической веб-страницы ASP, используемой рядом дочерних сайтов, поддерживаемых в компании, в которой я работаю.

Цель страницы - уведомить пользователя о том, что он покидает «наш» сайт и переходит на другой сайт. По сути, это отказ от ответственности, но из-за ограниченности ресурсов и временных ограничений я не могу добавить отказ от ответственности на каждый сайт, которым мы управляем.

В этом суть проблемы. Текущий код извлекает переменную из строки запроса, чтобы создать ссылку «продолжить» в новом окне. Это, очевидно, создает много проблем в виде межсайтовых скриптов.

Как мне подойти к этому обновлению, чтобы устранить большинство (если не все) проблем межсайтового скриптинга, используя vbScript / ASP.

Код, который я использую, ниже.

<%@ Language = vbScript %>
<% Option Explicit %>

<%
Dim strLink
strLink = Request.QueryString("site")
strLink = Replace(strLink, "<", "&lt")
strLink = Replace(strLink, ">", "&gt;")
strLink = Replace(strLink, chr(34), "")
strLink = Replace(strLink, "script", "", 1, -1, 1)
strLink = Replace(strLink, "onclick", "", 1, -1, 1)
strLink = Replace(strLink, "ondblclick", "", 1, -1, 1)
strLink = Replace(strLink, "onmousedown", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseover", "", 1, -1, 1)
strLink = Replace(strLink, "onmousemove", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseout", "", 1, -1, 1)
strLink = Replace(strLink, "onkeypress", "", 1, -1, 1)
strLink = Replace(strLink, "onkeydown", "", 1, -1, 1)
strLink = Replace(strLink, "onkeyup", "", 1, -1, 1)
strLink = Replace(strLink, "onfocus", "", 1, -1, 1)
strLink = Replace(strLink, "onblur", "", 1, -1, 1)
strLink = Replace(strLink, "&&", "")
strLink = Replace(strLink, "##", "")
strLink = Replace(strLink, "&#", "")
%>

<a href="<%= strLink %>">Continue</a>

Ответы [ 3 ]

2 голосов
/ 25 октября 2008

Вам необходимо реализовать подход, который следует концепции «Модель позитивной безопасности». Вы должны проанализировать переменную «site» и убедиться, что она явно соответствует тому, что разрешено, а не писать что-то, что ищет то, что следует запретить. Это сделает ваш подход гораздо более устойчивым к атакам, особенно непредвиденным.

Я предлагаю написать регулярное выражение (или спросить, как написать такое регулярное выражение в stackoverflow).

Кроме того, хотя веб-сервис, опубликованный Майклом, довольно крутой, вы должны оценить, является ли это приемлемым или нет принимать зависимость от такого рода вещей.

1 голос
/ 24 октября 2008

Это то, что я рекомендую для очистки HTML -

HTML Whitelist - это последняя из «крутого маленького веб-сервиса Python, созданного на App Engine» моим хорошим коллегой ДеВиттом Клинтоном.

Это делает одну вещь, и это делает это хорошо. Вы можете передать сервис HTML, и он вернет очищенную версию.

http://html -whitelist.appspot.com /

0 голосов
/ 26 октября 2008

Вы можете добавить логику для продолжения страницы, чтобы она вызывалась только страницей на одном из ваших сайтов в зависимости от URL или IP-адреса. Вы также можете передать время и хешировать код для дополнительной безопасности.

...