【问题标题】:disable access to included files禁用对包含文件的访问
【发布时间】:2012-10-25 16:15:27
【问题描述】:

我有一个小问题..

我想禁用对我包含的文件的直接访问。 (例如 header.tpl.php、footer.tpl.php、confic.inc.php、db-connect.inc.php 等)

但首先让我解释一下我想做什么 我想全部允许访问我包含的文件(index.php)并禁用带有 404 标头的文件以进行直接访问。

现在我发现了一些很酷的 php sn-p 并对其进行了修改(404 标头和 404 包含)

在我的 index.php 中是这样的代码:

define('MY_APP',true);

在我的模板文件中是这段代码:

if(!defined('MY_APP')) {
header('HTTP/1.1 404 Not Found');
include('./../error/404.php');  
die; }

您是否发现此代码存在任何安全问题或其他问题?

最好的问候 伯恩特

【问题讨论】:

    标签: php include http-status-code-404


    【解决方案1】:

    您是否发现此代码存在任何安全问题或其他问题?

    如果您的服务器被重新配置以使 .php 不再被执行,它们的源代码将是可见的。

    但除此之外,您的方法是一种非常常见的方法。但是error/404.php 可以包含header('HTTP/1.1 404 Not Found'); 行,因此您不需要为每个文件重复它。 die; 语句也是如此。

    在每个库/模板等文件中:

    require('../error/include_file.php');
    

    include_file.php:

    if(!defined('MY_APP'))
    {
        header('HTTP/1.1 404 Not Found');
        include('404.php');  
        die; 
    }
    

    可能更适合您的设计。不要重复太多。

    【讨论】:

      【解决方案2】:

      为什么不把它放在 public_html 文件夹或任何你用作默认 html 文件夹的上面并包含在 ../../ 中。然后它将可用于脚本,但公众将获得默认的 404/ 未找到文件。我使用包含密码的配置文件来执行此操作,因此任何公众都无法访问它们。

      【讨论】:

        【解决方案3】:
        if (basename($_SERVER['SCRIPT_FILENAME']) == basename(__FILE__))
        {
            //header("Location: index.php");
            exit("NOT ALLOWED");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-04
          • 1970-01-01
          相关资源
          最近更新 更多