2009-05-25 3 views

答えて

2

は、アプリケーション/ PDFファイルであることが、PDFのMIMEタイプ使用していませんしたがって、それだけでなければなりません:

unless @file.content_type =~ /^application\/pdf$/ 
3

もちろん、コードはひどく安全ではありません。これは、MIMEタイプを正しく取得するためにファイルを送信するブラウザに依存しており、誰もハッキングされた要求を送信していないことを前提としています。

ファイルを開いて解析しない限り、特定の形式に対して有効なファイルが何であるか知っていれば、アップロードされたファイルが特定の種類であることを確認できません。あなたはしているつもりました

+0

これは正しいです。もちろん、MIMEタイプに基づいてファイルを拒否することはできますが、最終的には安全なパーサーを使用してエラーを処理する必要があります。 –

2

  1. がアップロードを受け入れます。
  2. 一部のライブラリでPDFを試してみてください。
  3. ファイルを開くことができない場合は、拒否します。

ブラウザが提供するMIMEタイプに依存することはできません。 これを行う方法は、ファイルを確認することです。マーカーなどで形式を確認できますが、最も簡単で最も堅牢な方法は、適切なライブラリ呼び出しで開くことです。

+0

MIMEタイプに依存できないのはなぜですか? – alamodey

+0

私は、任意のWebライブラリを使用して、ウイルスが入った.exeや.msi(または非MSの同等のもの)をアップロードし、アプリケーション/ pdfと主張することができます。 Webブラウザによっては、後でダウンロードすると素朴なユーザーが害を受ける可能性があります。 –