[英]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.