含まれているファイルへのアクセスを無効にする問題を既に確認しましたが、それが最善の解決策であるかどうか疑問に思っています。
コンテキスト: PHP フレームワークのブートストラップ クラスを作成していますが、このセキュリティ問題には複数の解決策があることに気付きました。
最初に述べたような投稿やhtaccessに関連する他の投稿を調査して読んだ後、基本的に3つのタイプの解決策があると思います。
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 コントロールにかなり慣れていないので、これが安全な解決策であるかどうか疑問に思っています。
純粋主義者とミニマリストにとって、ここでの質問は次のようになります: これら (3 つの例) は、Apache-PHP アプリケーション用の優れた直接アクセス制御システムですか? そうでなければ、どれが最も安全なアプローチでしょうか? そして、最も単純な?