AntiXSS JavaScriptEncode获得HTML编码

本文关键字:编码 HTML 获得 JavaScriptEncode AntiXSS | 更新日期: 2023-09-27 18:13:41

我刚刚开始使用AntiXSS(4.3.0),主要是使用这里描述的@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()中,但在我所遵循的帖子中,他从未这样做过(而是将整个东西包装在Javascript中的单引号中)。

我的问题是-你应该需要调用@Html.Raw(Encoder.JavaScriptEncode(data)),还是我的设置有问题?

谢谢!

AntiXSS JavaScriptEncode获得HTML编码

你关于剃刀编码的假设是正确的。我也想说你所关注的帖子也是正确的(我可能是错的,虽然我没有读完整篇文章)。

代替

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参数还是故意的?