2013-01-07 27 views
1

我正在爲CSRF預防編寫一個PHP類。PHP:CSRF預防,檢查遠程地址

該類可以生成CSRF令牌,稍後再檢查它們,但如果請求來自同一瀏覽器($_SERVER['HTTP_USER_AGENT'])和相同IP($_SERVER['REMOTE_ADDR']),我也會驗證它是否是額外的。 我知道一些用戶可能擁有動態IP地址,並且這些地址可能會改變。 所以我的問題是:用戶的IP地址有可能在2個請求之間變化? 我是否還應該檢查$_SERVER['REMOTE_ADDR']或僅檢查用戶代理?

回答

1

對於反CSRF,IP地址不可靠,因爲它可能會頻繁更改,這會使您的Web應用程序無法用於這些用戶。 AOL是已知在請求之間切換IP的ISP的示例。

用戶代理再次不是很可靠。這也可以更改,因爲它通常包含軟件版本詳細信息,有時還包含已安裝軟件或插件的名稱。還要考慮到,用戶代理與會話ID cookie(在HTTP請求中)發送的位置相同,因此如果攻擊者能夠獲取會話ID,則很可能他們已經或可以獲取關聯的用戶代理。

CSRF保護的最佳形式是在執行操作時生成要檢查的令牌。理想情況下,令牌應該在整個會話中更改,而不是保持靜態。

+0

感謝您的澄清。 –

1

所以我的問題是:有可能用戶的IP地址在2個請求之間更改 ?

是否也應該檢查$ _ SERVER [ 'REMOTE_ADDR']或只是用戶 代理?

有沒有必要 - 你只是爲自己做更多的工作。查看OWASP guide on CSRF瞭解更多信息。您可以看到the best ways to prevent CSRF attacks here.注意 - OWASP確實建議只有在未使用CSRF令牌的情況下才會查看CSRF 的標頭。

+0

謝謝。 +1的有用鏈接。 –