2009-03-18 18 views
0

ファイルを当社のサーバーにアップロードすることができる新しいサイトにファイルアップロードモジュールを開発しようとしています。安全なPHPファイルのアップロード

<Files *.*> 
ForceType applicaton/octet-stream 
</Files> 

これは、ブラウザが(少なくとも、FFとSafariで)窓をダウンロードするトリガーが、それは次のとおりです。アップロードされたファイルは、すなわちAの.phpファイルを実行してからユーザーを防ぐために、次の.htaccessがいる、/filesにアップロードされますこのメソッドを使用してファイルがサーバー上で実行されないと想定するのは安全ですか?そうでない場合は、そのようなソリューションをどのように実装しますか?

答えて

2

ファイルがこの方法でサーバー上で実行されないと想定するのは安全ですか?

種類は異なりますが、設定には他にどのような指示があるかによって異なります。 PHPファイルを実行できるように他のルールが設定されている可能性があります。 PHPを有効にする唯一の方法は、PHPハンドラをファイルタイプに設定することです。これにより、PHPの実行を停止する必要があります。

しかし、PHPの実行を停止することは、あなたの心配の1つに過ぎません。 HTMLやFlashなどのアクティブコンテンツを含むファイルをアップロードすると、たとえファイルタイプが無害なイメージであっても、クロスサイトスクリプティング(XSS)を通じてサイトの他のユーザーのセッションを制御できます。これについては、Stop people uploading malicious PHP files via formsを参照してください。

ダウンロードボックスを常に起動するためにContent-Dispositionを使用する 'download.php'インターフェイスと、 '1234.dat'のようなユーザー提供以外のファイル名でファイルを格納することは、はるかに安全です。

+0

Content-Disposition:添付ファイルはすべての一般的なブラウザ、Opera、Safariでダウンロードを開始しますが、Konquererはウェブサイトのコンテキストでそれを開きますので、ファイルはセッションCookieにアクセスできます。 –

3

最も安全なことは、ディレクトリへの100%Webアクセスを制限し、download.phpのようなスクリプトを使用してファイルIDを渡し、適切なファイルを取り出してブラウザに出力することだと思います。しかし、私はあなたが持っているものが働き、安全であることを確信しています。

1

は、私はあなたが実際にこれをしたいと思う:

<Directory /path/to/files> 
    SetHandler default-handler 
</Directory> 

あなたは、サーバーが具体的にそうするように言われない限り、何も実行しないようにデフォルトで設定されているため、実際に働くかもしれない持っているが、それは本当にありません何も実行されないことを保証する。 ForceTypeは、静的ファイルのコンテンツタイプを設定するだけです(わかりませんが、実行可能なスクリプトには影響しないと思われます)。

0

私はパオロに同意します、彼の方法はより安全です。誰かがあなたのPHPファイルを悪用してアップロードされたファイルを実行するという問題が常にあります。悪い例:module=../Files/exploit

1

Secondingパオロの答えに渡された誰かが、アクセスパスのうち、あなたのファイルのディレクトリを移動

include_once("/modules/".$_GET["module"].".php"); 

。 PEARのHTTP_Downloadモジュールを使用してdownload.phpスクリプトを作成し、ファイルを提供することができます。

0

セキュリティを最大限に高めるために、アップロードされたファイルを含むフォルダをno-execフラグ付きの別のパーティションからマウントする必要があります。