【问题标题】:how to protect a php page where there is no form too check against如何保护没有表单的php页面检查
【发布时间】:2013-12-19 20:31:23
【问题描述】:

我正在尝试完成我的网站,并确保用户看不到任何可能以恶意方式帮助他们或给他们带来糟糕网站体验的内容。

所以对于我的页面,例如 login.php,我检查请求方法,如果它的帖子继续,如果不是,则 404 等。

但是,我有几个页面从数据库中收集了一些信息,并将它们包含在页面中。其中一些非常大/复杂,所以我更喜欢这样做以保持整洁。

如果用户直接访问这些页面而不是仅仅包含它们,我该如何将用户重定向到 404?

谢谢。希望你明白我的意思! :)

【问题讨论】:

  • 让他们登录,设置一个会话变量,注意他们已登录并在安全页面上检查它。就是这样。
  • 或者,您可以只使用 htpasswd 授权。
  • 我通常将仅用于包含的文件放入无法从网络访问的文件夹中。
  • 我可以看到这是一种更简单的方法,我想我也会这样做。但是我认为我想要一个双重后备,以防万一我的 js 失败并且 ajax 调用不起作用,因此将用户引导到处理页面等。
  • 除了 floww 的出色建议之外,您还可以在 .htaccess 中使用 rewrite-rules 以确保服务器将所有请求重定向到仅允许的脚本(通常是一个门户脚本)。

标签: php security error-handling user-experience protection


【解决方案1】:
<?php // top file, eg login.php
define('IN_SCRIPT', true);
include('infopage.php');
?>

<?php // included file, eg infopage.php
if (! defined('IN_SCRIPT')) {
   // log message, throw header, etc.
   // this is a direct access
   exit(0);
}

// do whatever
?>

或者,考虑将您的信息页面移出网络可见空间。

【讨论】:

    【解决方案2】:

    我认为你可以使用一些简单的技巧。

    你想在哪里包含文件,而不是简单地

    include('db.php')
    

    做:

    $including = 'yes';
    include('db.php');
    

    在 db.php 的第一行:

    if (!isset($including)) {
      //show 404
      exit;
    }
    //db job
    

    所以如果包含它就可以完成工作,如果直接调用它会显示 404。

    或者:

    第一个技巧(和定义)可能更安全,但如果您不想更改包含该文件的每个文件;

    就在db.php中:

    if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME'])) {
      //show 404
      exit;
    }
    //db job
    

    【讨论】:

    • 对这种方法的一个观察,在实践中让我很痛苦:变量$including可以在包含之前设置为空(或取消设置),导致db.php中的测试通过虽然它没有被包括在内。我的回答中的define 方法不允许这样做——定义不能未定义或重新定义。
    • include 应该在 $including= 之后,但是是的!
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2013-12-10
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多