0

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

しかし、それはかなり無実だと思います。たとえば、ユーザーは phpinfo() を単純に出力できるように、php テキスト ファイルをアップロードできます。PHP だけの問題ではなく、サーバーが自動的に実行したい任意のファイルである可能性があります。

したがって、このフォルダー内のファイルが実行可能にならないほど安全であるように (静的にアップロードされたファイルを格納するための) 1 つの安全なディレクトリが存在するように APACHE を構成する方法はありますか (つまり、ユーザーがそのようなファイルを要求すると、それらは直接サーバーに副作用のないブラウザー)?

4

4 に答える 4

3

ファイル拡張子のチェックは役に立たないテクニックです。誰かがやっていると考えてください

ren nastyvirus.exe cutekittens.jpg

アップロードを行う前に。

アップロードの最も安全な方法は、サイトのドキュメント ルートの外側にアップロードすることです。これにより、アップロードに直接アクセスできる URL を指定することは文字通り不可能になります。唯一のアクセスは、あなたが制御するスクリプト経由です。

于 2012-05-08T15:26:39.650 に答える
1

アップロードしたファイルを htdocs パスのディレクトリに保存するには、これで十分です。

于 2012-05-08T15:27:20.657 に答える
1

セキュリティの問題は通常、アップロードではなく、ホスティングに起因します。

ファイルをホストするときは、

  1. メイン ドメインに関連付けられている Cookie やその他の資格情報がアップロードされた HTML/Flash などに漏れないように、投獄されたドメインでサービスを提供します。ファイル。document.domain = ...また、監禁されたドメインは、JavaScript が特権ドメインになるように設定できないドメインでなければなりません。
  2. コンテンツを調べて、ホワイトリストに登録されていないタイプのものを拒否します。
  3. コンテンツを正規化します。たとえば、ほとんどの画像デコーダーはブラウザーの画像デコーダーほど安全ではないため、画像を使用してマシンを攻撃することができます。コンテンツを正規化すると、風変わりな構造をより一般的でよりよくテストされた構造に置き換えることで、バイナリ データとテキスト データの両方の攻撃対象領域が減少します。
  4. 許可する適切な MIME タイプとエンコード ヘッダーを使用してサービスを提供します。Apache が MIME タイプを推測するために行うグラブバッグ アプローチを使用しないでください。これは、gifargif/JSlcamt​​uf の HTML/JPEG 多言語などの多言語攻撃を防ぐために必要です。
  5. コンテンツを他のものから遠ざけてください。信じられないかもしれませんが、今でもPATH を設定する人がいてsudo bash、この動作によってトロイの木馬が有効になります。誰の PATH や PYTHONPATH などにも配置しないでください。理想的には、読み取りアクセス権を持つ独自のロール アカウントを持つ 1 つの apache インスタンスがあり、他のアカウントには読み取りアクセス権がありません。メインの apache インスタンスがこれらのファイルを書き込むことはできても読み取ることができない場合、それらをアップロードすることはできますが、それらを提供することはできません。.
  6. アップローダにファイル名を制御させないでください。上記のトロイの木馬を参照してください。
于 2012-05-08T15:31:23.080 に答える
0

そもそも悪い考えかもしれません。独自のドメイン名から提供できる Javascript などをアップロードできるため、ドキュメント オブジェクト モデル内で何でも実行できるからです。

実行可能なウイルスは、自分自身をkitten.jpg.exeと名付けることがよくあります。また、Windowsはデフォルトでファイル名の最後の部分を隠しているため、「kitten.jpg」として表示され、人々はすぐにダウンロードしてクリックして実行します.

Google と Yahoo は、これを正しく行うために多大な時間と労力を費やしています。特に、明示的に信頼していないものは信頼しないでください。

あなたが本当にそれをやりたいのなら - そして、チェックせずに何でも好きなものをアップロードすることをやみくもに許可するのはまだかなり悪い考えです - 少なくとも Apache 内での PHP の実行をオフにすることができます。

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>
于 2012-05-08T15:29:51.453 に答える