這是關於生成CSRF令牌的問題。CSRF令牌生成
平時我想基於掀起了獨特的作品與用戶的會話相關的數據的一個令牌,散列,並用私鑰鹹。
我的問題是關於在沒有唯一的用戶數據使用時生成令牌。沒有會話可用,Cookie不是一個選項,IP地址和這種性質的東西是不可靠的。
是否有任何理由,我可以不包括散列的以及請求的一部分字符串? 實施例的僞代碼生成令牌並將其嵌入:
var $stringToHash = random()
var $csrfToken = hash($stringToHash + $mySecretKey)
<a href="http://foo.com?csrfToken={$csrfToken}&key={$stringToHash}">click me</a>
實施例的服務器端的跨站請求僞造的確認標記
var $stringToHash = request.get('key')
var $isValidToken = hash($stringToHash + $mySecrtKey) == request.get('csrfToken')
的字符串中的散列被用於將在每個請求不同。只要它包含在每個請求中,就可以繼續進行CSRF令牌驗證。由於每個請求都是新的,並且只嵌入在頁面中,因此外部對令牌的訪問將不可用。令牌的安全性然後落在我只知道的$ mySecretKey上。
這是一個天真的做法?我錯過了某些原因,爲什麼這不起作用?
由於
所提出的解決方案是容易受到重放攻擊。相同的標記和組合鍵將無限期地工作。 – Matthew 2012-01-24 06:56:05