CSRF攻擊原理及預防手段。 CSRF全程 Cross Site Request Forgery, 跨站域請求偽造.這種攻擊方式相對于XSS,SQL注入等攻擊方式比較晚被發現,今天就來講解下這種攻擊方式以及避免方式.
攻擊過程 假設abc用戶登錄銀行的網站進行操作, 同時也訪問了攻擊者預先設置好的網站. abc點擊了攻擊者網站的某一個鏈接,這個鏈接是 http://www.bank.com/xxxx 指向銀行,銀行服務器會根據這個鏈接攜帶的參數會進行轉賬操作. 銀行服務器在執行轉賬操作之前會進行SESSION驗證是否登錄, 但是由于abc已經登錄了銀行網站,攻擊者的鏈接也是 www.bank.com .所以攻擊的鏈接就會攜帶session id到銀行服務器. 由于session id是正確的,所以銀行會判斷操作是由本人發起的,執行轉賬操作. 演示 根據上面的說明,我們來模擬一下攻擊的過程. 有 www.bank.com 跟 www.hacker.com .用戶abc登錄 www.bank.com 網站之后點擊了 www.hacker.com 的點擊抽大獎的誘騙鏈接 此鏈接會向 www.bank.com 發起一個post請求.由于請求域名為 www.bank.com ,所以請求會攜帶 www.bank.com 的session id. www.hacker.com的代碼
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><form method="post" action="http://www.bank.com/transfer.php"> <input type="hidden" name="from" value="abc"> <input type="hidden" name="money" value="10000"> <input type="hidden" name="to" value="hacker"> <input type="button" onclick="submit()" value="點擊抽大獎"></form></body>
可以發現, www.hacker.com 的網頁中包含了一個向 www.bank.com 發起的post請求.并且表單都沒隱藏了,只有一個誘騙用戶點擊的按鈕. 完整的實例代碼可以在 github 上找到. 傳送門 . 預防 從上面的例子 可以看到csrf攻擊.黑客不能拿到cookie,也沒辦法對服務器返回的內容進行解析.唯一能做的就是給服務器發送請求.通過發送請求改變服務器中的數據.上面的例子中攻擊者誘導用戶點擊鏈接進行轉賬操作,使得銀行數據庫中受害者的金額發生了改變. 了解了csrf攻擊的原理和目標,提出了兩種防御手段 referer 驗證 根據HTTP協議,在http請求頭中包含一個referer的字段,這個字段記錄了該http請求的原地址.通常情況下,執行轉賬操作的post請求 www.bank.com/transfer.php 應該是點擊 www.bank.com 網頁的按鈕來觸發的操作,這個時候轉賬請求的referer應該是 www.bank.com .而如果黑客要進行csrf攻擊,只能在自己的網站 www.hacker.com 上偽造請求.偽造請求的referer是 www.hacker.com .所以我們通過對比post請求的referer是不是 www.bank.com 就可以判斷請求是否合法. 這種方式驗證比較簡單,網站開發者只要在post請求之前檢查referer就可以,但是由于referer是由瀏覽器提供的.雖然http協議有要求不能篡改referer的值.但是一個網站的安全性絕對不能交由其他人員來保證. token 驗證 從上面的樣式可以發現,攻擊者偽造了轉賬的表單,那么網站可以在表單中加入了一個隨機的token來驗證.token隨著其他請求數據一起被提交到服務器.服務器通過驗證token的值來判斷post請求是否合法.由于攻擊者沒有辦法獲取到頁面信息,所以它沒有辦法知道token的值.那么偽造的表單中就沒有該token值.服務器就可以判斷出這個請求是偽造的.
看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170129/96275.html
文章列表