2014-07-20 1 views
1

저는 방금 @Encoder.JavaScriptEncodehere으로 사용하여 AntiXSS (4.3.0)를 사용하기 시작했습니다.AntiXSS JavaScriptEncode가 HTML을 인코딩합니까?

Nuget에서 AntiXSS를 설치 한 다음 내 Web.config에 encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"<httpRuntime으로 추가했습니다. 내보기에서

, 나는 (<script> 태그 이내) 다음 줄이 :

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

I 출력

var userId = 'user-id'; 

에 기대하는 대신 출력 :

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

Razor가 HTML을 위생적으로 처리하려고 시도하고 있기 때문에 이것이 일어나고 있다고 가정합니다. 따옴표는 &#39;입니다.

그런 다음 해결책은 Html.Raw()으로 감싸는 것이지만 post I was following에서 그는 자바 스크립트 내에서 작은 따옴표로 전체를 감싸는 대신 절대로하지 않습니다.

제 질문은 @Html.Raw(Encoder.JavaScriptEncode(data))으로 전화해야합니까, 아니면 설치에 문제가 있습니까?

감사합니다.

답변

3

면도기 인코딩에 대한 가정은 정확합니다. 나는 또한 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 

을 시도하거나

var userId = Html.Raw(@Encoder.JavaScriptEncode(User.Identity.GetUserId()); 
처럼 Html.Raw() 강행

Opionated : 나는 그 옵션이 있기 때문에 emitQuotes : false를 선호하는데, 다른 함수 호출을위한 필요성을 없애기 때문에 Html.Raw(). emitQuotes의 기본값은 true입니다. emitQuotes 매개 변수가 누락 되었습니까, 아니면 의도적입니까?

+0

감사합니다. 단지 이상하게 보입니다. 또한 Identities 2.0을 사용하고 있습니다.이 ID는 기본적으로 문자열 ID로 지정됩니다 (따옴표로 묶으려는 이유입니다) – MatthewSot