我有一个网站,只有具有管理员权限的用户才能查看某些页面。当我登录登录到我的管理员帐户时$_session["is_admin"] = true
设置。然后在我希望只有具有管理员权限的用户能够查看的页面上,我检查 is_admin 是否为真,否则我将它们重定向到索引页面。
if(!$_SESSION["is_admin"]){ //redirect to index.Php}
在这些情况下是否有更好的方法来保护网页?
谢谢
如果代码在不公开的地方(在公用文件夹之上),代码会更安全,因此问题更难发生。这里会发生什么?
</php
// Code
如果整个页面的内容在公共文件夹中,它将以纯文本形式显示。虽然这种情况很少见,但缺少 php 标签并不少见,在包含的文件中更是如此(然后攻击者可以直接访问该包含的文件)。
另外,请查看有关 session hijacking 的其他 SO question,它直接与您的问题有关。
编辑。我刚刚阅读了facebook的批评维基百科页面并且非常相关,所以我引用它:
据领先的互联网新闻网站称,2007 年 8 月,用于在访问者浏览该网站时生成 Facebook 主页和搜索页面的代码意外公开。Facebook 服务器上的配置问题导致显示 PHP 代码而不是代码应该创建的网页,这引发了人们对网站上私人数据的安全性的担忧。
如果他们以前在其他地方问过这个问题,他们可能不会被暴露。
严格依赖$_SESSION
全局不是很安全。有些应用程序能够“劫持”会话并操纵SESSION
ID
存储在客户端的 s。看看FireSheep。
我建议的是实施某种额外的安全级别。额外的安全级别可能包括将 IP 地址列入白名单,或在您SESSION
的 s.
另请参阅将数据存储在不安全的 php 会话中(这不是同一个问题,但类似)。
将 IP 地址列入白名单:
如管理员访问的白名单 IP 地址中所述,您可以记录有权访问您的页面的 IP 地址。如果 IP 地址不在允许的地址范围内,则拒绝访问该页面。您可以将地址存储在数据库中或将它们硬编码到脚本中(我会远离硬编码)。
这是从上面链接中的 zerkms 中获取的修改示例,其中包含您的SESSION
测试:
$whitelist = array('192.168.0.1', '192.168.0.2');
if ($_SESSION['is_admin'] !== true || !in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
//Admin denied.
header('Location: denied.php'); exit();
}
echo "You're an admin!"
缩短会话到期时间:
我建议在这里阅读 Gumbo 的答案。
更多阅读材料:
如果您在访问页面方面只有管理员和非管理员用户,这是可以的。如果您有更多用户级别,您也可以实现角色。