您的位置:金沙手机版下载 > 金沙手机版下载 > Web安全相关

Web安全相关

2019-10-13 12:37

 一些恶意脚本

      图片 1

                    图4

                图11

  要是我们须要允许脚本入库,能够在相应的Action上足够[ValidateInput(false)]。此时恶意脚本还无法产生威逼,因为还也会有前边三个等第的严防措施。

  1. 黑心攻击者能够在个人介绍个中插入恶意代码,那么其余客户访谈他的个人音讯时,就能够实行恶意代码。
  2. 黑心攻击者能够揭橥一篇小说,取贰个诱惑眼球的标题,在剧情里布置恶意代码,那么客商查看那篇文章时,就能够施行恶意代码。
  3. 恶心攻击者在有个别看好文章或帖子里的还原或留言中插入恶意代码,那么客商浏览到她的回复或留言时,就能够实行恶意代码。

                图9

     图片 2

      图片 3

图片 4

  1. 简练的弹窗可能内容显示。
  <script>alert('你被黑了!')</script>
 
  2. 导航到黑心网址。注:这里只是选拔百度网址作为导航演示,并非说百度网址是恶意网址。
    <script>window.location.href=';
 
  3.  获取cookies。
  <script>alert(document.cookie)</script>
  <script>window.location.href=';

      图片 5

  1. 付出数据时,就对数码举行验证,如若含有恶意脚本,则不让数据进库,ASP.NET MVC默许是会做这一个评释。如下图,假使希图插入恶意脚本,就能够拿走四个HttpRequestValidationException。注:图2红棕框中的方法后续会涉及。

 $.ajax数好玩的事明完结

简介
  跨站脚本攻击(CrossSite Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里安顿恶意Script代码,当客商浏览该页之时,嵌入个中Web里面包车型大巴Script代码会被推行,从而达到恶意抨击客户的独树一帜目标,比方获取用户的Cookie,导航到黑心网站,指引木马等。

AntiXSS第三方组件

      图片 6

                  图1

源码下载

  为了方便使用,笔者从没选择任何数据库,而是用了一个文本来积存数据。代码下载后能够直接运营,没有供给配置。

  下载地址:

  图片 7

 

小说转发自:

 2. 出口数据时,对出口的内容接纳HTML编码,恶意脚本不会被实践。并且,MVC的Razor语法默许就采纳HTML编码。可是假使大家选择Html.Raw()来输出内容的话,恶意脚本就能够发出威慑。

  假如使用.Net4.0及以上的本子,那么就不须要引进AntiXSS,因为.Net 4.0已经把AntiXSS集成进来了。即使是任何版本则须求引入。

      图片 8

      图片 9

  那么,输入数占领恶意脚本时就能够被检验出来。

                  图15

 图片 10

 图片 11

  数据可能进库,为啥吗?大家来斟酌下图2红框中的方法。

  要对$.ajax实行数量印证,笔者从ModelBinder动手。具体代码如下:

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

                图8

                 图5

     图片 12

                图7

      图片 13

 $.ajax数据证实失效?

                  图2

防卫XSS的七个阶段

  从图1第22中学,作者测度MVC会对Request中的以上内容举办验证,可是jquery ajax的数码是存在Request的Content里面包车型大巴,由此,暗许的证实对jquery ajax并从未效应。

      图片 14

      图片 15

              图10

                  图3

              图13

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

                图12

     图片 16

                图14

  大家只要我们的须求是不容许含有恶意脚本的多寡进库的,不过我们选用了jquey的ajax举行相互。

 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     }

                 图6

有个别场景

本文由金沙手机版下载发布于金沙手机版下载,转载请注明出处:Web安全相关

关键词: