最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

.net core xss攻击防御的方法

来源:懂视网 责编:小采 时间:2020-11-27 22:34:56
文档

.net core xss攻击防御的方法

.net core xss攻击防御的方法:XSS攻击全称跨站脚本攻击 ,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。 比如我们在表单提交的时候插入脚
推荐度:
导读.net core xss攻击防御的方法:XSS攻击全称跨站脚本攻击 ,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。 比如我们在表单提交的时候插入脚

XSS攻击全称跨站脚本攻击 ,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

比如我们在表单提交的时候插入脚本代码

如果不进行处理,那么就是这种效果,我这里只是演示一个简单的弹窗

下面给大家分享一下我的解决方案。

需要用到这个库:HtmlSanitizer

https://github.com/mganss/HtmlSanitizer

新建一个过滤类。

 public class XSS
 {
 private HtmlSanitizer sanitizer;
 public XSS()
 {
 sanitizer = new HtmlSanitizer();
 //sanitizer.AllowedTags.Add("div");//标签白名单
 sanitizer.AllowedAttributes.Add("class");//标签属性白名单,默认没有class标签属性 
 //sanitizer.AllowedCssProperties.Add("font-family");//CSS属性白名单
 }

 /// <summary>
 /// XSS过滤
 /// </summary>
 /// <param name="html">html代码</param>
 /// <returns>过滤结果</returns>
 public string Filter(string html)
 {
 string str = sanitizer.Sanitize(html);
 return str;
 }
 }

新建一个过滤器

 public class FieldFilterAttribute : Attribute,IActionFilter
 {
 private XSS xss;
 public FieldFilterAttribute()
 {
 xss = new XSS();
 }

 //在Action方法之回之后调用
 public void OnActionExecuted(ActionExecutedContext context)
 {

 }

 //在调用Action方法之前调用
 public void OnActionExecuting(ActionExecutingContext context)
 {
 //获取Action参数集合
 var ps = context.ActionDescriptor.Parameters;
 //遍历参数集合
 foreach (var p in ps)
 {
 if (context.ActionArguments[p.Name] != null)
 {
 //当参数等于字符串
 if (p.ParameterType.Equals(typeof(string)))
 {
 context.ActionArguments[p.Name] = xss.Filter(context.ActionArguments[p.Name].ToString());
 }
 else if (p.ParameterType.IsClass)//当参数等于类
 {
 ModelFieldFilter(p.Name, p.ParameterType, context.ActionArguments[p.Name]);
 }
 } 

 }
 }

 /// <summary>
 /// 遍历修改类的字符串属性
 /// </summary>
 /// <param name="key">类名</param>
 /// <param name="t">数据类型</param>
 /// <param name="obj">对象</param>
 /// <returns></returns>
 private object ModelFieldFilter(string key, Type t, object obj)
 {
 //获取类的属性集合
 var ats = t.GetCustomAttributes(typeof(FieldFilterAttribute), false);


 if (obj != null)
 {
 //获取类的属性集合
 var pps = t.GetProperties();

 foreach (var pp in pps)
 {
 if(pp.GetValue(obj) != null)
 {
 //当属性等于字符串
 if (pp.PropertyType.Equals(typeof(string)))
 {
 string value = pp.GetValue(obj).ToString();
 pp.SetValue(obj, xss.Filter(value));
 }
 else if (pp.PropertyType.IsClass)//当属性等于类进行递归
 {
 pp.SetValue(obj, ModelFieldFilter(pp.Name, pp.PropertyType, pp.GetValue(obj)));
 }
 }
 
 }
 }

 return obj;
 }
 }
 //属性过滤器
 [FieldFilter]
 public class NoteBookController : ManageController
 {
 //笔记操作接口
 private INoteBookAppService _noteBookApp;
 public NoteBookController(INoteBookAppService noteBookApp)
 {
 this._noteBookApp = noteBookApp;
 }
 public IActionResult Tab()
 {
 return View();
 }

 }

然后在需要过滤的控制器加上过滤控制器特性就可以了。这样所有string类型的参数就都会进行过滤了。如果不需要对整个控制器进行过滤,只需要在相应的Action加上特性。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

.net core xss攻击防御的方法

.net core xss攻击防御的方法:XSS攻击全称跨站脚本攻击 ,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。 比如我们在表单提交的时候插入脚
推荐度:
标签: net netcore core
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top