asp.net mvc 防止XSS-跨站脚本攻击

时间 2017/9/29 0:41:03 加载中...

目的:

防止XSS-跨站脚本攻击

因博客项目中的内容是纯html代码,而在前台展示时,也是浏览器对其解析,这样我们保存的是什么样式,展示的也才是什么样式。也正因为我们以纯html展示,浏览器对其解析导致出现了问题,如果内容中恶意加入了类似<script>alert('ok');$.post()</script>的代码,那么我们自已的cookie可能会被盗取,可能会非法执行某些操作。那么这样就需要我们来避免,对纯html代码展示的内容进行过滤。在asp.net mvc中,就是对使用了 @Html.Raw(Model.Content) 的内容进行过滤。


方法:

我们使用“HtmlSanitizer”库来过滤。

在Nuget中搜索并安装“HtmlSanitizer”

使用方法 “model.Content = new Ganss.XSS.HtmlSanitizer().Sanitize(model.Content);”来过滤即可。


HtmlSanitizer的github:https://github.com/mganss/HtmlSanitizer


示例:

在我的博客项目中,只有博客内容字段需要过滤,因此,我只在博客的数据库访问层的“记录新增、修改”和“记录的获取”方法中,对字段进行了过滤。

这样不管Service层如何调用,都不会有问题。


过滤特殊标签:

public class XSSHelper
{
    public static string Sanitize(string html)
    {
        var sanitizer = new Ganss.XSS.HtmlSanitizer();
        sanitizer.AllowedTags.Add("iframe");
        sanitizer.AllowedAttributes.Add("frameborder");
        sanitizer.AllowedAttributes.Add("allowfullscreen");
        return sanitizer.Sanitize(html);
    }
}


扫码分享
版权说明
作者:SQBER
文章来源:http://blog.sqber.com/articles/asp.net-mvc-xss.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。