防止直接访问php文件但允许包含它

4

你好,我正在尝试为我要建立的网站制作部件,比如header.php、footer.php等等。我希望这些文件只有在被引用时才能工作,而且没有人可以直接访问它们。请问有什么方法可以做到这一点吗?

3个回答

3

以下是两种你可以尝试的选择:

<?php
/**
 * Returns true if current file is included
 */

function isIncluded() {
    $f = get_included_files();
    return $f[0] != __FILE__;
}

if(!isIncluded()) {
    // Do some stuff, eg: print some HTML
} else {
    // Show 403/error
}

?>

<?php

// You can also use (recommended)
if(__FILE__ !== $_SERVER["SCRIPT_FILENAME"]) {
    // this file is being included
}

?>

您也可以选择将文件放置在一个由.htaccessDeny from all保护的目录中,因为PHP可以绕过此项保护,但用户无法。


3

不将这些脚本放在网站根目录下是一种常见的和最佳实践。你可以将你的包含文件放在其他目录中。

也就是说,你可能会有像这样的目录:

/www
  index.php
/includes
  header.php
  footer.php

在你的index.php中,你可以随时使用require_once('../header.php');

这比配置Web服务器禁止访问要好。如果你像其他人建议的那样使用.htaccess文件,那么可能会丢失该配置,移动或被 Web 根目录外的正确配置文件忽略等问题。你不想意外地泄露这些文件。


2
你可以创建一个 .htaccess 文件并将其放置在独立目录中(例如 "common"),该目录不能直接执行。这个 .htaccess 文件应该包含以下指令:
order deny,allow
deny from all

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接