通过 URL 进行跨站点脚本

Posted

技术标签:

【中文标题】通过 URL 进行跨站点脚本【英文标题】:Cross Site Scripting Through URL 【发布时间】:2012-11-24 21:18:22 【问题描述】:

我被告知要在我的一些银行旧 .asp 页面中找到跨站点脚本 (XSS) 的修复程序。

我对该主题进行了一些研究,但没有找到问题的答案。这是我第一次听说 XSS,也是我第一次看 ASP(虽然页面除了 html 什么都没有),而且我已经有 2 年左右没有接触网页设计了,所以我非常非常生疏。

例如,我有这个表格

<form method="POST" id="CH" name="CH" action="http://some_url/some.asp">
<input type="hidden" name="srv" value="1" ID="srv"/>
<TABLE border="0" cellpadding="0" cellspacing="0"  align="center">
    <TR valign="top">
            <TR>
                <TD align="center">Input something here
                <input name="input_something" type="text" class="field-no-fit" maxlength="12" value="">
                </TD>
            </TR>
    </TR>
</TABLE>
</form>

如果我手动输入 URL(包含此表单)为

http://this_url/this.asp?1=%22%3E%3Cscript%3Ealert%28HelloWorld%29%3C/script%3E%3Cimg%20alt=%22%22%20src=%22

页面将加载,然后它会引发 javascript 警报并显示错误图像。

我的目标是在打开页面时阻止脚本运行。 我阅读了有关 Server.HTMLEncode 的信息,但找不到使用它来阻止脚本在页面加载时运行的方法。

提前致谢!

编辑:如果我将输入的值替换为: ""

我无法测试它,因为目前我无法访问 IE6,并且所有其他浏览器(包括 IE>6 版本)都避免了该错误(已在安全选项卡中禁用 XSS 过滤器,但它不起作用)

【问题讨论】:

您是否试图阻止 XSS 攻击?或者您只是想阻止所有 javascript 在页面上加载? 我正在努力防止 XSS 攻击是的 ;) 【参考方案1】:

我认为这与浏览器无关?

你显然直接在你的页面上写了一个查询字符串参数的内容,像这样:

<%=Request.QueryString("1")%>

这很糟糕。

你已经发现你应该使用

server.htmlencode( Request.QueryString("1") )

页面上您直接在页面上编写用户输入的所有位置。

这应该可以解决问题

also have a look here

【讨论】:

【参考方案2】:

(我对 ASP 了解不多)您可以通过启用 ASP 请求验证来轻松解决问题。与任何行为更改一样,其他页面上可能会出现许多问题(尽管这会令人惊讶),因此请先测试更改。请参阅http://msdn.microsoft.com/en-us/library/bb355989.aspx 中的第 1 步

您的服务器正在填写页面上的所有标签,包括来自 URL 参数的隐藏“srv”输入,没有过滤 HTML 标签,然后将其粘贴到页面中。您可以将此表单限制为仅响应 POST,而不是 GET 方法,那么您的示例攻击将不起作用。这可能是最简单、最无害的修复方法。

最后,看看你是否可以为任何用于跟踪会话的 cookie 设置 cookie 属性到 HTTPOnly。

在http://msdn.microsoft.com/en-us/library/ms998274.aspx 上阅读有关您可以使用的所有可能措施的非常长的文章

【讨论】:

您的答案适用于 asp.net。问题是关于经典的asp

以上是关于通过 URL 进行跨站点脚本的主要内容,如果未能解决你的问题,请参考以下文章

加强跨站点脚本:验证不佳

如何修复JSP表达式标记中的跨站点脚本(XSS)

AMF和跨站点脚本漏洞混淆

如何防止跨站点脚本?

jq.ui.js ibm 跨站点脚本编制怎么解决

防止来自静态站点的跨站点脚本攻击