安全漏洞系列(一)---XSS漏洞解决方案(C# MVC)

2021-05-29 12:04

阅读:671

标签:href   NPU   encode   ret   font   pre   inf   输入   html   

参考地址:https://www.cnblogs.com/sagecheng/p/9462239.html

测试项目:MVCDemo

一、XSS漏洞定义

  XSS攻击全称跨站脚本攻击,它允许恶意web用户将代码(如:html代码)植入到页面上,当访问到该页面时,嵌入到页面的html代码会自动执行,从而达到恶意攻击的目的。

二、解决方案

  1.新建立一个XSSHelper帮助类

 1     public static class XSSHelper
 2     {
 3         /// 
 4         /// XSS过滤
 5         /// 
 6         /// html代码
 7         /// 过滤结果
 8         public static string XssFilter(string html)
 9         {
10             string str = HtmlFilter(html);
11             return str;
12         }
13 
14         /// 
15         /// 过滤HTML标记
16         /// 
17         /// 
18         /// 
19         public static string HtmlFilter(string Htmlstring)
20         {
21             string result = System.Web.HttpUtility.HtmlEncode(Htmlstring);
22             return result;
23         }
24     }

  2.再建立一个XSSFilterAttribute过滤类

 1     /// 
 2     /// XSS 过滤器
 3     /// 
 4     public class XSSFilterAttribute : ActionFilterAttribute
 5     {
 6         /// 
 7         /// OnActionExecuting
 8         /// 
 9         /// 
10         public override void OnActionExecuting(ActionExecutingContext context)
11         {
12             //获取参数集合
13             var ps = context.ActionDescriptor.GetParameters();
14             if (ps.Count() == 0)
15             {
16                 return;
17             }
18             //遍历参数集合
19             foreach (var p in ps)
20             {
21                 if (context.ActionParameters[p.ParameterName] != null)
22                 {
23                     //当参数是str
24                     if (p.ParameterType.Equals(typeof(string)))
25                     {
26                         context.ActionParameters[p.ParameterName] = XSSHelper.XssFilter(context.ActionParameters[p.ParameterName].ToString());
27                     }
28                     else if (p.ParameterType.Equals(typeof(Int64)))
29                     {
30 
31                     }
32                     else if (p.ParameterType.Equals(typeof(Int32)))
33                     {
34 
35                     }
36 
37                     else if (p.ParameterType.IsClass)//当参数是一个实体
38                     {
39                         PostModelFieldFilter(p.ParameterType, context.ActionParameters[p.ParameterName]);
40                     }
41                 }
42 
43             }
44         }
45         /// 
46         /// 遍历实体的字符串属性
47         /// 
48         /// 数据类型
49         /// 对象
50         /// 
51         private object PostModelFieldFilter(Type type, object obj)
52         {
53             if (obj != null)
54             {
55                 foreach (var item in type.GetProperties())
56                 {
57                     if (item.GetValue(obj) != null)
58                     {
59                         //当参数是str
60                         if (item.PropertyType.Equals(typeof(string)))
61                         {
62                             string value = item.GetValue(obj).ToString();
63                             item.SetValue(obj, XSSHelper.XssFilter(value));
64                         }
65                         else if (item.PropertyType.Equals(typeof(Int64)))
66                         {
67 
68                         }
69                         else if (item.PropertyType.Equals(typeof(Int32)))
70                         {
71 
72                         }
73                         else if (item.PropertyType.Equals(typeof(Int16)))
74                         {
75 
76                         }
77                         else if (item.PropertyType.IsClass)//当参数是一个实体
78                         {
79                             //   item.SetValue(obj, PostModelFieldFilter(item.PropertyType, item.GetValue(obj)));
80                         }
81                     }
82 
83                 }
84             }
85             return obj;
86         }
87     }

  3.在控制器上加上该属性,就可对传递过来的参数数值进行过滤(记得要引入对应的命名空间)

技术图片

  说明:为什么要加入[ValidateInput(false)],因为用户如果加入类似

安全漏洞系列(一)---XSS漏洞解决方案(C# MVC)

标签:href   NPU   encode   ret   font   pre   inf   输入   html   

原文地址:https://www.cnblogs.com/jas0203/p/11044629.html


评论


亲,登录后才可以留言!