레이저 보기에서 인코딩되지 않은 문자열 내보내기
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 "quotes"</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
'programing' 카테고리의 다른 글
R에 객체(변수)가 정의되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.07.01 |
---|---|
휴대용 MongoDB? (0) | 2023.07.01 |
몽구스에 있는 데이트? (0) | 2023.07.01 |
자동 증분을 사용하여 열의 시작 값 설정 (0) | 2023.07.01 |
Java 컴파일 오류: "package com.fasterxml.jackson.notation이 없습니다." (0) | 2023.07.01 |