5

たとえば、StackExchange は HTML のサブセットをホワイトリストに登録します: https://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites

ユーザー入力が安全であることを確認するために、コントローラーでどのようにそれを行うことができますか?

4

3 に答える 3

2

このアプローチは 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);

これは、データベースに保存する前に行うことができます。利点は、悪意のあるコンテンツをすぐに削除し、出力時に心配する必要がないことです。欠点は、既存のデータベース コンテンツを処理しないことであり、データベースを更新するたびにこれを適用する必要があります。

別の方法は、コンテンツを出力するたびにこの方法を使用することです。

好ましいアプローチが何であるかを知りたいです。

于 2012-06-23T07:13:02.007 に答える
0

ASP.NET HttpUtility.Htmlencode() がそれを実現します。ただし、危険なスクリプトをブロックしたい場合は、まずデータベースに挿入しないでください。まず、データベースに挿入する前に HTML テキストを消去します。

私はあなたのためにそれを行うクラスを見つけました: http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/

これは正常に機能し、新しいタグと属性を Sanitizer のカスタム ホワイトリストに追加できます。

注: Microsoft Sanitizer と Anti-XSS Library は役に立ちませんでした。あなたもそれらを試すことができるかもしれません。

于 2012-08-07T12:11:43.083 に答える
0

HTML入力のサニタイズに加えて、すぐに使える多くの機能を提供するJSoupパーサーを試すことができます。JSoupの詳細については、http://jsoup.org/ にアクセスして、そこからバイナリをダウンロードしてくださいHTML ツリーをトラバースして必要な要素を取得するための DOM メソッドを提供します。

XSS 攻撃を防ぐために HTML 生成コードをサニタイズすることは良い方法ですが、HTML 入力をサニタイズして XSS アタッチを回避するためにパーサーを使用しないことを強くお勧めします。HTML ツリーが非常に大きい場合、応答時間は多岐にわたります。HTML ツリーをサニタイズする代わりに、FORM に入力するユーザーが適切であり、期待値に従っていることを確認する必要があります。

XSS 攻撃を回避する方法の詳細については、 www.owasp.orgにアクセスしてください。このサイトでは、HTML ツリーが XSS 攻撃を受けないようにするためのチート シートを提供しています。

于 2012-06-23T08:00:12.240 に答える