これをstackoverflowの他の場所やネット上の他の場所で検索しようとしました。
それが最も安全な方法であることを示唆する答えを確実にロックすることはできないようです。
最も安全な方法は、可能であれば、ルート ディレクトリに php ファイルを含めないことです。
だから、私が見つけようとしているのは、ルートディレクトリの外側に保存されているphpファイルを含めたい場合、たとえば別のディレクトリに入れたい場合、それを行う最も安全な方法は何ですか?
これはあなたの質問に直接答えるつもりはありませんが、おそらくそれはあなたがあなたのアプリの構造を異なって見るようになるでしょう。Webルートの外部からファイルを含めるのは安全ではないというのは誤解だと思います。
それどころか、多くの人は、アプリケーションロジックのすべてpublic_html
ではないにしてもほとんどがまたは同様のディレクトリの外にある構造を持っています。特にキャッチオールルータータイプのシステムでは。
次のような構造にすることができます。
var
www
public
something.js
happy.jpg
index.php
application
bootstrap.php
AwesomeClass.php
Router.php
これで、アプリケーションindex.php
の本当のルートを理解できます。
何かのようなもの:
define('WEB_ROOT', __DIR__);
define('APP_ROOT', dirname(__DIR__));
define('PHP_ROOT', APP_ROOT . DIRECTORY_SEPARATOR . 'application');
これで、パブリックhtmlディレクトリの実際のファイルシステムパスとphpファイルの場所を指す定数が作成され、次のようなファイルを安全に含めることができるようになりました。
include(PHP_ROOT . DIRECTORY_SEPARATOR . 'bootstrap.php');
これは完全に安全であり、多くの人がこのように構成されたアプリを持っています。.htaccess
また、同様のブードゥーがない場合に、他の人があなたが置いているphpファイルを閲覧できないようにします。
あなたの質問から、私はあなたがディレクトリのトラベサル(あなたのスクリプトに/ etc / passwdなどを含めようとしている人々)を防ぎたいと思います。
要求されたパスでrealpathを使用します。../
これにより、すべて..
などが拡張されます。
これが完了したら、返される結果realpath()
をホワイトリストと照合するか、独自のディレクトリに制限して、:を確認しfile_exist()
ますfile_exist('myfolder' . DIRECTORY_SEPERATOR . $resultFromRealPath())
。