15跨站請求僞造

一,什麼是跨站請求僞造瀏覽器

  經過技術手段欺騙用戶訪問一個已經登陸/認證過的網站,並利用網站對用戶的信任作操做(包含非網站認證者意願操做)。服務器

  他不是經過CSRF攻擊直接去的帳戶及密碼,而是欺騙用戶瀏覽器,讓其以用戶的名義運行操做cookie

  例子:dom

假如一家銀行用以運行轉帳操做的URL地址以下: http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName網站

那麼,一個惡意攻擊者能夠在另外一個網站上放置以下代碼: <img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">spa

若是有帳戶名爲Alice的用戶訪問了惡意站點,而她以前剛訪問過銀行不久,登陸信息還沒有過時,那麼她就會損失1000資金。code

二,防護措施orm

  1,少用GETblog

  如上例子的GET方式極其容易被捕獲網站信息及規律。token

  2,添加校驗token

  用戶瀏覽器提供不保存在cookie中,而且攻擊者沒法僞造的數據做爲校驗,那麼攻擊者就沒法再運行CSRF攻擊。

  這種數據一般是窗體中的一個數據項。服務器將其生成並附加在窗體中,其內容是一個僞隨機數。

  如:

import os
CSRF_ENABLED = True
SECRET_KET = os.urandom(24)

 

  當客戶端經過窗體提交請求時,這個僞隨機數也一併提交上去以供校驗。正常的訪問時,客戶端瀏覽器可以正確獲得並傳回這個僞隨機數,而經過CSRF傳來的欺騙性攻擊中,攻擊者無從事先得知這個僞隨機數的值,服務端就會由於校驗token的值爲空或者錯誤,拒絕這個可疑請求。

  這個Token的值必須是隨機的,不可預測的。因爲Token的存在,攻擊者沒法再構造一個帶有合法Token的請求實施CSRF攻擊。另外使用Token時應注意Token的保密性,儘可能把敏感操做由GET改成POST,以form或AJAX形式提交,避免Token泄露。

  3,加驗證碼

  強制用戶必須與應用進行交互,才能完成最終請求。在一般狀況下,驗證碼能很好遏制CSRF攻擊。

相關文章
相關標籤/搜索