我已经检查了问题disable access to included files,但我想知道这是否是最佳解决方案。禁止直接访问PHP中的文件
上下文:我正在为我的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 - 重定向到引导所有来电,使一个聪明的筛选。
//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应用程序的直接访问控制系统吗?否则,这将是最安全的方法?最简单的?
就标准和优雅而言,选项3无疑是更好的方法。 – phpisuber01