如何将引号添加到HtmlEncode的“白名单”中?

9 浏览
0 Comments

如何将引号添加到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现在我陷入了这些引号的问题,请帮忙!

0
0 Comments

问题的原因是无法将引号添加到白名单中。在Microsoft Reference Source的MarkAsSafe中,可以看到他调用了ApplyHtmlSpecificValues()函数,并在其中设置了特定字符的值。然而,这些字符被保留在白名单中,在编码后无法获取它们。因此,唯一的解决方法是在函数执行后,将字符改回去。

解决方法如下:

return Encoder.HtmlEncode(input).Replace(""", "\"").Replace("'", "'");

感谢!

0
0 Comments

问题的原因:在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)

0