2011-10-18 3 views
0

私のアプリでは、youtubeなどの人気サイトの動画を埋め込むことができます。埋め込みコードを文字列として受け入れ、データベースに保存するtext_area_fieldがあります。私は、埋め込みコードの特定の部分をフィルタ処理するために、正規表現でいくつかの基本的な検証を行っています。ユーチューブからのサンプル埋め込みコード:ビデオ埋め込みリンクをテキスト形式で保存するときはhtml_safeをおすすめします

<iframe width="560" height="315" src="http://www.youtube.com/embed/INx7B2yyD0g" frameborder="0" allowfullscreen></iframe> 

私は戻って、ユーザにビデオを表示するとき、私は私の見解でこれを行う

<% = user.content.html_safe%>

何私はだろう
1.ユーザーが送信したデータに対してhtml_safeを呼び出すことは安全です。
2.埋め込みコードをストリング型の良いプラクティスとして保存しています
3.このような攻撃に
感謝

答えて

0

を防ぐために、異なる行うことができますどのような悪いスクリプト
4を提出するユーザーのための任意の抜け穴があるあなたは、カスタムホワイトリストにsanitize gemようなものを使用してのルートを行くことができます。しかし、それは厄介になるかもしれない<iframes>のようなものを受け入れなければならないので。

nokogiriのようなHTMLパーサーを使用して特定の必要な値を解析し、各サービスごとに独自のテンプレートに挿入するのが最も安全な方法です。あなたの例埋め込みコードについては

:それはあなたが別のパーサとテンプレートを持たなければならないと思いますので、間違いなく、より多くの仕事だ

{:with => 560, :height => 315, :youtube_id => 'INx7B2yyD0g'} 

<iframe width="560" height="315" src="http://www.youtube.com/embed/INx7B2yyD0g" frameborder="0" allowfullscreen></iframe> 

はあなたのような何かをつかむために必要なだけだろうサポートしているそれぞれの異なるビデオサービス。しかし、それは私が悪意のあるHTMLの注入を避けるために考えることができる最も安全な方法です。

+0

ありがとう、私はノコギリのラインに沿って考えていたが、別の方法があるかもしれないと思った。 – Hishalv

関連する問題