4

我有一个网站,只有具有管理员权限的用户才能查看某些页面。当我登录登录到我的管理员帐户时$_session["is_admin"] = true设置。然后在我希望只有具有管理员权限的用户能够查看的页面上,我检查 is_admin 是否为真,否则我将它们重定向到索引页面。

if(!$_SESSION["is_admin"]){ //redirect to index.Php} 在这些情况下是否有更好的方法来保护网页?

谢谢

4

3 回答 3

3

如果代码在不公开的地方(在公用文件夹之上),代码会更安全,因此问题更难发生。这里会发生什么?

</php
  // Code

如果整个页面的内容在公共文件夹中,它将以纯文本形式显示。虽然这种情况很少见,但缺少 php 标签并不少见,在包含的文件中更是如此(然后攻击者可以直接访问该包含的文件)。

另外,请查看有关 session hijacking 的其他 SO question,它直接与您的问题有关。

编辑。我刚刚阅读了facebook的批评维基百科页面并且非常相关,所以我引用它:

据领先的互联网新闻网站称,2007 年 8 月,用于在访问者浏览该网站时生成 Facebook 主页和搜索页面的代码意外公开。Facebook 服务器上的配置问题导致显示 PHP 代码而不是代码应该创建的网页,这引发了人们对网站上私人数据的安全性的担忧。

如果他们以前在其他地方问过这个问题,他们可能不会被暴露。

于 2013-04-14T22:41:04.710 回答
2

严格依赖$_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 的答案。

更多阅读材料

于 2013-04-14T22:43:40.650 回答
1

如果您在访问页面方面只有管理员和非管理员用户,这是可以的。如果您有更多用户级别,您也可以实现角色。

于 2013-04-14T22:35:05.763 回答