讓我們考慮服務器對用戶的信任。會話劫持和PHP
會話固定:爲了避免我用的是固定 「session_regenerate_id()」 只有在認證(login.php中)
會議sidejacking:SSL加密整個站點。
我安全嗎?
謝謝。
讓我們考慮服務器對用戶的信任。會話劫持和PHP
會話固定:爲了避免我用的是固定 「session_regenerate_id()」 只有在認證(login.php中)
會議sidejacking:SSL加密整個站點。
我安全嗎?
謝謝。
閱讀OWASP A3-Broken Authentication and Session Management。另請閱讀OWASP A5-CSRF,有時稱爲「會議騎行」。
你應該在一個PHP頭文件使用此代碼:
ini_set('session.cookie_secure',1);
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
session_start();
此代碼防止session fixation。它也有助於防止xss訪問document.cookie
,這是Session Hijacking可能發生的一種方式。僅執行HTTPS cookie是解決OWASP A9-Insufficient Transport Layer Protection的好方法。這種使用HTTPS的方式有時被稱爲「安全cookie」,這是一個可怕的名字。另外STS是一個非常酷的安全功能,但並非所有的瀏覽器都支持它。
你的答案至少應該有+10,並且在我的投票中你明白了。幾個問題只是爲了讓我明白:1)'cookie_secure'會強制我在會話中始終使用https,不是嗎?! 2)'cookie_httponly'做什麼?我讀了PHP的解釋,但是當它說阻止JS表單讀取cookie時,我沒有得到,實際上Cookie應該在許多情況下被JS讀取。謝謝,和FYI:自PHP 5.3.0'session.use_only_cookies'默認爲1 http://it.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies – 2011-04-29 16:07:58
我也建議在會話中存儲用戶代理和IP信息,並在每個請求中驗證它。這不是防彈的,但它的魯棒性有了相當大的提高。雖然UA鍛造非常簡單,但IP鍛造雖然可能很難...但您可能會遇到諸如AOL用戶等循環知識產權系統背後的用戶問題...
最佳實踐我有沒有發現是將會話數據保存到數據庫或文本文件。 數據庫將有用戶代理和IP記錄並檢查它的每一個請求,以確保該會話永遠不被其他人劫持。
例如會話保存在數據庫中,您可以在codeigntier會話庫中看到實現。在我看來,這種方式相當節省,以防止某人進行會話。
檢查用戶代理是沒有意義的,因爲這是一個攻擊者控制變量。在數據庫中存儲會話ID意味着SQL注入讓攻擊者立即訪問系統,所以他不需要破解密碼哈希來登錄。檢查IP地址很容易出錯,因爲這可能會在合法系統上更改,例如,如果他位於公司網絡上的負載平衡器後面。 – rook 2010-08-19 05:17:41
@Rook - 您假設數據庫容易受到SQL注入的攻擊。正確使用預先準備的語句或存儲過程以及適當的參數衛生設置將不允許SQL注入。 – AgmLauncher 2013-11-03 21:23:27
@AgmLauncher這相當於以明文形式在數據庫中存儲密碼。一個人必須計劃失敗。 – rook 2013-11-03 22:17:48
它是什麼類型的網站? – 2010-08-18 22:57:10
@MrXexxed一個網站,開發人員不希望它被黑客入侵。 – rook 2010-08-18 23:43:30
@The Rook,我和OP說話,這是一個真正的問題,你的評論既荒謬又完全無益。 – 2010-08-19 00:15:43