2012-06-04 11 views
6

XSSと対処方法に関するSOの多くの記事を読んだことがあります。一般的に、コンセンサスはブラックリスト以上のホワイトリストであり、正規表現を使用することは避けられます(扱うバリエーションが多すぎます)。TinyMCE、AntiXSS、MVC3、GetSafeHtmlFragment

私はASP.Net MVC3アプリケーションで作業しています。ユーザーエントリ(例:< strong>、< ul>、< li>など)からHTMLを表示できるようにする必要がありますが、XSSのリスクはありません。

私はNuget経由でAntiXSSパッケージを使用しています。私のモデルでは、私は

[AllowHtml] 
public string UserDetails{ get; set; } 

私はTinyMCEをテキストエリアにフックしています。私のコントローラで

、私は、ビューからのポストを取得し、それをサニタイズ:

using Microsoft.Security.Application; 
... 
string SanitizedDetails = Sanitizer.GetSafeHtmlFragment(model.UserDetails); 

私の質問を:私は右のそれをしましたか?ほとんどのXSSの問題から保護していますか、間違ったツリーを吠えていますか?

答えて

4

あなたは特定のフォームに対して投稿されています。 htmlを許可することは危険な操作なので、できるだけそれを緩和しようとしています。あなたのアプローチはここでかなり良いです。

他にも役立つオプションがありますが、残念ながらすべてが生産準備が整っているわけではありません。 さまざまなブラウザで部分的にサポートされているコンテンツセキュリティポリシーヘッダーがあります。 例: http://www.w3.org/TR/CSP/

だから、あなたが持っているものまともですが、(いずれかの)コンテンツセキュリティポリシーに私はここでかなりの数のXSS攻撃を乗り越える

をベンチャーしたい場合は、この少し高めることができますもし興味があれば。 http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=hack-proofing-dotnet-app

あなたは他の攻撃(例えば、SQLインジェクションが)あなたのHTMLにXSSのコードを挿入した場合に、レンダリングの前に(および保存する前に)追加のサニタイズを含めることができます。

0

Sanitizer.GetSafeHtmlFragment(model.UserDetails);をホワイトリストの助けを借りて使用すると、それを通してタグを実行することはできません。これは、注入コードである

model.UserDetails = "Testdata `<script>alert('Malicious Code');</script>`" 

例えば、SafeHtmlFragment方法は<script>タグが実行することはできません。

google.comに移動するにはテキストとGoogleのハイパーリンクを返す安全なコードです。

model.UseDetailsは、のテストデータのみを出力します。