2012-07-08 12 views
6

MSのAntiXSS(v4.2.1)Sanitizer.GetSafeHtmlFragment(string)メソッドは、入力から<br><br />タグを削除しています。これは起こるはずですか?その周りに道がありますか?Sanitizer.GetSafeHtmlFragmentは<br>要素を削除するはずですか?

\n\rの文字も削除されているようですので、サニタイザの仕事が完了した後でReplace()に電話することはできません。

答えて

7

4.2.xのリリースは、HTMLサニタイザで正確に検出されたセキュリティの脆弱性によって動機づけられました。この事実についての詳細情報:

はしかし、脆弱性を修正以外に消毒剤をはるかに積極的にほとんど使用不可能であることのポイントになるように変更されたようです。 WPL CodePlexサイト(GetSafeHtmlFragment replacing all html tags)にこの事実に関する問題が報告されています。

問題が<br>タグのみであり、AntiXSSサニタイザを使用したい場合は、入力を前処理してサニタイザの結果を後処理して醜い回避策を実装できます。このような

サムシング(例示の目的のみのためのコード):

static void Main(string[] args) 
{ 
    string input = "<br>Hello<br/>World!"; 

    input = EscapeHtmlBr(input); 
    var result = Sanitizer.GetSafeHtmlFragment(input); 
    result = UnescapeHtmlBr(result); 

    Console.WriteLine(result); 
} 

const string BrMarker = @"|br|"; 

private static string UnescapeHtmlBr(string result) 
{ 
    result = result.Replace(BrMarker, "<br />"); 

    return result; 
} 

private static string EscapeHtmlBr(string input) 
{ 
    input = input.Replace("<br>", BrMarker); 
    input = input.Replace("<br />", BrMarker); 
    input = input.Replace("<br/>", BrMarker); 

    return input; 
} 
+2

おかげで...それは私がのために、「望んで」いたものでした。しかし、現在、AntiXSSライブラリは基本的に役に立たないようです。私はWYSIWYGのテキストエリアでそれを使いたいと思っていました。 ;( – Chaddeus

+1

)あまり積極的でない機能が必要な場合は、AjaxControlToolkitの一部である 'HTMLsantizationLibary.dll'を使う必要があるようです。http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/HTMLEditorExtender/ HTMLEditorExtender.aspx – RemarkLima

関連する問題