HttpRequestValidationExceptioin到底怎么办???安全很重要!!!

最近在编写ASP.net代码中因为使用了htmleditor,因此运行时发现出现从客户端(code)中检测到有潜在危险的Request.Form 值这个异常,这是ASP.net的安全验证机制保证我们代码不受XSS攻击,但是这个会影响我们使用,因此需要在代码中添加validateRequest="false"来禁止这种功能。这样就可以通过了。

但是

这种方法仅仅适用于一般安全功能不高的地方,就是你放在那里人家懒得攻击你的地方。一旦禁止了这种功能,就极易收到XSS攻击。不知道XSS攻击的程序猿自己百度之,不然哪天你写的程序可能就被攻击了。。。。具体正确方法是:

在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面。

说些题外话:

那如果用户真的想输入<>这类文本呢???我们知道村财Rich Text Edit的页面可能真的会输入这类脚本类似物的代码,那肿么办?????

根据微软的建议“默认禁止,显式允许”策略,我们采用HttpUtility.HtmlEncode()对html彻底禁止(很多人现在知道这个函数是干嘛用的了吧),然后对我们允许的<>进行替换,比如我们允许<b>我们就采用&lt;b&gt进行替换,这就是我们在很多网页点击查看源代码时候看到很多乱七八糟的&&&&&&&&&。。。。。看的头疼就是这个原因。这样我们就对html做到了完全禁止,同时达到了我们需要的效果。

下面是微软给出的可能引发攻击的html标签

  • <applet>
  • <body>
  • <embed>
  • <frame>
  • <script>
  • <frameset>
  • <html>
  • <iframe>
  • <img>
  • <style>
  • <layer>
  • <link>
  • <ilayer>
  • <meta>
  • <object>

    可能很多人不清楚,毛线呢,img还可以???为啥不行呢???种子都能用图片隐藏,这个有啥难的???试着运行下下面代码你就了然了:

    <img src="javascript:alert('123456');">

    <img src="javasrcipt&#010;script:alert('123456');">

    <img src="javascript&#X0A;script:alert('123456');">

    因此安全很重要,不要轻易禁止系统的默认安全机制,除非你知道怎样防御。

  • 你可能感兴趣的:(JavaScript,html,安全)