私のサイト全体で、ユーザーはコメントを残すことができます。太字、斜体、リンク タグなどの基本的な HTML をコメントに挿入できるようにしてほしい。残念ながら、Rails はユーザーが生成したすべての HTML を自動的にエスケープします。
.html_safe を呼び出すことでこの動作を回避できますが、そうするとサイトが XSS に対して脆弱なままになります。太字、斜体、リンクのタグを許可し、他のコンテンツをエスケープする方法はありますか?
私のサイト全体で、ユーザーはコメントを残すことができます。太字、斜体、リンク タグなどの基本的な HTML をコメントに挿入できるようにしてほしい。残念ながら、Rails はユーザーが生成したすべての HTML を自動的にエスケープします。
.html_safe を呼び出すことでこの動作を回避できますが、そうするとサイトが XSS に対して脆弱なままになります。太字、斜体、リンクのタグを許可し、他のコンテンツをエスケープする方法はありますか?
マークダウンのようなものを使用して、代わりの (直接 html ではなく) 手段で書式設定をサポートできます。Markdown は、Redcarpet、markitup などを含む多くの rubygem を介してサポートできます。Markdown は、太字/斜体など (bbcode など) の代替構文を作成します。
https://github.com/jwigal/markitup_rails
Loofah のようなホワイトリスト サニタイザーを使用することもできます - https://github.com/flavorjones/loofah/。Loofah は、必要な html タグをサポートするハイエンド ソリューションです。ユーザーが HTML を送信すると、Loofah がそれを読み取り、nokogiri を使用して HTML ノード ツリーを構築します。次に、ツリーを走査して、すべてのタグ ノードがホワイトリストに登録された html タグを使用していることを確認します。これにより、<a>、<img>、<table> など、必要なタグの任意の組み合わせを許可できます。高度な設定が可能です。
Loofah は (設定に応じて) 属性もチェックし、onclick="" のような禁止された属性に何も隠されていないようにします。