2011-08-24 151 views
2

我對Web開發非常陌生,並且閱讀了有關CSRF,XSS和會話劫持的內容。一個建議的解決方案是簡單地使用nonce來檢查請求的有效性。我在PHP中編寫了這個腳本來防止會話劫持。我認爲它重新生成會話ID的意義相似,因爲標識符或它們的組合(會話ID和隨機數)在每個請求時都會更改。實施會話劫持預防,正確

if(!isset($_SESSION["user"]["nonce"]) || 
    $_SESSION["user"]["nonce"] == $_COOKIE["SITE_nonce"]) 
{ 
    $nonce = md5(uniqid()); 
    $_SESSION["user"]["nonce"] = $nonce 
    setcookie("SITE_nonce", $nonce, 0, "/path"); 
} 
else 
    die("Invalid Request"); 

這夠了嗎?我真的不知道我能否買得起SSL,而且我知道這對於會話劫機者來說是一個很好的解決方案,但我希望對這種方法有所瞭解。我錯過了什麼嗎?

回答

0

這是一個很常見的問題 - 以前討論過很多次。我建議你訪問安全頁面,如http://owasp.com/index.php/Main_Page爲一堆非常好的指南。

至於你的實現:你也可以存儲某種你第一次生成的哈希得到一個會話和一個IP。此外,我想餅乾上好時光。

+0

感謝您的鏈接。我開始瀏覽一些頁面,並且看到我的實現符合Page Tokens!如果它太多了,我真的不明白你在第二段有關散列的含義(我得到了關於cookie的部分,但不是前者)。 –

+0

@Rolando Cruz我所做的是md5(IP,用戶名和密碼傳遞階段),並將其存儲在特定用戶的「散列」字段下。所以當有人回來(用cookie)時,我會比較這些哈希值,如果不匹配。然後我登錄它,將它們踢出去,並可能讓它們停留幾分鐘。 – Luke

+0

啊。我懂了。我以爲你是第一次訪問該網站。在這種情況下,我想我也會將'HTTP_USER_AGENT'的值添加到哈希中。謝謝! –