我目前在我的cms中使用以下代码来检查访问者是否以管理员身份登录,以便他可以编辑当前页面:
if($_SESSION['admin']=="1")
{
echo "<a href="foobar/?update">edit</a>";
}
但我担心代码不安全。用户不能轻易修改$ _session变量吗?
什么是更安全的做法?
答案 0 :(得分:4)
不,这是一个很好的方法。用户无法修改$ _SESSION全局,除非他有权访问您的服务器。请记住远离客户端Cookie 。
为了使它更安全,一个好方法是存储IP地址并检查它是否在每个请求之间保持不变。
答案 1 :(得分:3)
代码没问题,你只是显示一个链接。只需确保您的UPDATE脚本也受到保护。
答案 2 :(得分:1)
$_SESSION
个变量。因此代码非常好,尽管您通常会询问您的用户后端(通常只是表用户,有时是LDAP)有关当前用户的权限。
答案 3 :(得分:1)
我找到了关于会话安全性的演示文稿
它解释了如何避免:
此外,包含更多信息的幻灯片还有一些真正的商品链接
答案 4 :(得分:0)
一旦编码安全,会话变量应该足够安全。
另外,请使用以下内容。用==停止错误 也可能也应该使用true,因为它比字符串比较快得多。
if( "1" === $_SESSION['admin'] )
答案 5 :(得分:0)
此代码不再安全:
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;
在每个页面的顶部放置如下内容:
if(!isset($_SESSION['token'])){ die('Access Denied');}
if(!isset($_SESSION['username'])){ die('Access Granted');}
首先检查SESSION中的令牌进位,然后检查用户ID,包括用户的权限级别。这只是一种简单的方法,在开头添加更多的指纹扫描代码,使拦截sessionid变得复杂。