我已经检查了禁用访问包含文件的问题,但我想知道这是否是最好的解决方案。
背景:我正在为我的 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 应用程序来说是很好的直接访问控制系统吗?否则,哪种方法最安全?最简单的?