7

私は、2 つの非常に異なるコンポーネントを持つものを開発しています。

現時点での構造は
Core: コア
内のもの
3prty:
サードパーティが開発したもの

今、私がやりたいことは、サードパーティが開発したphpスクリプトが次のようなことをしないようにすることです

scandir("../");

また

require "../core/anyfile.php";

また

file_get_contents("../core/SourceCode.php");

とにかくこれを実現する方法はありますか?どんな助けでも大歓迎です。前もって感謝します。

私は Apache を実行しており、それは私自身のサーバーなので、拡張機能などをセットアップできます。ソリューションは、実稼働環境で実行可能でなければならず、悪意がある可能性があることを認識して、サードパーティのスクリプトを許可できる必要があります。

4

2 に答える 2

0

これは、セットアップしたサーバー側の構成の種類に大きく依存します。Apache を例にとると、Apache スレッドはすべて、httpd.conf ファイルにあるUserディレクティブ (通常は _www、www-data、または apache など) で定義されたシステム ユーザーとして実行されます。プロジェクトにベンダーからのファイルが含まれている場合、それらはコア ファイルと同じユーザー(つまり、同じアクセス許可レベル) で実行され、すべてを読み取るためのアクセス権が与えられます。

あなたが提案していることを達成する唯一の方法は、コア ライブラリとベンダー ライブラリを完全に分割し、現在のユーザーを手動で変更してから、ベンダー ライブラリを個別の実行として実行することだと思います。ベンダーは、この種のやり取りをサポートする必要があります。ただし、かなり厄介になる可能性があり、本番環境ではこれをお勧めしません (悪意のあるベンダー ライブラリによって操作される可能性があります)。

<?php
$restricted_user = 'vendor';
$user_info = posix_getpwnam($restricted_use);

// change the user before executing the external vendor scripts
posix_setuid($user_info['uid']);
posix_setgid($user_info['gid']);

// run the vendor scripts using exec, shell_exec, system, pass_thru...
system('php /path/to/vendor/script.php');

一般的に言えば、実行パターンが信頼できないサーバー上の実行可能コードを許可するのは悪い考えです。

于 2013-11-14T16:43:07.457 に答える