当前位置:七道奇文章资讯网站建设网站编程
日期:2012-02-01 09:20:00  来源:本站整理

ASP.NET脚本过滤-避免跨站脚本攻击[网站编程]

赞助商链接



  本文“ASP.NET脚本过滤-避免跨站脚本攻击[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

ASP.Net 1.1后引入了对提交表单自动查抄能否存在XSS跨站脚本攻击)的本领.当用户试图用<xxxx>之类的输入影响页面返回后果的时刻,ASP.Net的引擎会引发一个 HttpRequestValidationExceptioin.默许情形下会返回以下文字的页面:

Server Error in ‘/YourApplicationPath’ Application

A potentially dangerous Request.Form value was detected from the client
(txtName=”<b>”).

Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. You can disable request validation by setting validateRequest=false in the Page directive or in the configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case.

Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (txtName=”<b>”).

….


这是ASP.Net供应的一个很重要的安全特点.因为很多程序员对安全没有概念,乃至都不知道XSS这种攻击的存在,知道主动去防护的就更少了.ASP.Net在这一点上做到默许安全.这样让对安全不是很理解的程序员仍旧可以写出有一定安全防护本领的网站.

但是,当我Google搜索 HttpRequestValidationException 大概 “A potentially dangerous Request.Form value was detected from the client”的时刻,诧异的发现大部份人给出的办理筹划竟然是在ASP.Net页面描写中通过设置 validateRequest=false 来禁用这个特点,而不去关心那个程序员的网站能否真的不需求这个特点.看得我这叫一个胆战心惊.安全意识应当不时刻刻在每一个程序员的心里,不管你对安全的概念理解多少,一个主动的意识在头脑里,你的站点就会安全很多.

为什么很多程序员想要禁止 validateRequest 呢?有一部份是真的需求用户输入”<>”之类的字符.这就没必要说了.还有一部份其实并非用户答应输入那些简单惹起XSS的字符,而是讨厌这种报错的情势,毕竟一大段英文加上一个ASP.Net典型非常错误信息,显得这个站点出错了,而不是用户输入了不法的字符,但是自己又不知道怎么不让它报错,自己来处理报错.

关于但愿很好的处理这个错误信息,而不利用默许ASP.Net非常报错信息的程序员们,你们不要禁用validateRequest=false.

精确的做法是在你当前页面增添Page_Error()函数,来捕捉全部页面处理历程中发生的而没有处理的非常.然后给用户一个合理的报错信息.假如当前页面没有Page_Error(),这个非常将会送到Global.asax的Application_Error()来处理,你也可以在那边写通用的非常报错处理函数.假如两个地方都没有写非常处理函数,才会显示这个默许的报错页面呢.

举例而言,处理这个非常其实只需求很简短的一小段代码就够了.在页面的Code-behind页面中加入这么一段代码:

protectedvoid Page_Error(object sender, EventArgs e)
…{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
…{
Response.Write(“请您输入合理字符串.”);
Server.ClearError(); // 假如不ClearError()这个非常会持续传到Application_Error().
}
}


这样这个程序便可以截获 HttpRequestValidationException 非常,并且可以按照程序员的志愿返回一个公道的报错信息.

这段代码很简单,所以我但愿全部不是真的要答应用户输入<xxx>之类字符的朋友,千万不要随便的禁止这个安全特点,假如只是需求非常处理,那么请用近似于上面的代码来处理便可.

而关于那些通过 明确禁止了这个特点的程序员,自己一定要懂得自己在做什么,并且一定要自己手动的查抄必须过滤的字符串,不然你的站点很简单引发跨站脚本攻击.

关于存在Rich Text Editor的页面应当若何处理?

假如页面有富文本编辑器的控件的,那么必定会招致有<xxx>类的HTML标签提交回来.在这种情形下,我们不得不将validateRequest=”false”.那么安全性怎么处理?如安在这种情形下最大限度的预防跨站脚本攻击呢?

按照微软的倡议,我们应当采纳安全上称为“默许禁止,显式答应”的战略.

首先,我们将输入字符串用 HttpUtility.HtmlEncode()来编码,将此中的HTML标签完好禁止.

然后,我们再对我们所感爱好的、并且是安全标签,通过Replace()举行替换.比方,我们但愿有”<b>”标签,那么我们就将”<b>”显式的替换回”<b>”.

示例代码以下:
void submitBtn_Click(object sender, EventArgs e)
…{
// 将输入字符串编码,这样全部的HTML标签都失效了.
StringBuilder sb =new StringBuilder(
HttpUtility.HtmlEncode(htmlInputTxt.Text));
// 然后我们挑选性的答应<b> 和 <i>
sb.Replace(“<b>”, “<b>”);
sb.Replace(“</b>”, “”);
sb.Replace(“<i>”, “<i>”);

sb.Replace(“</i>”, “”);
Response.Write(sb.ToString());
}

这样我们即答应了部份HTML标签,又禁止了危险的标签.

按照微软供应的倡议,我们要慎重答应下列HTML标签,因为这些HTML标签都是有大概招致跨站脚本攻击的.

<applet> <body> <embed> <frame> <script> <frameset> <html> <iframe> <img> <style> <layer> <link> <ilayer> <meta> <object> 大概这里最让人不能理解的是<img>.但是,看过下列代码后,就应当懂得其危险性了.

<img src=”javascript:alert(‘hello’);”>
<img src=”java script:alert(‘hello’);”>
<img src=”java script:alert(‘hello’);”>


通过<img>标签是有大概招致Javascript履行的,这样攻击者便可以做他想假装的任何事情.

关于<style>也是一样:

<style TYPE=”text/javascript”>…
alert(‘hello’);
</style>


参考:

HOW TO: 利用 Visual C# .NET 在 ASP.NET 中成立自定义错误报告
http://support.microsoft.com/kb/306355/zh-cn

HttpRequestValidationException 类 (System.Web)
http://msdn2.microsoft.com/zh-cn/library/system.web.httprequestvalidationexception(VS.80).aspx


MSDN: How To: Prevent Cross-Site Scripting in ASP.NET
http://msdn2.microsoft.com/en-us/library/ms998274.aspx

举荐大家阅读微软关于.Net安全的一系列文章:
http://msdn2.microsoft.com/en-us/library/ms978512.aspx

关于跨站脚本攻击请参考:

Wikipedia 维基大百科全书
http://en.wikipedia.org/wiki/Cross_site_scripting

Xfocus
http://www.xfocus.org/articles/200607/874.html

Google
http://www.谷歌.com/search?q=%E8%B7%A8%E7%AB%99%E8%84%9A%E6%9C%AC%E6%94%BB%E5%87%BB


  以上是“ASP.NET脚本过滤-避免跨站脚本攻击[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • ASP利用正则表达式提取内容
  • nginx 反向代理iis支持 ASP脚本设置
  • <b>ASP.NET安全设置防备ASPXSpy</b>
  • Ubuntu Server+Apache 运行 asp.net
  • 怎样ASP.NET MVC调用Delphi开辟的Web报表
  • 学习ASP.NET需求举行的步骤办法
  • ASP.NET脚本过滤-避免跨站脚本攻击
  • Asp WinHttp.WinHttpRequest.5.1 对象利用详解
  • ASP防XSS注入函数
  • Asp 防备CC攻击模块 (Anti-CC.asp)
  • metasploit metasploit 中文系统安装失利问题
  • Ubuntu 11下安装Metasploit Pro 4.0.0
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .