반응형
Razor를 사용하여 인코딩되지 않은 Json을 View에 작성하는 방법
Razor를 사용하여 Asp.Net MVC View에 JSON으로 객체를 쓰려고합니다.
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
문제는 출력에서 JSON이 인코딩되어 브라우저가 그것을 좋아하지 않는다는 것입니다. 예를 들면 다음과 같습니다.
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
Razor가 인코딩되지 않은 JSON을 내보내도록하려면 어떻게해야합니까?
당신은 :
@Html.Raw(Json.Encode(Model.PotentialAttendees))
베타 2 이전 릴리스에서는 다음과 같이했습니다.
@(new HtmlString(Json.Encode(Model.PotentialAttendees)))
Newtonsoft 's JsonConvert.SerializeObject
는 Json.Encode
@ david-k-egghead가 제안한 것과 동일하게 동작하지 않으며 XSS 공격 까지 개방합니다 .
이 코드를 Razor 뷰에 드롭하여 사용 Json.Encode
이 안전하고 JavaScript 컨텍스트에서 Newtonsoft를 안전하게 만들 수 있지만 추가 작업이없는 것은 아닙니다.
<script>
var jsonEncodePotentialAttendees = @Html.Raw(Json.Encode(
new[] { new { Name = "Samuel Jack</script><script>alert('jsonEncodePotentialAttendees failed XSS test')</script>" } }
));
alert('jsonEncodePotentialAttendees passed XSS test: ' + jsonEncodePotentialAttendees[0].Name);
</script>
<script>
var safeNewtonsoftPotentialAttendees = JSON.parse(@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(
new[] { new { Name = "Samuel Jack</script><script>alert('safeNewtonsoftPotentialAttendees failed XSS test')</script>" } }), addDoubleQuotes: true)));
alert('safeNewtonsoftPotentialAttendees passed XSS test: ' + safeNewtonsoftPotentialAttendees[0].Name);
</script>
<script>
var unsafeNewtonsoftPotentialAttendees = @Html.Raw(JsonConvert.SerializeObject(
new[] { new { Name = "Samuel Jack</script><script>alert('unsafeNewtonsoftPotentialAttendees failed XSS test')</script>" } }));
alert('unsafeNewtonsoftPotentialAttendees passed XSS test: ' + unsafeNewtonsoftPotentialAttendees[0].Name);
</script>
또한보십시오:
Newtonsoft 사용
<script type="text/jscript">
var potentialAttendees = @(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.PotentialAttendees)))
</script>
참고 URL : https://stackoverflow.com/questions/4072762/how-do-i-write-unencoded-json-to-my-view-using-razor
반응형
'IT' 카테고리의 다른 글
자바 스크립트로 웹 페이지의 스크린 샷을 찍으시겠습니까? (0) | 2020.06.16 |
---|---|
클래스 코드를 헤더와 cpp 파일로 분리 (0) | 2020.06.16 |
std :: map을 반복하는 순서가 알려져 있습니까 (그리고 표준에 의해 보장됨)? (0) | 2020.06.15 |
MySQL이 "데이터 전송"상태에있을 때 무슨 의미입니까? (0) | 2020.06.15 |
ModuleNotFoundError : __main__이 패키지가 아니라는 것은 무엇을 의미합니까? (0) | 2020.06.15 |