我已经检查了问题disable access to included files,但我想知道这是否是最佳解决方案。
上下文:我正在为我的PHP Framework构建一个引导类,并意识到这个安全问题有多种解决方案。
在研究和阅读我最初提到的帖子和其他与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应用程序的直接访问控制系统?否则,这将是最安全的方法?最简单的?
答案 0 :(得分:0)
这是一个值得商榷的主题,但.htaccess
规则适用于该特定目录上的所有文档。在应用1或2时,您可能必须在每个文件中包含该部分。
答案 1 :(得分:0)
查看此处列出的所有选项IMO最好将这些文件放在public_html文件夹上,或者放在您的DOCUMENT_ROOT文件夹中,并包含../
路径。然后它将可供您的PHP脚本使用,但对于Web请求将收到默认的404/ file not found
错误。