asp.net基础-xss发贴漏洞解决方案
asp.net基础-xss发贴漏洞解决方案
用户发贴也存在xss的问题.将发贴内容保存到一个文本文件中,示例为降低代码的复杂性不用数据库.
我们可以对请求的数据检测,如果请求数据中有<>等就认为是恶意请求,禁止提交.aspx默认就是采用这种策略,这样做的缺点是如果做的是一个程序员论坛,程序员就无法发表html代码的帖子了,因此更好的处理策略是将用户发表的内容按原样显示出来,而不是以html代码的方法出现,使用
HttpUtility.HtmlEncode就可以将字符串中的</等特殊字符转换为html显示的字符,也就是不把<script>当成定义脚本的标签,而是当成"<script>,"p这样可以在页面上直接显示出来的内容.
修改看贴代码,将contect.Response.Write(line+"<hr/>");修改为context.Response.Write(HttpUtility.HtmlEncode(line)+"<hr/>");即可
解决方案:在显示页面的服务器端程序改为
protected void Page_Load(object sender, EventArgs e)
{
//Response.Write(File.ReadAllText("c:/5.txt"));
string s = File.ReadAllText("c:/5.txt");
Response.Write(HttpUtility.HtmlEncode(s));
//HttpUtility.HtmlEncode(s)将字符串s中的<>等特殊字符转换为转义符
}
即可,不过vS201须在 httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" />。设置此值后,可通过在 Page 指令或 <pages> 配置节中设置 validateRequest="false" 禁用请求验证。