web攻擊手段(二)CRSF

2021-07-14 06:00:13 字數 1909 閱讀 8057

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的強大不用我來解釋吧 對使用者輸入的資訊進行轉義,例如...