5

今、私はいくつかのばかげた状況に遭遇しました。ユーザーがテキスタイルを使用できるようにしたいのですが、エントリの周りで有効な HTML をいじってはいけません。そのため、何らかの方法で HTML をエスケープする必要があります。

  • html_escape(textilize("</body>Foo"))繊維が壊れる

  • textilize(html_escape("</body>Foo"))"Linkname":http://www.wheretogo.com/動作しますが、引用符が に変換さ&quot;れ、テキスタイルによって検出されなくなるため、リンクなどのさまざまなテキスタイル機能 ( のように記述) が壊れます。

  • sanitizeより良い仕事をしません。

その上で何か提案はありますか?この問題にはTidyを使用したくありません。前もって感謝します。

4

3 に答える 3

7

同じ問題が発生した場合:RedClothジェムを使用している場合は、(ヘルパーの1つで)独自のメソッドを定義するだけです。

def safe_textilize(s)
  if s && s.respond_to?(:to_s)
    doc = RedCloth.new(s.to_s)
    doc.filter_html = true
    doc.to_html
  終わり
終わり

ドキュメントからの抜粋:

セキュリティ制限を設定するためのアクセサ。

これは、ユーザーがHTMLを悪用したくない公共の場所(Wikiなど)でのフォーマットにRedClothを使用している場合に便利です。

が設定されている場合filter_html、テキスタイルプロセッサによって作成されなかったHTMLはエスケープされます。または、sanitize_htmlが設定されている場合、HTMLはテキスタイルプロセッサを通過できますが、許可されていないタグと属性は削除されます。

于 2009-02-04T19:46:29.187 に答える
2

これは私にとってはうまくいき、 onmouse... ハンドラーを pre および code ブロックに含めて試したすべての XSS 攻撃を防ぎます。

<%= RedCloth.new( sanitize( @comment.body ), [:filter_html, :filter_styles, :filter_classes, :filter_ids] ).to_html -%>

最初のサニタイズにより、マウスオーバーを含む多くの潜在的な XSS エクスプロイトが削除されます。

私が知る限り、:filter_html は code と pre を除いてほとんどの html タグをエスケープします。ユーザーにクラス、ID、スタイルを適用させたくないので、他のフィルターがあります。

あなたの例でコメントページをテストしました

"</body>Foo" 

不正なボディタグを完全に削除しました

Redcloth バージョン 4.2.3 と Rails バージョン 2.3.5 を使用しています

于 2010-09-09T14:43:56.277 に答える
0

テキスタイルは単にあなたが望むものをサポートしていないようです.

慎重に制御された HTML のサブセットのみを許可したいのですが、テキスタイルは任意の HTML を許可するように設計されています。この状況では、テキスタイルをまったく使用できないと思います (そのような制限がサポートされていない限り)。

必要なのは、おそらく「安全な」マークアップのみを許可する特別な「制限付き」バージョンのテキスタイルです (ただし、それを定義するのは難しいかもしれません)。ただし、それが存在するかどうかはわかりません。

可能なマークアップを制限できるBBCodeを見たことがあるかもしれません。

于 2009-02-01T23:33:16.873 に答える