2012-05-08 15 views
0

私はこの問題がかなり一般的だと考えています。ユーザーが自分のファイルをサーバーにアップロードできるようにしたいと考えています。セキュリティ上の問題を防ぐための一般的な方法の1つは、ファイル拡張子をチェックして実行可能ファイルを防止することです。Apacheでファイルをアップロードするセキュリティ

しかし、それはかなり無邪気です、私は信じています。たとえば、ユーザーはphpテキストファイルをアップロードして、単にphpinfo()を出力することができます。 PHPの問題だけでなく、サーバーが自動的に実行したいファイルであれば問題ありません。

APACHEを設定する方法はありますが、安全なディレクトリ(静的にアップロードされたファイルを保存する)があり、このフォルダ内のファイルは実行可能でないほど安全です(ユーザーがそのようなファイルを要求すると、サーバーに何の影響も与えずにブラウザーに直接送信されます)。

+1

このリンク[http://www.acunetix.com/websitesecurity/upload-forms-threat.htm](http://www.acunetix.com/websitesecurity/upload-forms-threat.htm)かもしれないヘルプ –

+1

非常に便利なリンク。しかし、提案された解決策では不十分です。 – hiro

答えて

3

ファイル拡張子のチェックは、USELESS技術です。誰かがアップロードを行う前に

ren nastyvirus.exe cutekittens.jpg 

をやって考えてみましょう。

アップロードの最も安全なことは、サイトのドキュメントルートの外側のどこかにドロップすることです。そのため、直接届くURLを指定することは文字通り不可能です。唯一のアクセスはあなたが制御するスクリプトを介して行われます。

+0

いいえ。実際にEXEであってもJPGフ​​ァイルは実行されないためです。 – SLaks

+0

サーバがPHPスクリプトであるかのように.txtファイルを実行しません。 –

+0

@MarcBこれは正しくありません。 –

0

アップロードされたファイルをhtdocsパスからディレクトリに保存するだけで十分です。

+0

ファイルをユーザーに配信したくない場合はどういう意味ですか?それを元に戻す前に、サーバーコードがファイルを最初に読み取ることを意味しますか? – hiro

0

おそらく最初の場所は悪い考えです。おそらく、自分のドメイン名から配信できるJavascriptなどのものをアップロードでき、ドキュメントオブジェクトモデル内で何かできるようになるからです。

実行可能なウイルスは、多くの場合、自身を「kitten.jpg.exe」と名付けます。デフォルトでWindowsはファイル名の最後の部分を隠すので、すぐにダウンロードして実行する「kitten.jpg」と表示されます。

GoogleとYahooは、この権利を得るために多大な時間と労力を費やしています.Sujを簡単に許可していません。それをしないでください。特に明示的に信頼していないものは信用できません。

あなたが本当にそれをしたい場合は - 、それは盲目的に誰がチェックすることなく、彼らが望むものをアップロードできるようにするために、まだかなり悪いアイデアだ - そして、あなたは、少なくともアパッチ

<IfModule mod_php5.c> 
    php_value include_path ".:/usr/local/lib/php" 
    php_admin_flag engine on 
</IfModule> 
1
内で実行されることからPHPをオフにすることができます

セキュリティ上の問題は通常、アップロードからではなく、ホスティングから発生します。任意のクッキーやメインドメインに関連する他の資格情報は、HTML /フラッシュ/などをアップロードするために漏洩しないように

ファイルをホストする場合、あなたは

  1. する必要が投獄されたドメインを務めます。ファイル。また、jailedドメインは、JavaScriptがdocument.domain = ...を介して特権ドメインに設定できないドメインでなければなりません。
  2. コンテンツを調べ、ホワイトリストに登録されていないものを拒否します。
  3. コンテンツを正規化します。例えば、ほとんどのイメージ・デコーダはブラウザのイメージ・デコーダほど安全ではないため、イメージを使用してマシンを攻撃することができます。コンテンツを正規化することで、奇妙な構造をより一般的で、より優れたものに置き換えることで、バイナリデータとテキストデータの両方の攻撃対象を減らすことができます。
  4. あなたが許可している適切なMIMEタイプとエンコーディングヘッダーでそれを提供します - apacheがMIMEタイプを推測するgrabbagアプローチを使用しないでください。これは、gifarまたはgif/JSまたはlcamtuf's HTML/JPEG polyglot
  5. のような多言語攻撃を防止するために必要です。他の部分からコンテンツを遠ざけてください。それを信じるかどうか、まだsudo bash人がいて、PATHに.を入れてください。この動作でtrojansが有効になります。誰かのPATH、PYTHONPATHなどにあってはいけません。理想的には、独自の役割アカウントを持つ1つのApacheインスタンスがあり、読み取りアクセス権を持ち、ほかのアカウントには読み取りアクセス権がありません。あなたのメインのApacheのインスタンスがこれらのファイルを書き込むことはできますが、読み込めない場合はアップロードできますが、それらを提供することはできません。
  6. アップロード者にファイル名を制御させないでください。上のトロイの木馬を参照してください。
関連する問題