3

私はSanitizegemを使用して、XSS攻撃に使用される可能性のあるHTMLコードを禁止しています。副作用として、HTMLもクリーンアップされます。欠落している終了タグが追加されます。通常はこれで問題ありませんが、多くの場合、コンテンツのフォーマットが変更されます。最終的には、HTMLを完全にクリーンアップしたいのですが、XSSからサイトを保護する一環としてこれを行う必要はありません。

それで、欠落しているエンドタグ(例えば</font>)は潜在的なXSSエクスプロイトですか?そうでない場合、SanitizerがHTMLもクリーンアップしようとするのを防ぐにはどうすればよいですか?

4

2 に答える 2

2

SanitizeNokogiriの上に構築されています:

Sanitizeは、壊れやすい正規表現の束ではなく、本格的なHTMLパーサーであるNokogiriに基づいているため、不正な形式または悪意のある形式のHTMLを問題なく処理し、常に有効なHTMLまたはXHTMLを出力します。

強調鉱山。したがって、答えは「いいえ」です。壊れたHTMLを修正する必要があります。

Nokogiriは、HTMLを修正して、正しく解釈され、DOMを構築できるようにする必要があります。次に、SanitizeはNokogiriが構築するDOMを変更し、最後に、変更されたDOMをシリアル化して、保存するHTMLを取得します。

Sanitizeソースをスキャンすると、すべてが通過し、Nokogiriまたはメソッドclean!が使用されることがわかります。to_htmlto_xhtml

if @config[:output] == :xhtml
  output_method = fragment.method(:to_xhtml)
  output_method_params[:save_with] = Nokogiri::XML::Node::SaveOptions::AS_XHTML
elsif @config[:output] == :html
  output_method = fragment.method(:to_html)
else
  raise Error, "unsupported output format: #{@config[:output]}"
end

result = output_method.call(output_method_params)

したがって、不良部分が削除されたHTMLだけでなく、NokogiriのバージョンのHTMLを取得できます。

于 2011-08-15T20:30:30.400 に答える
0

おそらく、ドキュメントに示されているようにサニタイズを構成できます。

デフォルトでは、SanitizeはすべてのHTMLを削除します。組み込みの構成の1つを使用して、特定の属性と要素を許可するようにSanitizeに指示できます。

Sanitize.clean(html, Sanitize::Config::RESTRICTED)
# => '<b>foo</b>'

Sanitize.clean(html, Sanitize::Config::BASIC)
# => '<b><a href="http://foo.com/" rel="nofollow">foo</a></b>'

Sanitize.clean(html, Sanitize::Config::RELAXED)
# => '<b><a href="http://foo.com/">foo</a></b><img

src = "http://foo.com/bar.jpg" /> '

または、許可される内容をさらに制御したい場合は、独自のカスタム構成を提供できます。

Sanitize.clean(html, :elements => ['a', 'span'],
    :attributes => {'a' => ['href', 'title'], 'span' =>

['class']}、:protocols => {'a' => {'href' => ['http'、'https'、'mailto']}})

wonko.comから引用

于 2011-08-15T20:19:35.710 に答える