皆さん、こんにちは皆さん、CodeIgniter PHP frameworkを使って写真共有サイトを開発しています。アイデアは、人々が自分の写真をアップロードしたり、ファイルを管理したり(サブフォルダの作成、ファイルのドラッグなど)、編集することができます(サイズ変更、回転、後で、私はいくつかの高度な機能を追加します)。ユーザーからPHPファイルマネージャを保護する
私は既にCI(Redux Authentication 2 Beta)用のサードパーティ認証ソリューションを実装していますが、JS/PHPファイルマネージャ(AjaxExplorer)を統合していますが、問題はファイルの管理(PHPのバックエンド、etc)は、ajax呼び出しからのユーザ入力をあまりにも信頼しています。あなたが見ることができるように、それは盲目的にユーザがスローどんなパス受け入れるよう
move_uploaded_file($_FILES['upload']['tmp_name'], $root.$username.$_POST['destination_dir']);
は、明らかなセキュリティ上の懸念があります。例えば、それは、(明瞭にするために簡略化され)、このようなことをやっています! $ _POST ['destination_dir']の値として誰かが "../AnotherUser/"のようなものを送るのを見ることができます。
私の質問はユーザーが自分のデータを管理できるようにするために、ユーザーを「サンドボックス」するにはどうすればよいですか?すべての侵入試行を捕まえることを望み、入力を検証してフィルタリングするだけですか?この特定の問題に対処するために専用のライブラリ/パッケージはありますか?
私は、この問題は、ユーザーにWebブラウザを介してファイルを管理する能力を与えるプロジェクト(成熟したプロジェクト)で何らかの形で解決されなければならないと思うので、これに関するいくつかの明確なガイドラインがSQLインジェクション、XSS、CSRFなどについてはたくさんありますが)私は正しいキーワードを使用していないと思います。
答えをbobinceさんにありがとう!これは良い解決策ですが、ファイルの単純なバックアップを行うと、名前付けスキームを逆にするスクリプトが最初に実行されることを意味するため、データの移植性に懸念があります。データベースが侵害されたり破損したりすると、 dirのツリー構造。 – lima
良い解決策。 @fandelost、次にデータベースとファイルの両方をバックアップすることを確認してください –
私はとても長い時間がかかりました。私は最終的に "AjaxExplorer"を辞任し、自分のファイル管理ソリューションを構築しました.Bobinceの助言に基づいて、ファイルに関連するすべてを保存するデータベースを使用していましたが、Webルートの外にアップロードした後には触れませんでした。私はまた、それぞれの名前のフィールドを制限された文字セットに制限しました。そして、私は入れ子にされたフォルダを使用しません。代わりに単一のレベルのグループ化を使用します。 – lima