2

我被告知要在我的一些银行旧 .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" 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 的信息,但找不到使用它来阻止脚本在页面加载时运行的方法。

提前致谢!

编辑:如果我将输入的值替换为:“<%= Server.HTMLEncode(Request("input_something"))%>”,我是否能够至少部分解决它

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

4

2 回答 2

3

我认为这与浏览器无关?

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

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

那很不好。

正如你已经发现你应该使用

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

页面上您直接在页面上编写用户输入的任何地方。

这应该够了吧

也看看这里

于 2012-12-12T10:55:16.610 回答
0

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

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

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

http://msdn.microsoft.com/en-us/library/ms998274.aspx上对您可以使用的所有可能措施进行了很长时间的阅读

于 2012-12-08T03:57:59.410 回答