【问题标题】:Access control of page in phpphp中页面的访问控制
【发布时间】:2010-06-10 12:40:55
【问题描述】:

我想控制 php 网站的访问。

我现在有一个使用开关盒的解决方案。

<?php
      $obj = $_GET['obj'];
      switch ($obj)
        {
      case a:
         include ('a.php');
         break;

      default:
         include ('f.php');
 }
?>

但是当我有这么多页面时,管理它们变得很困难。你有更好的解决方案吗?

现在,我使用 php4 开发应用程序。我想使用php5。当我使用 php5 开发时,您有什么建议吗?

谢谢

【问题讨论】:

  • 我们一定漏掉了什么。这如何控制访问?例如,为什么不直接链接到 a.php?
  • 我想要一个文件作为网站内容的访问,当然不包括登录、注销界面等
  • 你想要一个文件作为网站内容的访问权限吗?有什么原因吗?
  • 我想这样做只是为了安全。
  • @garcon1986:我看不到任何安全性。您认为这里的安全性如何?

标签: php switch-statement


【解决方案1】:
$obj = $_GET['obj']; 

$validArray = array('a','b','c','d','e');

if (in_array($obj,$validArray)) {
   include ($obj.'.php'); 
} else {
   include ('f.php');
} 

【讨论】:

  • 比使用switch好。谢谢!
【解决方案2】:

你拥有的页面越多,就越难控制。

最好使用某种框架,我个人的偏好是CodeIgniter

【讨论】:

  • 确实如此,它非常易于使用,并且有大量的库可以帮助您更快地编写代码
【解决方案3】:

为什么不直接寻址一个页面呢?

<a href="a.php">first page</a>
<a href="f.php">another page</a>

【讨论】:

  • 这样,用户在输入URL时就可以看到所有的文件。
  • @garcon1986:和/index.php?obj=a/index.php?obj=b等有什么区别?我也可以输入。
  • 是的,用户可以在 url 中输入任何内容。但是像这样的代码另一个页面,不好管理。
  • @garcon1986 不,不会有这么多链接。只有少数。假设您有单个脚本 news.php,并且所有新闻页面都将由这个单个脚本显示。您的网站会有多少个版块?
【解决方案4】:

我并不是说这是最好的解决方案,但几年前我曾经有一个网站,它使用数据库来管理密钥、要包含的页面以及诸如附加 css 之类的一些信息。

所以代码是这样的:

<?php

  $page = htmlspecialchars($_GET['page']);
  $stuffs = $db->query('select include,css from pages where pageid = "' . $page . '" LIMIT 1');

?>

所以当我们需要添加一个页面时,我们只是在数据库中创建了一个新字段。这也让我们关闭了网站的一部分:我们可以有一个“available = {0,1}”字段,如果为零,则显示一个静态页面,说明该页面正在维护中。

【讨论】:

  • htmlspecialchars 在这里做什么?
  • 我忘记了 ENT_QUOTE,它转义了 ' 和 " 和其他特殊字符。它避免了 sql 注入(没有 ')和如果我打印 $page 时 xss 的风险。
  • htmlspecialchars 与 sql 无关。它是 html 特殊字符,而不是 sqlspecialchars。正确的函数是 mysql_real_escape_string()
  • 我知道。但是 ENT_QUOTE 将 ' 变成 '所以 ?此外,对于 xss 的东西,我总是逃避用户输入。我不明白这件事。这就是我得到-1的原因吗?
  • 不仅引号字符必须被转义,而且不仅用户输入应该为查询正确准备
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2023-03-20
  • 2014-04-23
  • 2018-03-03
相关资源
最近更新 更多