2

プロジェクトにuploadifyを実装したところ、アップロードプロセスの重要なセキュリティ問題のように見えることに気づきました。

ファイルをアップロードするフォルダーはjavascript引数として提供されるため、クライアント側になります。ユーザーがスクリプトを変更し、アップロード用に別のフォルダー(つまり、「/」)に入力すると、ファイルは別のフォルダーにアップロードされます。

構成にはファイルタイプをフィルタリングするオプションがありますが、これもクライアント側( "fileExt")で提供されます。

それで、これがハッキングの可能性につながる可能性があると考えるのは間違っていますか?Webルートのどこかにphpファイルをアップロードして実行するのは簡単なようです。

  • それは望ましい振る舞いですか?
  • uploadify.phpファイルのアップロードフォルダをクロスチェックする必要がありますか?
  • Uploadifyメーカーに通知を送信する必要がありますか?

私はこれについて考える最初の人ではないと確信しています。ああ、同じことがsizeLimitqueueSizeLimitのような他の設定パラメータにも当てはまります。

4

5 に答える 5

4

コードを見るだけで(どこにもインストールされていません)、これは確かにセキュリティ上の問題のようです。uploadify.phpを見ると、次のようになっています。

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

つまり、「/」を渡すと、ファイルがドキュメントルート(つまり、Webサイトのホームディレクトリ)に配置されます。もちろん、ユーザーは(たとえば)「../../etc」のようなフォルダパラメータと「passwd」という名前のファイルを簡単に渡すことができます。または、もっと簡単に、彼は「logo.jpg」をドキュメントルートにアップロードすることができます。そして、ねえ、今あなたはサイトのロゴのためのポルノを持っています!

もちろん、ユーザーをサンドボックス化したとしても、ユーザーがサーバーにファイルを任意にアップロードできるようにすることには、多くの潜在的な問題があります。.phpファイルをアップロードしてから、ブラウザでそのファイルに移動するとどうなりますか?彼らは突然あなたのサーバー上で任意のコードを実行する能力を持っています!

これを行う場合は、制限されたディレクトリへのユーザーのアップロードを強制する必要があります(ユーザーが「../..」などでクレイジーなパスを作成した場合、realpath関数はパスをサニタイズします)。許可されるファイルの種類(つまり、「。jpg」、「。gif」、「。png」などのみ)。それでも、悪意のあるユーザーがディスククォータをいっぱいにしてDOSを実行する可能性があります。

于 2009-10-20T21:32:10.910 に答える
2

私はあなたの投稿について私の意見を述べたいと思います。分析で重要なことを忘れています。開発者は、サーバー側スクリプトの変数をチェックする必要があります。javascript(uploadifyや独自のスクリプトなど)を使用する場合、またはjavascript(htmlの単純なFORM)を使用しない場合は、サーバー側スクリプトのデータを確認する必要があります。したがって、セキュリティのためにuploadifyを使用しているかどうかは関係ありません。HTTPリクエストを作成してサーバーに送信するのは簡単であることを忘れないでください。したがって、Webアプリケーションのセキュリティはクライアントに依存しません

ご清聴ありがとうございました

GUIGUI

于 2009-10-21T10:07:15.183 に答える
1

それは確かにセキュリティの問題、パストラバーサルです。あなたは彼らに電子メールを送り、それを修正するように頼むべきです。

于 2009-10-21T00:32:52.430 に答える
1

サーバーサイドスクリプトと構成を使用して、ファイルをどこにでも自由に配置できます。私はそのようなことのために彼らのjavascript設定を決して使用しません。

于 2009-12-18T09:56:48.740 に答える
0

これは少し古いトピックですが、プラグイン開発者からのメモは次のとおりです。

多種多様なスクリプト言語を考えると、サーバー側の検証はユーザーがコーディングする必要があります。私たちは、自分が何をしているのかを知っている人が、フロントエンドとバックエンドに必要な言語を使用できるようにするプラグインを開発しています。また、情報を取得するための新しいスクリプトを作成すると、他のユーザーが実装するのが少し難しくなります。たとえば、aspx、java、codeigniterなどを使用するユーザーは、プラグインの大部分を書き直す必要があります。

あなたはそれをここで完全に読むことができます。

サーバーの検証は必須です。あなたはそれを決して無視することはできません。これは私がSOとPHPのマニュアルを読んで学んだことです。

于 2010-08-22T11:20:12.497 に答える