這是足以讓CSRF保護:這對於CSRF保護足夠了嗎?
- 生成一個隨機字符串,
$_SESSION['hash']
並將其存儲 - 隱藏值(以
$_POST['thing']
)的形式包含隨機字符串 - 當提交表單時,它會檢查是否
$_SESSION['hash']
等於$_POST['thing']
,並繼續它們是否匹配
我的一個網站的用戶不斷告訴我,我的網站是脆弱的,但我不能告訴我們,如果他只是在拖我。還有什麼我可以做的嗎?
這是足以讓CSRF保護:這對於CSRF保護足夠了嗎?
$_SESSION['hash']
並將其存儲$_POST['thing']
)的形式包含隨機字符串$_SESSION['hash']
等於$_POST['thing']
,並繼續它們是否匹配我的一個網站的用戶不斷告訴我,我的網站是脆弱的,但我不能告訴我們,如果他只是在拖我。還有什麼我可以做的嗎?
如果它'對每個用戶來說都是獨一無二的,那麼它應該就夠了。即使用戶會話持續時間相同,它仍然可以,但我建議定期重新生成它。 另外你可能想要爲每個表單使用不同的標記。例如,如果您有登錄表單和註釋表單,最好爲它們使用不同的標記,但它不是100%必需的。
爲什麼你認爲只是因爲有人說你的網站很脆弱,它與CSRF的連接有關?他們有很多其他可能的漏洞。
也許你的網絡服務器過時和脆弱,也許PHP版本不是最新的。也許用戶能夠通過ssh或telnet登錄到你的服務器。也許用戶能夠猜出管理員密碼。
也許讓人們通過cookie登錄並將登錄憑據存儲在cookie中。
除CSRF之外還有太多可以利用的東西。用戶也有可能是錯的,或者不知道他在說什麼,或者他只是想讓你緊張。
來自:http://en.wikipedia.org/wiki/Cross-site_request_forgery
與祕密鑰匙acion仍然比沒有好...
我認爲你缺少的是將標記限制在小窗口時間。
你應該看看Chris's CRSF-article。快速總結:
每次他們加載頁面時,它的變化,如果它不是已設置。
那麼這是你的問題。一旦令牌被取回,所有的動作都可以被輕鬆地進一步執行。我通常將令牌實施爲對一個請求有效,然後再生成它。
它可能取決於你改變隨機字符串的頻率;每個用戶都必須得到他們自己的,我建議定期輪換它,所以意外披露並不會造成太大的損害。 – sarnold 2011-01-30 02:05:06
每次他們加載頁面時,如果它尚未設置,它會改變。 – 2011-01-30 02:11:38