首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AntiXSS JavaScriptEncode得到HTML编码?

AntiXSS JavaScriptEncode得到HTML编码?
EN

Stack Overflow用户
提问于 2014-07-20 23:57:58
回答 1查看 5.4K关注 0票数 2

我刚刚开始使用AntiXSS (4.3.0),主要是使用@Encoder.JavaScriptEncode (如描述的这里 )。

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

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

代码语言:javascript
复制
var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId());

我希望它能输出

代码语言:javascript
复制
var userId = 'user-id';

相反,产出是:

代码语言:javascript
复制
var userId = &#39;user-id&#39;;

我认为这是因为Razor试图净化HTML,从而将单引号编码为&#39;

然后,解决方案是将其包装在Html.Raw()中,但在我是在跟踪中,他从不这样做(而是在Javascript中用单引号包装整件事情)。

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-22 14:20:06

你关于剃刀编码的假设是正确的。我还会说你跟踪的帖子也是正确的(我可能错了,我还没有看完整个帖子)。

而不是

代码语言:javascript
复制
var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId());

试一试

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

或者只是

代码语言:javascript
复制
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(),比如

代码语言:javascript
复制
var userId = Html.Raw(@Encoder.JavaScriptEncode(User.Identity.GetUserId());

选项:我更喜欢emitQuotes: false,因为存在该选项,而且它消除了对另一个函数调用Html.Raw()的需求。emitQuotes的默认值为true。您是否遗漏了emitQuotes参数,还是有意的?

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

https://stackoverflow.com/questions/24856050

复制
相关文章

相似问题

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