簡體   English   中英

我應該在每一頁上重新生成_session_id嗎?

[英]Should I regenerate_session_id on every page?

我正在嘗試為我的用戶身份驗證會話添加更多安全性。 當用戶登錄時我regenerate_session_id但我希望你的回答如果我在每個頁面上的regenerate_session_id ,我認證用戶將幫助我。

在每個頁面上驗證用戶身份

<?php
    session_start();

    if(!isset($_SESSION['MEMBER_ID']) || (trim($_SESSION['MEMBER_ID']) == '')) {
        header("location: denied.php");
        exit();
    }
?>

我把它改成了

session_start();

if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
    header("location: access-denied.php");
    exit();
} else {

session_regenerate_id(); }

您可以使用session_regenerate_id來防止會話固定攻擊,其中攻擊者獲知給定用戶的會話ID,然后“劫持”該會話ID以代替用戶。

但是,必須小心。 首先,您必須考慮異步請求。 如果您有來自用戶的許多並發請求,您將希望避免一個腳本在另一個腳本嘗試重新生成時使用會話數據的情況 - 一個腳本正在使用另一個腳本試圖銷毀的數據。

此外,這確實增加了開銷。 重新生成每個請求可能是一種過度殺傷力。 相反,請嘗試保留請求計數器; 每10個請求(左右,任意選擇),重新生成ID。

確保將參數傳遞為true - 您不希望或需要舊會話數據(請記住,仍然是並發請求)。 有關更多信息,請參閱( docs )。

所有這一切 - 這種機制是一種“微觀增強”,它會給你帶來比實際安全更多的虛假安全感。 會話固定攻擊並不常見,特別是如果您已經采取其他措施來加強安全性。 沒有什么可以替代,例如,使用HTTPS進行安全連接; 沒有什么可以取代密碼復雜性要

可以使事情更安全但它也會引入問題(例如,當用戶在瀏覽器中打開多個頁面的選項卡/窗口並並行瀏覽它們時)。 在我看來,最好在會話中使用cookie。 雖然,你也可以使用session_regenerate_id(),因為它也適用於cookie。

此外,您還應檢查是否允許用戶訪問該頁面。 他/她可能已被禁止,但根據您當前的設置,他/她仍然可以訪問您的頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM