我對安全有很大的關注,我試圖確保我的$ _SESSION。我希望你的建議。是我保證會話安全的方式嗎?
當用戶創建帳戶時,我在他們的數據庫配置文件中生成一個隨機值11111 - 99999。
當用戶登錄時,我創建了一個包含大部分用戶數據(無密碼或任何關鍵信息)的會話。在$ _SESSION中,我還添加了在步驟1中創建的隨機數的加密版本,並且還創建了具有相同加密數字的$ _COOKIE,以用於檢查會話是否有效。
在我的應用程序上,當我收到一個請求時,我檢查$ _SESSION是否存在,實際上它應該存在,但爲了防止黑客(猜測或破解)其他人的會話ID,我將密鑰的加密值$ _COOKIE和$ _SESSION中的一個。
主要任務是,這種方法有多安全?我看不出任何黑客可以竊取$ _SESSION ID並同時加密密鑰。
密鑰的加密是由位於服務器上的加密值生成的,而不是以簡單的md5生成的,這在我看來很容易重現。因爲黑客無法知道我用於加密該密鑰的加密值。
然後在用戶在服務器上發送請求的最終時,它看起來像這樣(我簡化了代碼)。
if(isset($_SESSION['key'])){
if($_SESSION['key'] == $_COOKIE['key']){
// do stuff here
}
else {
die();
}
}
else {
die();
}
_「我看不出任何方式如何黑客既可以竊取某人的$ _ SESSION ID,並在同一時間知道加密密鑰「_ - 爲什麼不?您正在將會話ID和隨機值存儲在cookie中 - 因此,如果攻擊者能夠訪問一個,爲什麼他們不能同時訪問另一個? //你的問題讀起來像你可能是這方面的新手 - 在這種情況下,我認爲如果你像使用PHP會話機制那樣,最好不要自己添加任何東西。 – CBroe
當然,我的目標是保護我的應用程序,不幸的是我知道我無法保護用戶計算機免遭黑客入侵,但是我主要想防止的是(會話ID猜測),那麼即使我認爲如果您在瀏覽器中訪問了會話ID您還需要訪問與該用戶對應的加密密鑰。 – Mireille28
因此,攻擊者現在不需要猜測一個值,而需要猜測兩個值。基本上,你剛剛添加了*更多的熵*,這意味着攻擊者將不得不猜測*更長的值*。您可以簡單地通過生成更長的會話ID來實現這一點,它具有相同的效果。 – deceze