我刚刚开始使用AntiXSS (4.3.0),主要是使用@Encoder.JavaScriptEncode (如描述的这里 )。
我从Nuget安装了AntiXSS,然后在encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"中添加了encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"到<httpRuntime中。
在我看来,我有以下一行(在<script>标记中):
var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId());我希望它能输出
var userId = 'user-id';相反,产出是:
var userId = 'user-id';我认为这是因为Razor试图净化HTML,从而将单引号编码为'。
然后,解决方案是将其包装在Html.Raw()中,但在我是在跟踪中,他从不这样做(而是在Javascript中用单引号包装整件事情)。
我的问题是-你应该打电话给@Html.Raw(Encoder.JavaScriptEncode(data)),还是我的设置有问题?
谢谢!
发布于 2014-07-22 14:20:06
你关于剃刀编码的假设是正确的。我还会说你跟踪的帖子也是正确的(我可能错了,我还没有看完整个帖子)。
而不是
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());选项:我更喜欢emitQuotes: false,因为存在该选项,而且它消除了对另一个函数调用Html.Raw()的需求。emitQuotes的默认值为true。您是否遗漏了emitQuotes参数,还是有意的?
https://stackoverflow.com/questions/24856050
复制相似问题