2011-04-24 36 views
1

我做了一個方法,通過在會話和表單中保存隨機標記值來防止「表單crf攻擊」,並在「post action」中比較這兩個值,..我在每個php頁面的頂部提供了比較函數,表單crf攻擊有什麼動作?

我的問題是:如果比較進程faild,並且令牌會話值和token值不一樣! ,那麼劇本必須做什麼動作?是通過「死()」來停止腳本工作。 ?或者什麼是最好的行動?

感謝,

回答

0

如果這是不太可能從一個真實的用戶情況發生的話,我會阻止腳本保存/恢復任何數據,但如果它工作,我會返回一個「成功」的消息。如果您返回失敗,它將幫助黑客確定您的驗證是如何編碼的。另一方面,如果真實用戶遇到這種情況,我會返回一個友好的錯誤,並可能要求他們再次登錄。

+0

@ Jason4Ever你最終決定做什麼? – 2011-04-28 22:57:30

0

是的。只是讓它失敗。恢復這種錯誤沒有意義。

什麼,但是你應該做的是也寫了日誌條目審覈潛在利用企圖:

syslog(LOG_ERR, "CSRF token mismatch ..."); 
die("Request failed. (Disabled cookies?) Contact administrator: ..."); 

包括一個humd可讀的消息的情況下,這是一個真正的瀏覽器錯誤或東西。但不要公開說它是失敗的CSRF標誌。

+0

好,我這樣做的,但問題是很多次這個問題發生,因爲標記值會話超時或用戶打開新標籤時更改!所以它以新的令牌值開始新的會話! ,所以我不確定這個動作是否是正常人的攻擊者! – Jason4Ever 2011-04-24 10:15:59

+0

好吧。這是一個完全不同的問題。編輯您的原始帖子以反映這一點。 - 無論如何,那麼最好使用CSRF令牌數組。 '$ _SESSION [「csrf」] [] = $ new_token'並用於檢查'in_array($ _ POST [「csrf」],$ _SESSION [「csrf」])''。關於會話超時,你無能爲力。但是,這不是一個普遍的問題。 – mario 2011-04-24 10:27:55