Построить & # 8220; выход & # 8221; страница с использованием классического ASP, избегая серьезных ошибок межсайтового скриптинга

StackOverflow https://stackoverflow.com/questions/231204

Вопрос

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

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

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

Как мне подойти к этому обновлению, чтобы устранить большинство (если не все) проблем межсайтового скриптинга, используя 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>
Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top