一 简介
Asp.net 1.1后默认提供了防范 XSS(跨站脚本攻击) 的能力, 如果发现有风险的html标签 系统会抛出一个
HttpRequestValidationExceptioin 异常,
二 使用
1.可以设置 validateRequest=false 来禁用这个特性,
2.可用如下方法捕获该错误并对其进行处理: [请切记关闭后需自行编辑代码处理危险字符]
以下是引用片段: protected void Page_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); if (ex is HttpRequestValidationException) { Response.Write("请您输入合法字符串。"); Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。 } } |
3.自行编写代码处理危险字符可以采用 "默认禁止,显式允许"的策略。即先将输入用HtmlEncode()来编码,然后再用Replace()替换出安全标签
4.根据微软提供的建议,我们要慎重允许下列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> |