2009-09-29 13 views
5

私は疑問に思っていましたが、まだ解明されていませんでした。Rails - h()を使用してHTMLをエスケープし、特定のタグを除外します

はのは、私は次を含む文字列があるとしましょう:

my_string = "こんにちは、私は文字列ています。" (プレビューウィンドウでは、実際には "強い"タグと "i"タグを表示する代わりに、BOLDとITALICで書式設定しています)

ここでは、html_escapeまたはh())メソッド/関数。 だから私は、ユーザーがJavaScriptやスタイルシートを挿入しないようにしたいと思っていますが、 "Hello"という単語を太字で、 "string"という単語をイタリックで表示したいと思います。

私が見る限り、h()メソッドはテキストそのもの以外の追加の引数をとりません。

特定のhtmlタグのみをエスケープする方法はありますか?白か黒のリストのタグのように?私が言うことをしようとしているものの、これがどのように見えるかの

例は、次のようになります。

時間(my_string、:を除く=> [:強い、:i])と#=>そう基本的に、エスケープすべて、しかし、 "強い"と "私"のタグだけを残して、これらをエスケープしないでください。

これを達成する方法や方法はありますか?

ありがとうございます!

答えて

3

特定のタグを除外することは、実際にはかなり難しい問題です。特にscriptタグをvery many different waysに挿入することができます。それらを検出するのは非常に手間がかかります。

可能な限り、これを自分で実装しないでください。

2

実際にHTMLを許可する代わりに、RedClothまたはBlueClothを使用したことがありますか?これらのメソッドはかなりのフォーマットオプションを提供し、あなたのための解析を管理します。

編集1:this message RedClothを使用してHTMLを削除する方法をブラウズすると、何らかの問題が発生する可能性があります。また、this pageは、バージョン2.0.5でHTMLを削除する方法を示しています。新しい情報は見つからないようですが、forum postが脆弱性を発見しました。うまくいけば、それは2006年から修正されているはずですが、RedClothのマニュアルやドキュメントが見つからないようです...

+0

RedClothは素晴らしいですが、HTMLタグを削除することはありません。 を挿入できます。エスケープされません。私は、BlueClothがHTMLをどのように取り除くかについてはわかりません。私はこれまでこれを使っていません。 – zgchurch

2

white listプラグインまたはmodifiedバージョンを使用してください。それは大変です! あなたは一見がSanitize(同様に、それを試みたことはありません)、よく見えます。

1

私は、HTMLタグを削除するために2回サニタイズします。それは本当にうまくいく。これはデフォルトですべてを削除し、許可するタグのホワイトリストを指定することができます。

0

XSS攻撃を防止することは重大なビジネスであり、hrntの方法に従ってください。おそらく、ブラウザーの不明瞭さのために起こりうる悪用よりも桁違いに悪用される可能性があると考えてください。html_escapeは物事をかなり緊密に固定しますが、私はこのタイプのものに自家製のものを使うのは間違いだと思います。あらゆる種類の堅牢性保証のために、より多くの眼球とピアレビューが必要なだけです。

私は現在、sanitizeXssTerminateを評価中です。私はxss_terminateのアプローチが堅牢であることを好みます。モデルレベルでのスクラビングは、すべてのユーザー入力がActiveRecordを経由する通常のRailsアプリケーションではかなり信頼できますが、Nokogiri、特にLoofahは、少しだけより積極的で、より柔軟でRuby-ishです。私はちょうどActsAsTextiledのフォークを実装しました

更新は、すべてのいずれかを必要とせずに、安全性やRedCloth出力の整形式を保証するために(最近の方法で鋸山使用するように更新されている)Santizeを使用するActsAsSanitiledと呼ばれますあなたのテンプレートのヘルパー。

関連する問題