防止CSRF跨站請求偽造

2021-09-24 00:15:06 字數 1299 閱讀 7467

csrf(cross-site request forgery)跨站請求偽造,也被稱為「one click attack」或者session riding,通常縮寫為csrf或者xsrf,是一種對**的惡意利用。儘管聽起來像跨站指令碼(xss),但它與xss非常不同,xss利用站點內的信任使用者,而csrf則通過偽裝來自受信任使用者的請求來利用受信任的**。與xss攻擊相比,csrf攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比xss更具危險性。

token,就是令牌,最大的特點就是隨機性,不可**。一般黑客或軟體無法猜測出來。

那麼,token有什麼作用?又是什麼原理呢?

token一般用在兩個地方:

兩者在原理上都是通過session token來實現的。當客戶端請求頁面時,伺服器會生成乙個隨機數token,並且將token放置到session當中,然後將token發給客戶端(一般通過構造hidden表單)。下次客戶端提交請求時,token會隨著表單一起提交到伺服器端。

然後,如果應用於「anti csrf攻擊」,則伺服器端會對token值進行驗證,判斷是否和session中的token值相等,若相等,則可以證明請求有效,不是偽造的。

不過,如果應用於「防止表單重複提交」,伺服器端第一次驗證相同過後,會將session中的token值更新下,若使用者重複提交,第二次的驗證判斷將失敗,因為使用者提交的表單中的token沒變,但伺服器端session中token已經改變了。

上面的session應用相對安全,但也叫繁瑣,同時當多頁面多請求時,必須採用多token同時生成的方法,這樣占用更多資源,執行效率會降低。因此,也可用cookie儲存驗證資訊的方法來代替session token。比如,應對「重複提交」時,當第一次提交後便把已經提交的資訊寫到cookie中,當第二次提交時,由於cookie已經有提交記錄,因此第二次提交會失敗。

不過,cookie儲存有個致命弱點,如果cookie被劫持(xss攻擊很容易得到使用者cookie),那麼又一次gameover。黑客將直接實現csrf攻擊。

所以,安全和高效相對的。具體問題具體對待吧。

此外,要避免「加token但不進行校驗」的情況,在session中增加了token,但服務端沒有對token進行驗證,根本起不到防範的作用。

還需注意的是,對資料庫有改動的增刪改操作,需要加token驗證,對於查詢操作,一定不要加token,防止攻擊者通過查詢操作獲取token進行csrf攻擊。但並不是這樣攻擊者就無法獲得token,只是增大攻擊成本而已。

收藏

跨站請求偽造 CSRF

跨站請求偽造 csrf 顧名思義就是在其他非法 呼叫了正常 的介面,攻擊的方法是在頁面中包含惡意 或者鏈結,攻擊者認為被攻擊的使用者有權訪問另乙個 如果使用者在那個 的會話沒有過期,攻擊者就能執行未經授權的操作。大多數 rails 程式都使用 cookie 儲存會話,可能只把會話 id 儲存在 co...

CSRF跨站請求偽造

前面說到xss跨站指令碼攻擊,現在來個複雜度更高一點的csrf跨站請求偽造 首先說一下rsrf的幾個要點 1.rsrf是通過各種方法 站內發布鏈結,qq郵箱發布鏈結等 讓登入使用者觸發請求,在使用者不覺察的過程中對使用者資料進行篡改,進而實現攻擊 2.通過xss可以獲取到使用者的session id...

CSRF 跨站請求偽造

csrf cross site request forgery 中文是跨站請求偽造。csrf攻擊者在使用者已經登入目標 之後,誘使使用者訪問乙個攻擊頁面,利用目標 對使用者的信任,以使用者身份在攻擊頁面對目標 發起偽造使用者操作的請求,達到攻擊目的。舉個列子 假如a站為受信任的銀行 其中有個銀行轉賬...