Paperclip を使用し、validates_attachment_content_type を使用してコンテンツ タイプを検証するフォト ギャラリーを作成しました。
アプリケーションは、Passenger との共有ホストで実行されます。
検証をバイパスして、public/pictures ディレクトリから悪意のあるスクリプトを実行することは可能ですか? もしそうなら、悪意のあるスクリプトが実行されたり、アップロードされたりするのを避けるためにできることはありますか?
Paperclip を使用し、validates_attachment_content_type を使用してコンテンツ タイプを検証するフォト ギャラリーを作成しました。
アプリケーションは、Passenger との共有ホストで実行されます。
検証をバイパスして、public/pictures ディレクトリから悪意のあるスクリプトを実行することは可能ですか? もしそうなら、悪意のあるスクリプトが実行されたり、アップロードされたりするのを避けるためにできることはありますか?
検証をバイパスして、public/pictures ディレクトリから悪意のあるスクリプトを実行することは可能ですか?
はい。スクリプト インジェクションを使用した HTML も含む、完全に有効なレンダリング可能な画像ファイルを作成できます。偽のコンテンツ スニッフィングに感謝します、IE、あなたはすべてを台無しにしました。
概要については、http://webblaze.cs.berkeley.edu/2009/content-sniffing/を参照してください。
もしそうなら、悪意のあるスクリプトが実行されたり、アップロードされたりするのを避けるためにできることはありますか?
あまり。理論的には、HTML タグの最初の 256 バイトをチェックできますが、その場合、ブラウザーがコンテンツをスニッフィングする対象の正確な詳細を知る必要があり、その包括的で最新の状態を維持することは手始めにできません。
画像を処理して自分で再保存している場合は、保護できます。それ以外の場合は、次のいずれかまたは両方を実行します。
別のホスト名からユーザーがアップロードしたファイルのみを提供するため、サイトに XSS に挿入されたスクリプトを許可する Cookie/認証の詳細にアクセスできません。(ただし、一般的な JavaScript/プラグインのエクスプロイトのような XSS 以外の攻撃に注意してください)
「Content-Disposition: attachment」ヘッダーを含むサーバー側スクリプトを介してユーザーがアップロードしたファイルを提供するため、ブラウザはページをインラインで表示しようとしません。(ただし、Flash ファイルを無視する古いバージョンの Flash に注意してください) このアプローチは、ユーザーが送信したファイル名でサーバーのファイルシステムにファイルを保存する必要がないことも意味します。正しいファイル名の検証作業。