通过URL跨站点脚本

时间:2012-12-06 18:52:39

标签: asp-classic xss javascript-injection

我被告知在我的一些银行旧.asp页面中找到Cross Site Scripting(XSS)的修复程序。

我做了一些关于这个问题的研究,但我找不到问题的答案。这是我第一次听说XSS和第一次看ASP时(尽管页面上只有HTML),我现在已经没有进入网页设计大约两年了,所以我非常生疏。

例如,我有这个表格

<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" width="100%" 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但无法找到使用它来阻止脚本在页面加载时运行的方法。

提前致谢!

编辑:如果我用以下内容替换输入值,我是否能够(至少部分地)解决它:     “&lt;%= Server.HTMLEncode(Request(”input_something“))%&gt;”

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

2 个答案:

答案 0 :(得分:3)

我认为这与浏览器无关?

你显然直接在你的页面上写了一个查询字符串参数的内容,如下所示:

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

这很糟糕。

正如您已经发现的那样,您应该使用

server.htmlencode( Request.QueryString("1") )
在您的页面上的任何地方,您可以直接在页面上编写用户输入。

应该做的伎俩

also have a look here

答案 1 :(得分:0)

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

中的第1步

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

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

您可以使用的所有可能措施的详细阅读时间为http://msdn.microsoft.com/en-us/library/ms998274.aspx