2011-10-11 79 views
0

我目前使用的微软AntiXSS库和使用GetSafeHtmlFragment方法如下:Microsoft Anti XSS Library编码&符号?

public static string SanitizeHtml(this string s) 
{ 
    return Sanitizer.GetSafeHtmlFragment(s); 
} 

但是,如果我在一个字符串传递这样的:

black & white

...这是编码&符号,因此它变成:

black & white

此库这个正常的行为?有没有办法阻止它编码这个字符?

+0

我相信这是正常的行为,因为你正在使用'GetSafeHtmlFragmet' –

回答

0

这是这个库的正常行为?

是的,它修复了您的HTML,因为您使用的是GetSafeHtmlFragment。否则,你会以无效的HTML片段结束。在HTML中,&字符具有特殊含义。我不认为这种行为可以修改。

+0

我明白了 - 那么在安全地输出用户生成的内容时,通常的做法是什么?但是在显示'&'字符时(而不是它们的编码等价物)?我应该使用不同的库/方法吗? – marcusstarnes

+0

@marcusstarnes,如果你想在网页(HTML)中显示它,你应该对它进行编码。如果你想在网页中显示'&'字符,你应该使用'&',这正是AntiXss库所做的。 –

+0

好吧,我明白了,但我的问题是,实际字符&正在渲染到屏幕。我正在使用Razor,所以我认为唯一的解决方法就是用Html.Raw(“black & white”)包装任何输出。我只想将它显示为&而不是&,但仍然使用AntiXss库,以确保在呈现之前剥离了任何恶意脚本等。我应该实质上是否打电话给@ Html.Raw(GetSafeHtmlFragment(“黑与白”))? – marcusstarnes

1

我不认为这是最好的解决方案。如果你使用HTML.Raw(),那么你就会让自己容易受到XSS攻击,除非你可以绝对确保该字符串始终安全并且对HTML.Raw()的所有用途都是安全的。