最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c# - AntiXSS JavaScriptEncode gets HTML encoded? - Stack Overflow

programmeradmin0浏览0评论

I've just started using AntiXSS (4.3.0), mostly to use @Encoder.JavaScriptEncode as described here.

I installed AntiXSS from Nuget, then added encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary" to <httpRuntime in my Web.config.

In my view, I have the following line (within <script> tags):

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

Which I would expect to output

var userId = 'user-id';

but instead outputs:

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

I assume this is happening because Razor is trying to sanitize the HTML, and thus encoding the singe quotes as &#39;.

The solution then would be to just wrap it in Html.Raw(), but in the post I was following he never does that (instead wrapping the whole thing in single quotes within the Javascript).

My question is - are you supposed to need to call @Html.Raw(Encoder.JavaScriptEncode(data)), or is there something wrong with my setup?

Thanks!

I've just started using AntiXSS (4.3.0), mostly to use @Encoder.JavaScriptEncode as described here.

I installed AntiXSS from Nuget, then added encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary" to <httpRuntime in my Web.config.

In my view, I have the following line (within <script> tags):

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

Which I would expect to output

var userId = 'user-id';

but instead outputs:

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

I assume this is happening because Razor is trying to sanitize the HTML, and thus encoding the singe quotes as &#39;.

The solution then would be to just wrap it in Html.Raw(), but in the post I was following he never does that (instead wrapping the whole thing in single quotes within the Javascript).

My question is - are you supposed to need to call @Html.Raw(Encoder.JavaScriptEncode(data)), or is there something wrong with my setup?

Thanks!

Share Improve this question asked Jul 20, 2014 at 23:57 MatthewSotMatthewSot 3,5945 gold badges43 silver badges58 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 4

Your assumption about razor encoding is correct. I'd also say the post you were following is also correct (I may be wrong, I haven't read the entire post though).

Instead of

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

try

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

or just

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

or go ahead with Html.Raw() like

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

Opionated: I prefer emitQuotes: false because that option is there, and because it eliminates the needs for another function call Html.Raw(). The default for emitQuotes is true. Are you missing the emitQuotes parameter or is that intentional?

发布评论

评论列表(0)

  1. 暂无评论