使用经典ASP构建“退出”页面,避免主要的跨站点脚本缺陷
我正在更新我工作的公司中维护的许多子站点使用的经典ASP网页。使用经典ASP构建“退出”页面,避免主要的跨站点脚本缺陷
该页面的目的是通知用户他们将离开“我们”的网站并转到另一个网站。这基本上是免责声明,但由于资源限制和时间限制,我无法将免责声明添加到我们管理的每个网站。
这是问题的关键。当前代码从查询字符串中提取变量以在新窗口中创建“continue”链接。这显然会以跨站点脚本的形式产生许多问题。
如何处理这一更新,以消除使用VBScript/ASP的跨站点脚本问题的大部分(如果不是全部)。
我使用的代码如下。
<%@ Language = vbScript %>
<% Option Explicit %>
<%
Dim strLink
strLink = Request.QueryString("site")
strLink = Replace(strLink, "<", "<")
strLink = Replace(strLink, ">", ">")
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白名单是由我的好同事德威特·克林顿的“泛起了在App Engine上清凉的Python Web服务”的最新产品。
它做了一件事,它做得很好。您可以传递服务HTML,它会返回一个消毒版本。
虽然我本来赞赏布莱恩尔德的是对我最好的答案回应,我已经认识到,在这个回答中列出Web服务实际上为我提供的回答我的问题。我会说布赖恩的回应是更广泛的方法解决方案,更适用于更多的用户。 – Nip 2009-09-09 04:28:53
您需要实现以下“积极的安全模式”的概念的方法。你应该解析“站点”变量,并确保它明确地符合允许的内容,而不是写一些看起来应该被禁止的内容。这会让你的攻击更具弹性,尤其是未曾预料的攻击。
我建议编写一个正则表达式(或者询问如何在stackoverflow上编写这样的正则表达式)。
此外,虽然张贴迈克尔的Web服务是很酷,你应该是否接受或不采取这样的事情的依赖性评估。
你可以添加逻辑继续页面,以确保它仅由一个网页叫上你的网站之一或者基于URL或IP地址。您还可以传递时间和哈希代码以增加安全性。
如果该链接已经在您的网站上,您为什么需要清理它? – 2008-10-23 19:56:52
的问题不在于我们添加的链接是“坏”那就是我们需要一个门户网页,将接受任何URL中传递,然后提供所需的免责声明和转发用户一起,如果他们继续在离开现场的行动。 (这是一个财务网站,很多免责声明和合法的“东西”来处理)。所以总的问题是任何人都可以将URL(或“坏”脚本)传递给页面,并可能会创建XSS问题。 – Nip 2009-09-09 04:33:31