2012-01-09 1 views
2

多くの記事では、ブラックリストの代わりに拡張子のホワイトリストを準備する方が良いとファイルアップロードのセキュリティについて言われています。しかし、このメソッドは二重拡張ファイルに何らかの問題があるようです。例えば、私は 'pdf'、 'doc'、 'docx'のようなホワイトリストを持っていますが、この白いリストはapple.php.docまたはapple.doc.phpに対してtrueを返します。倍増は拡張チェックルールをバイパスします

安全な拡張機能を作成するにはどうすればよいですか?

+3

「apple.php.doc」の何が問題なのですか? – zerkms

+1

このような「ダブル・エクステンション」はどこに問題がありますか?私はもっ​​と多くのウィンドウを使用しませんが、 '.doc'がosやプログラムにとって重要な意味を持つ前に' .php'(あるいは '.exe')さえ想像しません。 (明らかにapple.doc.phpは問題を起こす可能性があります) –

+0

最後の拡張子を検証する必要がありますか? –

答えて

0

あなたはこの理由を理解しようとする必要があり、あなたの質問はどんな意味がありません。

特定の拡張子を許可しない理由は、(Apacheのような)一部のウェブサーバーが、それらのファイルに基づいたサーバーの方法を決定するからです。もちろん、公然と提供しているディレクトリ内のファイルアップロードされたファイルがそこに行く時間は、サーバーが.phpのように実行する拡張機能を許可すると、Web上のランダムな人があなたのサイトにコードを挿入できるようになります。

拡張子がまだ.docであり、サーバーがそのように扱うため、.php.docでは発生しません。

ディレクトリ内の特定のファイルを実行しないようにWebサーバーを設定することはできますが、デフォルトではなく、実際にはほとんどそうではありません。

+0

ここでダブル拡張情報を確認してください:www.acunetix.com/websitesecurity/ upload-forms-threat/ AddHandlerを追加するphp5-script .docをhttpd.confに、file.php.docを実行する – carlos

3

使用このコードを拡張は良好であるかどうかを確認する:

$valid_exts = array('doc', 'pdf'); 
if (in_array(pathinfo($filename, PATHINFO_EXTENSION), $valid_exts)) { 
    // everything is fine 
} else { 
    // not fine 
} 
関連する問題