0

これをstackoverflowの他の場所やネット上の他の場所で検索しようとしました。

それが最も安全な方法であることを示唆する答えを確実にロックすることはできないようです。

最も安全な方法は、可能であれば、ルート ディレクトリに php ファイルを含めないことです。

だから、私が見つけようとしているのは、ルートディレクトリの外側に保存されているphpファイルを含めたい場合、たとえば別のディレクトリに入れたい場合、それを行う最も安全な方法は何ですか?

4

2 に答える 2

1

これはあなたの質問に直接答えるつもりはありませんが、おそらくそれはあなたがあなたのアプリの構造を異なって見るようになるでしょう。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ファイルを閲覧できないようにします。

于 2012-07-07T11:15:20.230 に答える
0

あなたの質問から、私はあなたがディレクトリのトラベサル(あなたのスクリプトに/ etc / passwdなどを含めようとしている人々)を防ぎたいと思います。

要求されたパスでrealpathを使用します。../これにより、すべて..などが拡張されます。

これが完了したら、返される結果realpath()をホワイトリストと照合するか、独自のディレクトリに制限して、:を確認しfile_exist()ますfile_exist('myfolder' . DIRECTORY_SEPERATOR . $resultFromRealPath())

于 2012-07-07T10:56:59.673 に答える