2012-12-06 65 views
1

我被告知要在我的一些旧的.asp页面中找到对跨站点脚本(XSS)的修复。通过URL跨站点脚本

我做了一些关于这个问题的研究,但是我没有找到我的问题的答案。这是我第一次听说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> 

如果我手动输入网址(其中包含这种形式)作为

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(请求(” input_something “))%>”

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

+0

你们是不是要防止XSS攻击?或者你只是想停止加载页面上的所有JavaScript? –

+0

我试图阻止XSS攻击是;) – Bernardo

回答

2

我不认为这有什么用浏览器?

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

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

这是不好的。

因为你已经发现了,你应该使用

server.htmlencode(Request.QueryString("1")) 
在您的网页,你直接在页面上书写用户输入

无处不在。

应该做的伎俩

also have a look here

0

(我对ASP不太了解)您可以通过启用ASP请求验证来轻松解决问题。与任何行为改变一样,许多事情可能会在其他页面上崩溃(尽管这会令人惊讶),所以首先测试更改。请参阅http://msdn.microsoft.com/en-us/library/bb355989.aspx

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

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

很长的上,你可以使用所有可能的措施读为http://msdn.microsoft.com/en-us/library/ms998274.aspx

+0

您的anwser适用于asp.net。问题是关于经典的asp – ulluoink