2012-03-29 10 views
4

サイトユーザーがリモートの「ホットリンク」画像を提供する必要があります。リモートの「ホットリンク」画像を安全に処理する

1)PHPのパス情報を使用して提供パスを解析し、適切にエスケープされている部品(ホスト、ファイル名、拡張子)へのパスを破る:

私はので、ここで現在の手順ですが、これはちょっと危険です実現します。

2)How can one check to see if a remote file exists using PHP?に記載されているようにイメージヘッダーのカール要求を実行し、有効なpngまたはjpg MIMEタイプとHTTP 200戻りコードがあることを確認します。

3)最後に、複数の画像経路データを格納)

4(私はGIFファイル等を受け付けていないよ)上記パス情報からファイル名と拡張子()は、有効なPNGまたはJPGファイルであることを確認DB内の列(データをエスケープする)

何か不足していますか?まだ潜んでいる危険はありますか?私はおそらく、画像がまだそこに残っていることを確認するために、また画像であることを確認するために、表示終了時にカール機能を再実行する必要があると考えていました。

ありがとうございました。

+0

さらにスマートにしたい場合は、実際のデータを取得してからPHPでイメージオブジェクトを作成してみてください。しかし、この時点で何をしても、誰かがリモートサーバーに正しいイメージを置くことを妨げることはありません。あなたにURLを提供し、そのイメージを悪質なものに変更します。 –

+0

@AleksG - ええ、それは問題です。なぜ私はそれを保存するだけでなくディスプレイ上でカールするのが最善だろうと思っています。しかし、これはリモートイメージを許可する目的をほとんど奪っています(一時的であっても、帯域幅ヒットとストレージヒットが発生するため) – julio

+0

なぜこれをやりたいのですか?パスが監査されない場合、どのようなリスクを恐れていますか? – Gumbo

答えて

1

ロバのポルノではないことを確認してください。

...私が考えることができるのは、画面に画像を出力するスクリプト/ exe/bin(PHP/GDと思う)が、同時にバックグラウンドで何か他のことをすることです。

キャプチャは、たとえば画像を出力しますが、ちょうど<img src="/img/captcha.php" ... />を呼び出すだけで、セッション(「裏返し」)でセッションに「正解」を保存することができます。

<img src="/img/captcha.jpg" ... />と同じPHPスクリプトを呼び出すためにmod_rewriteを使用することはできません。 HTTPヘッダーはMIMEタイプを "image/jpg"として応答が200であると報告するように設定することができます。

あなたはできる限りのことをしていると思います。 GDライブラリを使用して、ユーザーが提出したイメージを読み込み、リモートリンクではなくシステム上にイメージ(イメージとして)のコピーを作成することもできます。

+0

lol--ポルノは私の心配の中で最も少なくありません。それが単に攻撃的なイメージであれば、それは対処することができます。私はXSS、マルウェアなどにもっと関心を持っています。CGIタイプの設定です。 – julio