token概述
token是為了防止csrf而衍生的技術。黑客可以通過xss來獲取用戶的cookie,理論上也能獲取當時頁面上的token值,但是也僅僅是當時頁面上的token值,如果與用戶進行其他頁面的跳轉從而獲取新的token值,xss是無法獲取的。因此,有效地防范了csrf,但是能否偽造一個我們所需要的token值,配合xss獲取的cookie值進行我們想要的操作。
實驗猜想
如下場景
1)在更改密碼的界面上存在隨機token,但是該頁面上不存在xss漏洞。
2)通過其他頁面利用xss漏洞獲取用戶的cookie
3)然后惡意用戶在 修改密碼頁面 獲取的token值配合獲取的cookie進行數據的提交操作(偽造的token也是通過對服務器的合法請求)
4)如果隨機的token不與cookie進行綁定存儲的話,理論上可以達到偽造token的行為
環境准備
1)phpstudy2016
2)DVWA :CSRF(high)
3)准備兩個用戶
賬號類型 | 賬號 | 密碼 |
---|---|---|
正常用戶 | admin | 123456 |
惡意用戶 | 1337 | charley |
操作過程
1)正常用戶更改密碼,但是提交錯誤的token
正常的token
更改token
舊密碼能夠正常登陸,證明修改密碼行為失敗,只有合法的token才能正常修改用戶密碼。
2)嘗試偽造token,提交表單數據
正常用戶的隨機token值
81110ab1eee400821304d1e7a2b56575
惡意用戶的隨機token值
410db2df5528bdb4804813e0c887dc2b
3)將正常用戶的token進行更改,用偽造的token進行覆蓋(等同於:惡意用戶獲取正常用戶的cookie配合自己偽造的token提交)
4)密碼更改成功,證明偽造的token可用
總結
token應用需要注意:
1)綁定cookie與隨機token,防止上述情況的發生
2)約束token的時效性,防止偽造的token可以一直使用,或未使用但長期貯存等待使用