网络核心跨站脚本攻击防御的方法
跨站脚本攻击全称跨站脚本攻击,是为不和层叠样式表(级联样式表,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSSXSS是一种在网应用中的计算机安全漏洞,它允许恶意网用户将代码植入到提供给其它用户使用的页面中。
比如我们在表单提交的时候插入脚本代码
如果不进行处理,那么就是这种效果,我这里只是演示一个简单的弹窗
下面给大家分享一下我的解决方案。
需要用到这个库: html消毒剂
https://github.com/mganss/HtmlSanitizer
新建一个过滤类。
公共课XSS私用超文本标记语言洗手液;公共XSS()洗手液=新的超文本标记语言洗手液();//洗手液。添加(“div”);//标签白名单消毒剂。允许属性。添加('类');//标签属性白名单,默认没有班级标签属性//洗手液。添加('字体系列');//CSS属性白名单} ///摘要////XSS过滤////summary////param name=' html ' html代码/param /返回过滤结果/返回公共字符串过滤器(字符串html) {字符串字符串=消毒剂。消毒(html);返回字符串;} }新建一个过滤器
公共类field filter Attribute : Attribute,iactonfilter {列兵XSSXSS;public FieldFilterAttribute(){ XSS=新XSS();} //在行动方法之回之后调用public void on ionexecuted(ActionExecutedContext上下文){ } //在调用行动方法之前调用actionexecuting上的公共void(action executing上下文)上下文{ //获取行动参数集合var ps=上下文。动作描述符。参数;//遍历参数集合foreach(PS中的var p){ if(context .ActionArguments[p.Name]!=null) { //当参数等于字符串if(p . ParameterType。equals(类型为(字符串)){ context .ActionArguments[p.Name]=xss .过滤器(上下文。动作参数[项目名称].ToString());} else if(p . TYPe参数。IsClass)//当参数等于类{模型字段筛选器(p。名称,p。参数类型,上下文动作参数[p . Name]);} } } } }///摘要///遍历修改类的字符串属性////summary ///param name='key '类名/param ///param name='t '数据类型/param ///param name='obj '对象/param /返回/返回私有对象ModelFieldFilter(字符串键,类型t,对象obj) { //获取类的属性集合var ATS=t . GetCustomAttributes(类型为(FieldFilterAttribute),false);如果(obj!=null) { //获取类的属性集合var PPS=t . GetPropertieS();foreach(PPS中的var PP){ if(PP .GetValue(obj)!=null) { //当属性等于字符串if(PPropertyType。Equals(typeof(字符串)){字符串值=pp .获取价值.ToString();过去分词(过去分词的缩写)SetValue(obj,xss .过滤器(值));} else if(PPropertyType。IsClass)//当属性等于类进行递归{ pp .SetValue(obj,MoldfieldFilter(PP名称,第10页.属性类型,第10页.GetValue(obj)));} } } }返回obj} } //属性过滤器[字段过滤器]公共类笔记本控制器:托管控制器{//笔记操作接口private INoteBookAppService _ noteBookApp;公共NoteBookController(INoteBookAppService noteBookApp){这个._ noteBookApp=noteBookApp } public IActionResult Tab(){ return View();} }然后在需要过滤的控制器加上过滤控制器特性就可以了。这样所有线类型的参数就都会进行过滤了。如果不需要对整个控制器进行过滤,只需要在相应的行动加上特性。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:网络核心跨站脚本攻击防御的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。