CSRF是什么?
CSRF全稱是跨站請求偽造(Cross-site request forgery),是一種網(wǎng)絡(luò)攻擊方式,也被稱為 one-clik attack或者 session riding
CSRF攻擊原理
CSRF攻擊利用網(wǎng)站對于用戶網(wǎng)頁瀏覽器的信任,挾持用戶當(dāng)前已登陸的Web應(yīng)用程序,去執(zhí)行非用戶本意的操作
CSRF攻擊防范
只使用JSON API
用JavaScript發(fā)起AJAX請求是限制跨域的氏淑,并不能通過簡單的 <form> 表單來發(fā)送JSON,所以硕噩,通過只接收JSON可以很大可能避免CSRF攻擊假残。驗證HTTP Referer字段
根據(jù) HTTP 協(xié)議,在 HTTP 頭中有一個字段叫 Referer炉擅,它記錄了該 HTTP 請求的來源地址辉懒。網(wǎng)站只需要對于每一個請求驗證其 Referer值,如果是以網(wǎng)站的網(wǎng)址開頭的域名谍失,則說明該請求是來自網(wǎng)站自己的請求眶俩,是合法的。如果 Referer 是其他網(wǎng)站的話快鱼,則有可能是黑客的 CSRF 攻擊颠印,拒絕該請求。在請求地址中添加takon驗證
CSRF 攻擊之所以能夠成功抹竹,是因為黑客可以完全偽造用戶的請求线罕,該請求中所有的用戶驗證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗證信息的情況下直接利用用戶自己的 cookie 來通過安全驗證窃判。要抵御 CSRF钞楼,關(guān)鍵在于在請求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中袄琳⊙可以在 HTTP 請求中以參數(shù)的形式加入一個隨機產(chǎn)生的 token燃乍,并在服務(wù)器端建立一個攔截器來驗證這個 token,如果請求中沒有 token 或者 token 內(nèi)容不正確雳殊,則認為可能是 CSRF 攻擊而拒絕該請求橘沥。
這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產(chǎn)生并放于 session 之中夯秃,然后在每次請求時把 token 從 session 中拿出座咆,與請求中的 token 進行比對。