みなさん、こんにちは。CodeIgniter PHP フレームワークを使用して写真共有 Web サイトを開発しています。アイデアは、人々が自分の写真をアップロードし、それらを管理し (サブフォルダーを作成したり、ファイルをドラッグしたりできるある種のファイル ブラウザーを介して)、編集したり (サイズ変更、回転、トリミングなどの基本的なことから始めて) できるようにすることです。後で、いくつかの高度な機能を追加します)。
私はすでに CI ( Redux Authentication 2 Beta ) 用のサードパーティ認証ソリューションを実装しており、現在 JS/PHP ファイル マネージャー ( AjaxExplorer ) を統合していますが、問題は、ファイルを管理するための PHP バックエンド (移動、コピー、など) は、ajax 呼び出しからのユーザー入力を信頼しすぎています。たとえば、次のようなことを行っています (わかりやすくするために簡略化しています)。
move_uploaded_file($_FILES['upload']['tmp_name'], $root.$username.$_POST['destination_dir']);
ご覧のとおり、ユーザーが投入したパスを盲目的に受け入れるため、明らかなセキュリティ上の懸念があります。$_POST['destination_dir'] 値として "../AnotherUser/" のようなものを送信しているユーザーを既に確認できます。
私の質問は、ユーザーが自分のデータのみを管理できるようにするために、ユーザーを「サンドボックス化」する最良の方法は何ですか? 侵入のすべての試みをキャッチすることを期待して、入力を検証してフィルタリングするだけですか? この特定の問題に対処するための専用のライブラリ/パッケージはありますか?
この問題は、Web ブラウザーを介してファイルを管理する機能をユーザーに提供する (十分に成熟した) プロジェクトで何らかの方法で解決する必要があると思います。 、XSS、CSRF など) しかし、正しいキーワードを使用していないと思います。