6

XSSとその対処方法に関するSOに関する多くの投稿を読みました。一般に、コンセンサスはブラックリストよりもホワイトリストであり、正規表現の使用を避けます(処理するにはバリアントが多すぎます)。

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

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

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

私の見解では、TinyMCEをテキストエリアに接続しています。

私のコントローラーでは、ビューから投稿を取得してサニタイズします。

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

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

4

2 に答える 2

4

特定のフォームに対して投稿されます。htmlを許可することは、それ自体が危険な操作であるため、可能な限りそれを軽減しようとしています。ここでのアプローチはかなり良いです。

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

ですから、あなたが持っているものはまともですが、コンテンツセキュリティポリシーに挑戦したい場合は、これを少し強化することができます(1つ)

興味があれば、ここでかなりの数のXSS攻撃を調べます。 http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=hack-proofing-dotnet-app

別の攻撃(SQLインジェクションなど)によってHTMLにxssコードが挿入された場合に備えて、レンダリング前(および保存前)に追加のサニタイズを含めることができます。

于 2012-06-04T04:40:49.650 に答える
0

ホワイトリストを使用Sanitizer.GetSafeHtmlFragment(model.UserDetails);して使用すると、タグを実行できなくなります。たとえば、

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

<script>これはインジェクションコードであり、SafeHtmlFragmentメソッドはタグの実行を許可しません。

model.UserDetails = "Testdata `<a href="www.google.com">Google <a/>`"

これは、google.comに移動するためのテキストとGoogleハイパーリンクを返す必要がある安全なコードです。

Testdatamodel.UseDetailsを出力として返すだけの場合。

于 2014-01-03T10:59:25.583 に答える