MSのAntiXSS(v4.2.1)Sanitizer.GetSafeHtmlFragment(string)
メソッドは、入力からタグを削除<br>
しています。<br />
これは起こるはずですか?それを回避する方法はありますか?
キャラクターも削除されているようです\n
ので、消毒剤が効いた後は\r
電話できません。Replace()
MSのAntiXSS(v4.2.1)Sanitizer.GetSafeHtmlFragment(string)
メソッドは、入力からタグを削除<br>
しています。<br />
これは起こるはずですか?それを回避する方法はありますか?
キャラクターも削除されているようです\n
ので、消毒剤が効いた後は\r
電話できません。Replace()
4.2.xリリースは、HTMLサニタイザーで正確に検出されたセキュリティの脆弱性によって動機付けられました。この事実に関する詳細情報:
ただし、脆弱性を修正することに加えて、消毒剤はほとんど使用できなくなるほど攻撃的になるように変更されたようです。この事実に関する問題がWPLCodePlexサイトに報告されています(GetSafeHtmlFragmentがすべてのhtmlタグを置き換えます)。
問題が<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;
}