programing

레이저 보기에서 인코딩되지 않은 문자열 내보내기

lastmoon 2023. 7. 1. 09:19
반응형

레이저 보기에서 인코딩되지 않은 문자열 내보내기

Scott Gu가 블로그 게시물에서 말했듯이 "기본적으로 @block을 사용하여 내보내는 콘텐츠는 자동으로 HTML 인코딩되어 XSS 공격 시나리오로부터 더 잘 보호됩니다."제 질문은: HTML 인코딩이 아닌 문자열을 어떻게 출력할 수 있습니까?

단순성을 위해 다음과 같은 간단한 사례를 고수해 주십시오.

@{
 var html = "<a href='#'>Click me</a>"
 // I want to emit the previous string as pure HTML code...
}

제가 가장 좋아하는 접근 방식은 다음과 같습니다.

@Html.Raw("<p>my paragraph text</p>")

출처는 Phil Haack의 Razor 구문 참조입니다. http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

HTML 인코딩되지 않는 MvcHtmlString의 새 인스턴스를 만들 수 있습니다.

@{
  var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}

레이저의 미래에 더 쉬운 방법이 있기를 바랍니다.

MVC를 사용하지 않는 경우 다음을 시도할 수 있습니다.

@{
  var html = new HtmlString("<a href='#'>Click me</a>")
}

새로운 HtmlString이 확실히 답입니다.

우리는 몇 가지 다른 면도기 구문 변경 사항을 조사했지만, 결국 새로운 HtmlString보다 짧은 것은 없었습니다.

하지만, 우리는 그것을 도우미에게 마무리할 수 있습니다.아마도...

@Html.Literal("<p>something</p>")

또는

@"<p>something</p>".AsHtml()

저는 모노 아래에서 ASP.NET MVC와 레이저를 사용하고 있습니다.

시스템에서 HtmlHelper를 가져올 수 없습니다.시스템의 웹.웹 페이지입니다.웹.MVC는 몇 가지 이유로.

하지만 모델의 속성을 다음과 같이 선언한 후 인코딩되지 않은 문자열을 출력할 수 있었습니다.RazorEngine.Text.RawString이제 예상대로 출력됩니다.

@{
    var txt = new RawString("some text with \"quotes\"");
    var txt2 = "some text with \"quotes\"";
}
<div>Here is unencoded text: @txt</div>
<div>Here is encoded text: @txt2</div>

출력:

<div>Here is unencoded text: some text with "quotes"</div>
<div>Here is encoded text: some text with &quot;quotes&quot;</div>

프로젝트를 새로운 레이저 뷰 엔진으로 전환할 때도 이 문제에 부딪혔습니다.C#에서 JSON 데이터를 생성해야 하고 페이지 로드 시 출력하기를 원했기 때문에 제가 취한 접근 방식은 약간 다릅니다.

결국 제가 한 것은 cshtml 파일 내부에 View와 병렬인 RawView를 구현한 것입니다.기본적으로, 생끈을 얻기 위해서는

@(new HtmlString(View.Foo))

// became
@RawView.Foo

이를 위해서는 프로젝트 레이아웃을 몇 가지 변경해야 하기 때문에 여기에 블로그 게시물을 작성했습니다.간단히 말해서, 이를 위해서는 MVC의 DynamicViewDataDictionary와 RawView가 포함된 새로운 WebViewPage의 중복 구현이 필요했습니다.또한 RawView에서 인덱스 연산자를 구현하여 다음과 같은 작업을 수행했습니다.

@RawView["Foo"]

누군가가 키 목록을 사용하여 데이터를 루프해야 할 가능성이 낮습니다.

간호사의 의견을 읽어보니, 이것을 RawView가 아닌 Literal로 이름을 지었으면 더 좋았을 것 같습니다.

언급URL : https://stackoverflow.com/questions/3356790/emitting-unencoded-strings-in-a-razor-view

반응형