0

我正在更新一个经典的 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>
4

3 回答 3

2

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

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

此外,虽然 Michael 发布的 Web 服务非常酷,但您应该评估是否可以接受对此类事物的依赖。

于 2008-10-25T02:57:46.857 回答
1

这是我推荐的 HTML 清理 -

HTML Whitelist 是我的好同事 DeWitt Clinton 提出的“App Engine 上推出的很酷的 Python Web 服务”中的最新一个。

它只做一件事,而且做得很好。您可以传递服务 HTML,它会返回经过清理的版本。

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

于 2008-10-23T21:32:08.197 回答
0

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

于 2008-10-26T17:32:03.960 回答