CSRF是什麼?html
CSRF(Cross Site Request Forgery),中文是跨站點請求僞造。CSRF攻擊者在用戶已經登陸目標網站以後,誘使用戶訪問一個攻擊頁面,利用目標網站對用戶的信任,以用戶身份在攻擊頁面對目標網站發起僞造用戶操做的請求,達到攻擊目的。前端
開發實例瀏覽器
修改系統中遺留信息cookie
修改路徑:http://xxx.xxx.xxx/member/editReservedInformation.jhtmlsession
參數:reservedInformation:'123'post
csrf攻擊示例:網站
test.html.net
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是網站B</h1>
<form method="post" action="http://xxx.xxx.xxx/member/member/member/editReservedInformation.jhtml">
<input type="text" name="reservedInformation" value="999999">
<input type="submit" value="修改">
</form>
</body>
</html>3d
在攻擊者獲取到cookie時,經過test頁面可用直接修改遺留信息orm
解決方案
1. 用戶訪問某個表單頁面。
2. 服務端生成一個Token,放在用戶的Session中,或者瀏覽器的Cookie中。
3. 在頁面表單附帶上Token參數。
4. 用戶提交請求後, 服務端驗證表單中的Token是否與用戶Session(或Cookies)中的Token一致,一致爲合法請求,不是則非法請求。
這個Token的值必須是隨機的,不可預測的。因爲Token的存在,攻擊者沒法再構造一個帶有合法Token的請求實施CSRF攻擊。另外使用Token時應注意Token的保密性,儘可能把敏感操做由GET改成POST,以form或AJAX形式提交,避免Token泄露。
注意:
CSRF的Token僅僅用於對抗CSRF攻擊。當網站同時存在XSS漏洞時候,那這個方案也是空談。因此XSS帶來的問題,應該使用XSS的防護方案予以解決。
具體實現代碼:
1.生產隨機token值,並存入session
2.將token傳給前端
3.修改信息時驗證token