我正在更新我工作的公司维护的许多子站点所使用的经典 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>
有帮助吗?

解决方案

这是我推荐用于HTML清理的方法 -

HTML Whitelist是“App Engine引发的酷小Python Web服务”中的最新版本。我的好同事德威特克林顿。

它做了一件事,它做得很好。您可以传递服务HTML,它将返回一个已清理的版本。

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

其他提示

您需要实施一种遵循“积极安全模型”概念的方法。您应该解析“site”变量并确保它明确符合允许的内容,而不是编写一些查找应该禁止的内容。这将使您的方法更能抵御攻击,尤其是意外攻击。

我建议编写一个正则表达式(或者在 stackoverflow 上询问如何编写这样的正则表达式)。

另外,虽然 Michael 发布的 Web 服务非常酷,但您应该评估是否可以接受依赖这样的东西。

您可以添加逻辑以继续页面,以确保它仅由您的某个站点上的页面基于URL或IP地址调用。您还可以通过时间和散列代码来增加安全性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top