【问题标题】:How can I prevent access to my PHP include files like header.php, footer.php and the likes?如何防止访问我的 PHP 包含文件,如 header.php、footer.php 等?
【发布时间】:2015-04-17 02:34:54
【问题描述】:

我正在为自己开发一个网站,我只是想知道如何防止直接访问包含文件,如 header.phpfooter.php。这些文件应该只包含在像 index.php 这样的页面或其他将使用<?php include(''); ?> 调用它们的页面中。我应该通过 PHP 来做吗?编辑 .htaccess 文件怎么样,或者有其他方法吗?

【问题讨论】:

  • 标准的方法是把它们放在网络根目录之外
  • 或者检查会话变量或cookie。如果不存在 301 重定向到另一个页面或die()。也可以伪造 401 状态。
  • @Dagon 那么如果我将它放在 resources 文件夹中,我将如何保护它?
  • @Twisty,你能详细说明一下吗?
  • 用户无权访问网络根目录以外的文件

标签: php html security


【解决方案1】:
  • 将文件放置在 Web 根目录之外的目录中。
  • Web 服务器永远不会将这些文件提供给用户。
  • php 等。仍然可以通过 include\require 等访问文件
  • 几十年来,这一直是黄金标准方法。

【讨论】:

  • 我是想点你的勾号,有一段时间我以为我的眼睛模糊了。
【解决方案2】:

我提供了 3 条建议,由于您没有提供太多建议,我将给您详细说明。

正如@Dragon 所逃避的那样,当您使用include() 时,您的读取是通过文件系统而不是通过HTTP 请求进行的。您可以检查 HTTP 动词($_REQUEST、$_GET、$_POST)并拒绝显示内容或伪造 401。

<?php
if(isset($_REQUEST) || isset($_GET) || isset($_POST)){
  header("HTTP/1.0 404 Not Found");
  die();
}

// Do the needed
?>

我会让你自己找出问题所在。

【讨论】:

  • 您选择了这个作为答案?真的——叹息。我 cna 将任何标头请求发送到我想要的服务器上的文件 - 这不是一种安全的方法
  • 谢谢,我明白了。
【解决方案3】:

如果你的服务器是 linux 那就完美了,因为你可以按照 Dagon 的建议将文件放在 web 根目录之外。

Web 根目录当然是包含外部世界要访问的文件的基本文件夹。在许多系统上,这是 public_html 文件夹。

在安装了 WHM/cpanel 的系统上,您可能有一个特殊的用户帐户,该帐户的根(可以存储任何内容)位于整个系统的 /home/user 中。这可以在登录时使用 cpanel 附带的文件管理器实用程序查看。在该 /home/user 文件夹中,您可以找到以句点开头的配置文件和文件夹以及 public_ftp 和 public_html 文件夹。

在 /home/user 文件夹中,您可以放置​​您不希望世界直接访问的 PHP 文件。然后在 public_html 中(可在 /home/user 中访问),您可以将包含包含语句的 index.php 文件放置到“受保护”文件中。这样在 index.php 中你可以使用这个语句:

include "../file-to-include.php";

只需确保管理员已将 /home/user 文件夹的所有者设置为您登录时使用的相同用户名,否则您在尝试访问文件时可能会收到拒绝访问消息。在一个不错的 cpanel 设置上,最后一步已经为您完成了。

【讨论】:

  • @Dragon 发布的解决方案适用于所有 Web 服务器。它在 Windows 中的工作方式大致相同。
猜你喜欢
  • 2020-07-29
  • 2010-09-29
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多