gpt4 book ai didi

c# - AntiXSS JavaScriptEncode 获取 HTML 编码?

转载 作者:行者123 更新时间:2023-11-30 12:39:48 25 4
gpt4 key购买 nike

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

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

在我看来,我有以下行(在 <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)) ,还是我的设置有问题?

谢谢!

最佳答案

您关于 Razor 编码的假设是正确的。我还要说 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 的默认值为真。 您是缺少 emitQuotes 参数还是故意的?

关于c# - AntiXSS JavaScriptEncode 获取 HTML 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com