如何将引号添加到HtmlEncode的“白名单”中?
如何将引号添加到HtmlEncode的“白名单”中?
大家好!\n我正在使用asp.net mvc 3和AntiXssLibrary 4.2,我尝试对一些带有单引号或双引号的文本进行编码,问题是我得到的是 ' "
而不是 \' 或 \",在希伯来语中,它们非常有用(例如 רמב\"ם 或 צ\'ק)。我知道这个方法的希伯来语和默认参数已经包含了它们:\n
UnicodeCharacterEncoder.MarkAsSafe( LowerCodeCharts.Default | LowerCodeCharts.Hebrew, LowerMidCodeCharts.None, MidCodeCharts.None, UpperMidCodeCharts.None, UpperCodeCharts.None);
\n我尝试了所有的编码方法都没有预期的结果。\n编辑:\n对于我尝试在视图中放置一个像这样的HTML字符串的第二个问题\n
return new HtmlString(Encoder.HtmlEncode(resFile));
\n我得到的是所有的HTML格式而不是渲染后的页面,问题是微软将GetSafeHtml()
方法移到了HtmlSanitizationLibrary程序集中 - 我在这个回答中找到了它,并从这里下载了它。现在我可以像这样使用它\n
return new HtmlString(Sanitizer.GetSafeHtml(questionsAnswerString));
\n之后,当然我添加了引用\n
using Microsoft.Security.Application;
\n现在我陷入了这些引号的问题,请帮忙!
问题的原因:在HTML页面上渲染时,出现了' "
,这意味着遇到了双重HTML编码的问题。可能是因为返回的字符串已经进行了HTML编码,然后在视图中又进行了一次编码。
解决方法:要么使用已经进行HTML编码的字符串的Html.Raw方法,要么使用razor的@语法对未经HTML编码的字符串进行编码。
以下是一个复制和粘贴的示例代码,用于复制问题的场景,并在视图中看到问题。在视图中使用razor的@语法对给定字符串进行HTML编码,无论给定字符串是否已经进行了HTML编码。
@{string quotes = @"'"""; string quotesHtmlEncoded = Html.Encode(@"'"""); string hebrew = @"like רמב""ם or צ'ק"; string hebrewHtmlEncoded = Html.Encode(@"like רמב""ם or צ'ק"); string sampleXss = "<script>alert('1')</script>"; string sampleXssHtmlEncoded = Html.Encode("<script>alert('1')</script>"); } <table border="1"> <thead> <tr> <th></th> <th>razor @@ </th> <th>Raw </th> <th>MvcHtmlString.Create </th> </tr> </thead> <tbody> <tr> <td>quotes </td> <td> </td> <td> .Raw(quotes) </td> <td> .Create(quotes) </td> </tr> <tr> <td>quotesHtmlEncoded </td> <td> </td> <td> .Raw(quotesHtmlEncoded) </td> <td> .Create(quotesHtmlEncoded) </td> </tr> <tr> <td>hebrew </td> <td> </td> <td> .Raw(hebrew) </td> <td> .Create(hebrew) </td> </tr> <tr> <td>hebrewHtmlEncoded </td> <td> </td> <td> .Raw(hebrewHtmlEncoded) </td> <td> .Create(hebrewHtmlEncoded) </td> </tr> <tr> <td>sampleXss </td> <td> </td> <td> .Raw(sampleXss) </td> <td> .Create(sampleXss) </td> </tr> <tr> <td>sampleXssHtmlEncoded </td> <td> </td> <td> .Raw(sampleXssHtmlEncoded) </td> <td> .Create(sampleXssHtmlEncoded) </td> </tr> </tbody> </table>
参考链接:[https://i.stack.imgur.com/CIT9H.jpg](https://i.stack.imgur.com/CIT9H.jpg)