簡體   English   中英

PHP會話變量處理不當?

[英]Bad handling of PHP sessions variables?

我目前在我的cms中使用以下代碼來檢查訪問者是否以管理員身份登錄,以便他可以編輯當前頁面:

if($_SESSION['admin']=="1")
{
        echo "<a href="foobar/?update">edit</a>";
}

但我擔心代碼不安全。 用戶不能輕易修改$ _session變量嗎?

什么是更安全的做法?

不,這是一個很好的方法。 用戶無法修改$ _SESSION全局,除非他有權訪問您的服務器。 請記住遠離客戶端cookie

為了使其更安全,一種好方法是存儲IP地址並檢查它是否在每個請求之間保持不變。

代碼沒問題,你只是顯示一個鏈接。 只需確保您的UPDATE腳本也受到保護。

用戶無法設置$_SESSION變量。 因此代碼非常好,盡管您通常會詢問您的用戶后端(通常只是表用戶,有時是LDAP)有關當前用戶的權限。

我找到了關於會話安全性的演示文稿

它解釋了如何避免:

  • 會話固定。
  • 會話劫持。

此外,更多信息的幻燈片還有一些真正的商品鏈接

此代碼不再安全:

if mypage.php contains this code:

session_start();
$_SESSION['admin']==1;
echo "<a href='http://the.link-to-your-page.php' target='_blank'>link</a>";

如果單擊該鏈接,則會話管理員1將被帶到您的頁面,並且將出現編輯按鈕。

最安全的方法是在登錄驗證后立即設置令牌(這是一個非常簡單的步驟)。 例如$token = sh512($var.....); $_SESSION['token']=$token; $token = sh512($var.....); $_SESSION['token']=$token;

在每個頁面的頂部放置這樣的東西:

if(!isset($_SESSION['token'])){ die('Access Denied');}
if(!isset($_SESSION['username'])){ die('Access Granted');}

首先檢查SESSION中的令牌進位,然后檢查用戶ID,包括用戶的權限級別。 這只是一種簡單的方法,在開頭放置更多的指紋掃描代碼,使攔截sessionid變得復雜。

一旦編碼安全,會話變量應該足夠安全。

另外,請改用以下內容。 使用==停止錯誤也可能也應該使用true,因為它比字符串比較快得多。

if( "1" === $_SESSION['admin'] )

暫無
暫無

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

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