對於web客戶端的攻擊,除了首當其衝的XSS之外,CSRF也是一個很是重要的安全漏洞。
CSRF漏洞是跨站請求僞造,也有少數文章中稱其XSRF,其實指的是同一個東西。
這個漏洞的原理要分兩層,狹義的CSRF和廣義的CSRF。
狹義的CSRF是指在黑客已經將代碼植入受害用戶的瀏覽器訪問的頁面的前提下,以「受害用戶」的身份向服務端發起一個僞造的http請求,從而實現服務器CURD來執行讀寫操做。
這就是絕大多數博客,以及《白帽子講web安全》一書中道哥所提到的CSRF漏洞的執行方式。
既然有狹義,也要說說廣義的CSRF。本質上講,CSRF漏洞就是黑客將一個http接口中須要傳遞的全部參數都預測出來,而後無論以什麼方式,他均可以根據他的目的來任意調用你的接口,對服務器實現CURD。
因此說,其實CSRF並不必定非要藉助受害用戶的瀏覽器,黑客能夠本身寫腳本僞造出一個和真實的http請求如出一轍的數據包發給你的服務器,前提是你的這個http接口中的全部參數都是能夠預期的。
須要說明的是,對於廣義的CSRF,是我本身的理解,在這一點上可能與書本上所講的內容存在一些出入。
狹義的CSRF的原理很簡單,實現難度也不大,無非就是寫兩行javascript代碼的ajax調用一下服務端的rest接口。
可是實現CSRF的關鍵在於,要麼先找到一個xss漏洞,而後將黑客的惡意代碼植入到頁面中去的前提下才能夠實現狹義的CSRF;要麼構造出一個url,將參數設好,而後把url貼在網絡上像反射型XSS那樣騙用戶訪問這個url。
講到這裏,其實不難發現,CSRF和XSS這兩個漏洞一旦結合起來,將會爆發出巨大的威力。那麼對於CSRF應該如何防護?javascript
查看原文html
注:原創技術文章,爲避免未經許可的匿名轉載,所有文章內容請移步原文閱讀,帶來的不便敬請諒解。java