首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在HtmlEncode上输入“白名单”的引号?

如何在HtmlEncode上输入“白名单”的引号?
EN

Stack Overflow用户
提问于 2014-03-18 21:28:27
回答 2查看 2.3K关注 0票数 0

嘿大家!

我使用的是asp.net mvc 3和AntiXssLibrary 4.2,我尝试用单引号或双引号对一些文本进行编码,问题是我得到的是' "而不是‘or’,在希伯来语中它们非常有用(比如רמב"ם或צ'ק)。我知道在该方法的希伯来语和默认参数中包括:

代码语言:javascript
复制
UnicodeCharacterEncoder.MarkAsSafe(
        LowerCodeCharts.Default | LowerCodeCharts.Hebrew,
        LowerMidCodeCharts.None,
        MidCodeCharts.None,
        UpperMidCodeCharts.None,
        UpperCodeCharts.None);

我尝试所有没有预期结果的编码方法。

编辑:

对于我的第二个问题,我尝试将一个html字符串放在我的视图中,如下所示

代码语言:javascript
复制
return new HtmlString(Encoder.HtmlEncode(resFile));

我得到了所有的html格式,而不是呈现的页面,问题是微软将GetSafeHtml()方法移动到HtmlSanitizationLibrary程序集中--我找到它关于这个答案,然后从这里下载它。现在我可以这样用它了

代码语言:javascript
复制
return new HtmlString(Sanitizer.GetSafeHtml(questionsAnswerString));

当然,在那之后,我添加了引用

代码语言:javascript
复制
using Microsoft.Security.Application;

现在我被那些qoutes困住了有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-30 15:37:09

我很抱歉麻烦了,但不可能把这些字符白名单。我们可以在MicrosoftReferenceSourceofMarkAsSafe上看到野兔。他打电话给ApplyHtmlSpecificValues(),在那里我们可以看到

代码语言:javascript
复制
    private static void ApplyHtmlSpecificValues() {
        characterValues['<'] = "lt".ToCharArray();
        characterValues['>'] = "gt".ToCharArray();
        characterValues['&'] = "amp".ToCharArray();
        characterValues['"'] = "quot".ToCharArray();
        characterValues['\''] = "#39".ToCharArray();
    }

无论如何,它们保留这些字符,所以在编码后无法获得它们。

因此,我认为唯一适合调用此函数的解决方案总是从一个地方开始,在它执行之后,将字符更改为:(

代码语言:javascript
复制
return Encoder.HtmlEncode(input).Replace("&quot;", "\"").Replace("&#39;", "'");

(10倍;)

票数 0
EN

Stack Overflow用户

发布于 2014-03-20 14:38:33

好的,如果在呈现的html页面上得到了&#039; &quot;,那么我就会意识到,您正在遇到双重html编码的问题。

若要复制您的情况,请在视图中复制并粘贴复制:代码,并亲自查看问题。

MvcHtmlString不应该编码已经编码的html字符串。所以在你的例子中,要么

代码语言:javascript
复制
return new HtmlString(Encoder.HtmlEncode(resFile));

代码语言:javascript
复制
Sanitizer.GetSafeHtml(questionsAnswerString)

返回一个Html编码的字符串,然后在视图中再次对其进行编码。

这可能是因为在您的视图中,实际上正在呈现您的内容,您正在使用剃须刀。

代码语言:javascript
复制
@alreadyHtmlEncodedString 
// razor's @ syntax html encodes the given string 
//(irrespective of the fact that the given string is not html encoded 
//or the given string is html encoded already or whatever. 
//it just encodes the given string)

或aspx

代码语言:javascript
复制
<%:alreadyHtmlEncodedString%> 
// aspx's <%: %> html encodes the given string 
//(irrespective of the fact that the given string is not html encoded 
//or the given string is html encoded already or whatever. 
//it just encodes the given string)

所以,如果是这样的话。或者对已经被html编码的字符串使用Html.Raw。或者,只需依赖剃刀的@语法来获取不安全的非html编码字符串,无论您如何选择.。

  • 复制:

下面是一些用于复制场景的代码,如果有帮助的话。一个样本输出和一个图像。将下面的代码放入您的视图中。

代码语言:javascript
复制
@{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>
                @quotes
            </td>
            <td>
                @Html.Raw(quotes)
            </td>
            <td>
                @MvcHtmlString.Create(quotes)
            </td>
        </tr>
        <tr>
            <td>quotesHtmlEncoded
            </td>
            <td>
                @quotesHtmlEncoded
            </td>
            <td>
                @Html.Raw(quotesHtmlEncoded)
            </td>
            <td>
                @MvcHtmlString.Create(quotesHtmlEncoded)
            </td>
        </tr>
        <tr>
            <td>hebrew
            </td>
            <td>
                @hebrew
            </td>
            <td>
                @Html.Raw(hebrew)
            </td>
            <td>
                @MvcHtmlString.Create(hebrew)
            </td>
        </tr>
        <tr>
            <td>hebrewHtmlEncoded
            </td>
            <td>
                @hebrewHtmlEncoded
            </td>
            <td>
                @Html.Raw(hebrewHtmlEncoded)
            </td>
            <td>
                @MvcHtmlString.Create(hebrewHtmlEncoded)
            </td>
        </tr>
        <tr>
            <td>sampleXss
            </td>
            <td>
                @sampleXss
            </td>
            <td>
                @Html.Raw(sampleXss)
            </td>
            <td>
                @MvcHtmlString.Create(sampleXss)
            </td>
        </tr>
        <tr>
            <td>sampleXssHtmlEncoded
            </td>
            <td>
                @sampleXssHtmlEncoded
            </td>
            <td>
                @Html.Raw(sampleXssHtmlEncoded)
            </td>
            <td>
                @MvcHtmlString.Create(sampleXssHtmlEncoded)
            </td>
        </tr>
    </tbody>
</table>

样本输出图像

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22491437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档