有没有更好的方法来保护特定的网页?

时间:2013-04-14 22:28:38

标签: php security session redirect

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

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

由于

3 个答案:

答案 0 :(得分:3)

如果代码不在公共场所(公共文件夹上方),则代码更安全,因此问题发生的难度更大。这里发生了什么?

</php
  // Code

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

另外,请查看此其他SO question about session hijacking,它会直接关注您的问题。

EDIT。我刚看了facebook's Criticism Wikipedia page并且非常相关,所以我引用它:

  

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

如果他们当天在其他地方问过这个问题,他们可能就不会被曝光了。

答案 1 :(得分:2)

严格依赖$_SESSION全球不是非常安全。有些应用程序能够“劫持”会话并操纵存储在客户端的SESSION ID。看看FireSheep

我建议的是实现某种类型的额外安全级别。额外的安全级别可能包括白名单IP地址,或SESSION的短暂到期时间。

另见is storing data in php session insecure(这不是同一个问题,但类似)。

白名单IP地址

作为mentioned in white list ip address for admin access,您可以保留有权访问您网页的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的回答here

更多阅读材料

答案 2 :(得分:1)

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