crsf
是跨站請求偽造:
cross site request forgery
,是一種對**的惡意利用。它和
xss跨站指令碼攻擊的不同是,
xss利用站點內的信任使用者;
crsf
則是通過偽裝來自信任使用者的請求,來利用受信任的**。舉例就是:攻擊者盜用了你的身份,以你的名義向第三方信任**傳送惡意請求,如發郵件,發簡訊,轉賬交易等。
下圖簡單闡述了
csrf攻擊的思想:
從上圖可以看出,要完成一次
csrf
攻擊,受害者必須依次完成兩個步驟:1、
登入受信任**
a,並在本地生成
cookie。2
、在不退出a
的情況下,訪問危險**b。
或許有些人認為:「如果我不滿足以上兩個條件中的乙個,我就不會受到
csrf
的攻擊」。是的,確實如此,但你不能保證以下情況不會發生:1、
你不能保證你登入了乙個**後,不再開啟乙個
tab頁面並訪問另外的**。2、
你不能保證你關閉瀏覽器了後,你本地的
cookie
立刻過期,你上次的會話已經結束。(事實上,關閉瀏覽器不能結束乙個會話,但大多數人都會錯誤的認為關閉瀏覽器就等於退出登入
/結束會話了
......)3
、上圖中所謂的攻擊**,可能是乙個存在其他漏洞的可信任的經常被人訪問的**。
csrf的防禦可以從服務端和客戶端兩方面著手,防禦效果是從服務端著手效果比較好,現在一般的
csrf防禦也都在服務端進行。
1、驗證
http referer欄位
根據http協議,在http頭中有乙個欄位叫referer,它記錄了該http請求的**位址。在通常情況下,訪問乙個安全受限頁面的請求必須來自於同乙個**。
可以在filter中驗證referer
,思路就是先取得
referer 值,然後進行判斷,當其非空並以 bank.example 開頭時,則繼續請求,否則的話可能是 csrf 攻擊,轉到error.jsp 頁面。
// 從 http 頭中取得 referer 值
string referer=request.getheader("referer");
// 判斷 referer 是否以 bank.example 開頭
if((referer!=null) &&(referer.trim().startswith(「bank.example」)))else
2
、在請求位址中新增
token並驗證
抵禦csrf攻擊的關鍵在於:在請求中放入攻擊者所不能偽造的資訊,並且該資訊不存在於cookie之中。鑑於此,系統開發者可以在http請求中以引數的形式加入乙個隨機產生的token,並在伺服器端建立乙個***來驗證這個token,如果請求中沒有token或者token內容不正確,則認為可能是csrf攻擊而拒絕該請求。
// 從 session 中得到 csrftoken 屬性
string stoken = (string)s.getattribute(「csrftoken」);
if(stoken == null) elseelse if(stoken != null && ptoken != null && stoken.equals(ptoken))else
}
web攻擊手段(一)XSS
xss 攻擊,跨站指令碼攻擊 cross site scripting 為了不和樣式表的 css的縮寫混淆,所以跨站指令碼攻擊縮寫為 xss。它是指攻擊者在網頁中嵌入惡意指令碼程式,當使用者開啟網頁時,惡意指令碼就開始在使用者客戶端的瀏覽器上執行,以盜取客戶端的 cookie admin 許可權。1...
Web常見的攻擊手段
type text name name value 當輸入的內容為 alert hello script 最終的效果為 type text name name value alert hello script 這時候就會彈出來hello。這樣的惡作劇還好,如果是獲取使用者賬號密碼的的指令碼呢,那樣的...
常見的web攻擊手段
xss 跨站指令碼攻擊 當使用者在表達輸入一段資料後,提交給服務端進行持久化。如果此使用者輸入的是一段指令碼語言,而服務端 使用者輸入的資料沒有經過轉碼 校驗等就存入了資料庫,在其他頁面需要展示此資料時,就會執行此使用者輸入的語言。簡單來說,js的強大不用我來解釋吧 對使用者輸入的資訊進行轉義,例如...