一.CSRF是什麼?
CSRF(Cross-site request forgery),中文名稱:跨站請求僞造,也被稱爲:one click attack/session riding,縮寫爲:CSRF/XSRF。
二.CSRF可以做什麼?
你這可以這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。CSRF能夠做的事情包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包括:個人隱私泄露以及財產安全。
三. CSRF攻擊模式圖
其實就是在瀏覽器存了a的憑證,認爲通過該客戶端過來的訪問通過了認證,而B可能是web 可能就是個郵件裏面的惡意鏈接,只要用戶訪問了,即可以盜用a的憑證幹壞事。
四. CSRF防範
1. 服務端csrf token
在服務器端輸出頁面時候增加一個隨機key value的token值,這樣所有a網站的頁面等於有一個隨機參數,這樣在a網站提交的所有請求中都要去驗證這個參數的正確性。這樣B就無法獲取到這個隨機值,而驗證失敗,任何提交訪問都會返回錯誤
2. cookie值的md5
這個和1類似,將當前站點cookie,生成的md5傳到後臺進行驗證。這樣B無法跨站獲取到A的cookie,無法構造出該參數。
3. 驗證碼
這個就是在任意表單提交都增加驗證碼功能。B當然就不行了。
總結,當然我推薦1這個方式,而且我們目前網站使用的phalcon框架自帶了security csrf token的一系列函數,直接使用方式一
<input id="token" type="hidden" name="<?php echo $this->security->getTokenKey()?>"
value="<?php echo $this->security->getToken() ?>" />
POST後只需要$this->security->checkToken() 驗證這個函數成功即可。
使用ajax也可以帶上這個id爲token的input框的值。