たとえば、StackExchange は HTML のサブセットをホワイトリストに登録します: https://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites
ユーザー入力が安全であることを確認するために、コントローラーでどのようにそれを行うことができますか?
たとえば、StackExchange は HTML のサブセットをホワイトリストに登録します: https://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites
ユーザー入力が安全であることを確認するために、コントローラーでどのようにそれを行うことができますか?
このアプローチは StackExchange と同じではありませんが、AntiXSS 4.x ライブラリは、入力をサニタイズして「安全な」HTML を許可する簡単な方法であることがわかりました。
http://www.microsoft.com/en-us/download/details.aspx?id=28589ここからバージョンをダウンロードできますが、便利な DOCX ファイルにリンクしています。私が推奨する方法は、NuGet パッケージ マネージャーを使用して最新の AntiXSS パッケージを取得することです。
4.x AntiXss ライブラリにある HtmlSanitizationLibrary アセンブリを使用できます。GetSafeHtml() は、Microsoft.Security.Application.Sanitizer の下の HtmlSanitizationLibrary にあることに注意してください。
content = Sanitizer.GetSafeHtml(userInput);
これは、データベースに保存する前に行うことができます。利点は、悪意のあるコンテンツをすぐに削除し、出力時に心配する必要がないことです。欠点は、既存のデータベース コンテンツを処理しないことであり、データベースを更新するたびにこれを適用する必要があります。
別の方法は、コンテンツを出力するたびにこの方法を使用することです。
好ましいアプローチが何であるかを知りたいです。
ASP.NET HttpUtility.Htmlencode() がそれを実現します。ただし、危険なスクリプトをブロックしたい場合は、まずデータベースに挿入しないでください。まず、データベースに挿入する前に HTML テキストを消去します。
私はあなたのためにそれを行うクラスを見つけました: http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/
これは正常に機能し、新しいタグと属性を Sanitizer のカスタム ホワイトリストに追加できます。
注: Microsoft Sanitizer と Anti-XSS Library は役に立ちませんでした。あなたもそれらを試すことができるかもしれません。
HTML入力のサニタイズに加えて、すぐに使える多くの機能を提供するJSoupパーサーを試すことができます。JSoupの詳細については、http://jsoup.org/ にアクセスして、そこからバイナリをダウンロードしてください。HTML ツリーをトラバースして必要な要素を取得するための DOM メソッドを提供します。
XSS 攻撃を防ぐために HTML 生成コードをサニタイズすることは良い方法ですが、HTML 入力をサニタイズして XSS アタッチを回避するためにパーサーを使用しないことを強くお勧めします。HTML ツリーが非常に大きい場合、応答時間は多岐にわたります。HTML ツリーをサニタイズする代わりに、FORM に入力するユーザーが適切であり、期待値に従っていることを確認する必要があります。
XSS 攻撃を回避する方法の詳細については、 www.owasp.orgにアクセスしてください。このサイトでは、HTML ツリーが XSS 攻撃を受けないようにするためのチート シートを提供しています。