通过 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 进行跨站点脚本的主要内容,如果未能解决你的问题,请参考以下文章