AntiXSS JavaScriptEncode获取HTML编码?

时间:2014-07-20 23:57:58

标签: c# javascript asp.net asp.net-mvc-4 antixsslibrary

我刚刚开始使用AntiXSS(4.3.0),主要是使用here所述的@Encoder.JavaScriptEncode

我从Nuget安装了AntiXSS,然后在我的Web.config中将encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"添加到<httpRuntime

在我看来,我有以下一行(在<script>标签内):

var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId());

我希望输出

var userId = 'user-id';

但输出:

var userId = &#39;user-id&#39;;

我认为这是因为Razor正在尝试清理HTML,因此将单引号编码为&#39;

然后解决方案是将其包装在Html.Raw()中,但在post I was following中他永远不会这样做(而是将整个事物用Javascript中的单引号括起来。)

我的问题是 - 你应该打电话给@Html.Raw(Encoder.JavaScriptEncode(data)),还是我的设置有问题?

谢谢!

1 个答案:

答案 0 :(得分:3)

您对剃刀编码的假设是正确的。我还说post you were following也是正确的(我可能错了,但我还没读完整篇文章)。

而不是

var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId());

尝试

var userId = '@Encoder.JavaScriptEncode(User.Identity.GetUserId(), emitQuotes: false)';
//optionally surround with '' if your userId needs to be a string

或只是

var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId(), emitQuotes: false);
// Visual Studio gives you a red squiggly syntax error after the semi-colon though.
// From your example, if it is a number, then no quotes are required

或继续Html.Raw()喜欢

var userId = Html.Raw(@Encoder.JavaScriptEncode(User.Identity.GetUserId());

Opionated:我更喜欢emitQuotes:false因为那个选项在那里,并且因为它消除了对另一个函数调用Html.Raw()的需求。 emitQuotes 的默认值为true。 您是否错过 emitQuotes 参数或是故意的?