0

我已经检查了禁用访问包含文件的问题,但我想知道这是否是最好的解决方案。

背景:我正在为我的 PHP 框架构建一个引导类,并意识到这个安全问题有多种解决方案。

在研究和阅读了我最初提到的和其他与htaccess相关的帖子后,我认为基本上有三种解决方案:

1 - 检查一个常数(就像在我链接的帖子中一样)

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

或者

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

2 - 将所有调用重定向到 Bootstrap 并进行巧妙的过滤。

//Something like
// if $urlRequested it's a file
    // Go to Error
// else if $urlRequested it's not a controller
    // Go to Error
// else 
    // Execute Controller Logic.

3 - 设置 htaccess。

# Redirecting calls for non-directories, files or links
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA]

# Redirecting the rest of the calls to the error page.
RewriteRule ^(.+)$ index.php?url=error/404 [QSA]

我个人认为解决方案 3 是最有趣的,但我在 Htaccess 控件中相当新,所以我想知道这是否是一个安全的解决方案。

对于纯粹主义者和极简主义者,这里的问题是:这些(三个示例)对于 Apache-PHP 应用程序来说是很好的直接访问控制系统吗?否则,哪种方法最安全?最简单的?

4

2 回答 2

0

这是一个有争议的话题,但.htaccess规则适用于该特定目录上的所有文档。在应用 1 或 2 时,您可能必须在每个文件中包含该部分。

于 2013-06-18T18:59:59.623 回答
0

查看此处列出的所有选项 IMO 最好将这些文件放在 public_html 文件夹或您的 DOCUMENT_ROOT 文件夹上方并包含../路径。然后它将可用于您的 PHP 脚本,但对于 Web 请求会出现默认404/ file not found错误。

于 2013-06-18T19:03:03.473 回答