【问题标题】:is there a better way of protecting specific webpages?有没有更好的方法来保护特定网页?
【发布时间】:2013-04-06 23:21:50
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 应该没问题,只要您的登录脚本得到适当保护。如果安全真的很重要,你也应该使用 SSL (https)。
  • 确保在重定向后终止脚本
  • @musa 你是什么意思杀死脚本?在重定向将用户带到 index.php 页面后,页面加载后是否没有任何脚本“被杀死”?
  • header('Location: where ever'); exit;

标签: php security session redirect


【解决方案1】:

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

我建议实施某种额外级别的安全性。额外的安全级别可能包括将 IP 地址列入白名单,或在您的 SESSIONs 上设置较短的到期时间。

另见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】:

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

</php
  // Code

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2011-04-06
      • 2015-08-16
      • 2019-09-03
      • 2010-09-21
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多