我試圖圍繞會話劫持和使用令牌來保護CSRF。 我在每個腳本中都使用這個對象方法來檢查是否設置了會話變量,或者令牌是否與會話令牌匹配。導致令牌暴露的會話劫持
public function admin_index(){
session_start();
if(!isset($_SESSION["user"]) || $_GET['token']!=$_SESSION['token']) {
header("location: login/login_form.php");
session_destroy();
exit();
}
我在這個新的,我的問題是: 如果我的會話ID以某種方式被劫持,他將能夠在一定怎麼也看我的變量$ _SESSION [「令牌」]在很短的時間間隔後, session_start和會話數據被提取並填充到$ _SESSION中,還是在服務器上仍然安全?
即使已獲得有效會話,會話變量通常是否安全?
不要介意$ _GET ['token']而不是POST。我仍在努力。
感謝
編輯:
什麼我問的是。如果一個令牌可以幫助我以我使用它的方式來保護我的會話。如果腳本中的每個查詢,鏈接或視圖都需要一個有效的令牌,並且攻擊者只持有我的session_id,那麼令牌將是另一層保護,因爲他/她需要id和令牌來執行腳本中的任何操作, 對?
即使攻擊者獲得了我的session_id,令牌在服務器上也是安全的嗎?
只是爲了重申,如果你的會話被劫持了,csrf是沒有價值的。希望很明顯。它無助於會話劫持或預防。通常幫助的是檢查用戶代理和/或IP地址的更改,當然最終的安全性是https:和安全cookie。 – gview
每次訪問表單時都會生成CSRF令牌,因此無法保護您的會話。所以,如果我劫持你的會話並使用你的賬戶訪問該表單,那麼會生成一個新的令牌,並且無論之前的CSRF令牌是什麼,我都可以做我喜歡的事情。 –
並且在您的示例中是將更改與令牌或用戶進行身份驗證相匹配。您只應使用令牌來檢查數據是否來自可信來源。您似乎將其用作輔助會話ID,這不太正確。如果您從用戶的唯一標識符(例如,瀏覽器的session_id和User-Agent)創建一個散列,則可以這樣做,因爲每次都可以檢查它。 –