嘿大家!
我使用的是asp.net mvc 3和AntiXssLibrary 4.2,我尝试用单引号或双引号对一些文本进行编码,问题是我得到的是' "而不是‘or’,在希伯来语中它们非常有用(比如רמב"ם或צ'ק)。我知道在该方法的希伯来语和默认参数中包括:
UnicodeCharacterEncoder.MarkAsSafe(
LowerCodeCharts.Default | LowerCodeCharts.Hebrew,
LowerMidCodeCharts.None,
MidCodeCharts.None,
UpperMidCodeCharts.None,
UpperCodeCharts.None);我尝试所有没有预期结果的编码方法。
编辑:
对于我的第二个问题,我尝试将一个html字符串放在我的视图中,如下所示
return new HtmlString(Encoder.HtmlEncode(resFile));我得到了所有的html格式,而不是呈现的页面,问题是微软将GetSafeHtml()方法移动到HtmlSanitizationLibrary程序集中--我找到它关于这个答案,然后从这里下载它。现在我可以这样用它了
return new HtmlString(Sanitizer.GetSafeHtml(questionsAnswerString));当然,在那之后,我添加了引用
using Microsoft.Security.Application;现在我被那些qoutes困住了有什么帮助吗?
发布于 2014-03-30 15:37:09
我很抱歉麻烦了,但不可能把这些字符白名单。我们可以在MicrosoftReferenceSourceofMarkAsSafe上看到野兔。他打电话给ApplyHtmlSpecificValues(),在那里我们可以看到
private static void ApplyHtmlSpecificValues() {
characterValues['<'] = "lt".ToCharArray();
characterValues['>'] = "gt".ToCharArray();
characterValues['&'] = "amp".ToCharArray();
characterValues['"'] = "quot".ToCharArray();
characterValues['\''] = "#39".ToCharArray();
}无论如何,它们保留这些字符,所以在编码后无法获得它们。
因此,我认为唯一适合调用此函数的解决方案总是从一个地方开始,在它执行之后,将字符更改为:(
return Encoder.HtmlEncode(input).Replace(""", "\"").Replace("'", "'");(10倍;)
发布于 2014-03-20 14:38:33
好的,如果在呈现的html页面上得到了' ",那么我就会意识到,您正在遇到双重html编码的问题。
若要复制您的情况,请在视图中复制并粘贴复制:代码,并亲自查看问题。
MvcHtmlString不应该编码已经编码的html字符串。所以在你的例子中,要么
return new HtmlString(Encoder.HtmlEncode(resFile));或
Sanitizer.GetSafeHtml(questionsAnswerString)返回一个Html编码的字符串,然后在视图中再次对其进行编码。
这可能是因为在您的视图中,实际上正在呈现您的内容,您正在使用剃须刀。
@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
<%: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编码字符串,无论您如何选择.。
下面是一些用于复制场景的代码,如果有帮助的话。一个样本输出和一个图像。将下面的代码放入您的视图中。
@{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>。

https://stackoverflow.com/questions/22491437
复制相似问题