2016-07-11 11 views
0

この質問は、公開されているチャットボードに掲載されている外部Webページへのリンクから切り取ったOpen Graph画像をサイトが盗み、保存して埋め込む際に、Open Graphから安全に画像をアップロードして配信する

私は、ユーザーが外部ページへのリンクを投稿できるチャットフォーラムアプリケーション(Apache/PHP/WordPress)を持っています。オープングラフの画像、タイトル、説明を安全に保存して埋めたいあなたがリンクを投稿するとします。

FacebookはOpen Graphデータをスクラップすることでこれを行い、おそらく永続性とパフォーマンスのために、自分のサーバーにローカルバージョンのイメージを保存します。同じようにOGイメージをローカルに保存したいと思います。これにより、サイズを変更して、それをスムージングし、将来保存することができます。

私はGitHubでOpen Graph Protocol helper for PHPを使用して、素晴らしい作業をしています。

しかし、私の懸念の例は、GitHubのソース自体に例で示されている - それは腐ったトマトからページを引っ張ると、OGのイメージは、この形式になっています。

https://resizing.flixster.com/Er0hIAp55dpRWn5HQTrPc1f2hZE=/740x290/v1.bjs5NzU2NjtqOzE3MDExOzEyMDA7MTEyMDs4NDA

拡張子はありませんこのURLには拡張子があってもそれが間違っている可能性があることを知っています。画像をアップロードして配信すると、ユーザーに公開する可能性のある悪質なコードが画像に存在する可能性があります。

私の現在のセキュリティアプローチはが含まれています(?)

  • 使用PHPのexif_imagetype()確実にファイルの種類を確認してください。画像がPNG、JPG、GIFなどと一致しない場合は、拒否してください。

  • は.htaccessを持つアップロードディレクトリをロックダウンし、明示的にWebルートの外にスクリプト実行

    AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi 
    Options -ExecCGI 
    
  • ストア画像を禁止し、それを提供するために、PHPの関数(例えばimagecreatefromjpeg)を使用します。

  • が私の目標(引っかき画像、プロセス、店舗、埋め込む)を考えると

(例えば770 chmodの)アップロードディレクトリを制限し、私はさらに緩和することができる任意のセキュリティホールをしないのですか?この方法で提供されるイメージが(比較的)安全であることを保証するために推奨できるライブラリやその他の機能はありますか?

+0

_ _ https://kb.yoast.com/kb/getting-open-graph-for-your-articles/「の画像は、私は私のユーザーは、私がアップロードする場合は公開して画像を果たす可能性があり、悪意のあるコード抱く可能性」 - Iをかなり疑問けれどもリサイズ生き残ることを。 (おそらく、EXIFのメタデータでは、それをきれいにする/除きたいかもしれません。) – CBroe

+0

@CBroe優れた解決策ですが、[このディスカッション](https://www.idontplaydarts.com/2012/06/encoding-web-shells -in-png-idat-chunks /)は、サイズ変更を生き残ったPNGについて私にsnakebitを与えます。エクスプロイトがあまりにも遠いと思っていますか、それとも文書化されているので、予測可能なベクトルですか? –

答えて

0

WordPressを使用している場合は、Yoast SEO pluginに組み込みのopengraph機能があります。

参照してください:

+0

Yoastは自分の記事用にOpen Graphを作成しますが、これは便利ですが、ここでは具体的には、他のページからローカルイメージをスクラップして保存することに心配しています。私はYoastでそれに関連する機能が欠けていましたか? –

+0

私はあなたが上で与えた腐ったトマトのURLからそのイメージフォーマットが何かを推測することはできません。このURL http://stackoverflow.com/questions/12014196/get-facebook-meta-tags-with-phpを参照してください。したがって、og:imageを取得するために動的に投稿URLを渡す必要があり、それを保存することができます。エラーがある場合は、このlibxml_use_internal_errors(true)を追加してください。 file_get_contents()の上にあります。今すぐあなたのサーバー上にイメージを格納し、それを提供することを願っています。 – Palanivelrajan

関連する問題