>백엔드 개발 >Golang >Go HTML 템플릿에서 'ZgotmplZ'가 발생하는 원인은 무엇이며 어떻게 해결할 수 있습니까?

Go HTML 템플릿에서 'ZgotmplZ'가 발생하는 원인은 무엇이며 어떻게 해결할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-16 10:33:17140검색

What Causes

Go HTML 템플릿에서 "ZgotmplZ"의 미스터리 공개

Go HTML 템플릿으로 작업할 때 출력에서 ​​수수께끼의 "ZgotmplZ"를 발견할 수 있습니다. 단순한 문자열이 아니라 문제를 나타내는 특별한 값입니다.

ZgotmplZ 이해

"ZgotmplZ"는 "Zero-value got templateZ"를 의미하며 안전하지 않은 콘텐츠가 전달될 때 나타납니다. 템플릿의 CSS 또는 URL 컨텍스트에 추가합니다. 예를 들어, 다음 템플릿을 실행하면

<option {{ printSelected "test" }} {{ printSelected "test" | safe }}>test</option>

다음이 출력됩니다.

<option ZgotmplZ ZgotmplZ >test</option>

ZgotmplZ 문제 해결

"ZgotmplZ"를 해결하는 핵심은 다음을 보장하는 것입니다. 안전하지 않은 컨텍스트에서는 안전한 문자열만 사용됩니다. 이는 템플릿 기능의 출력에 안전 기능을 적용하여 달성할 수 있습니다. 그러나 selected와 같은 속성의 경우 safe를 직접 적용하면 XSS 취약점이 발생할 수 있습니다.

이 문제를 해결하려면 템플릿 funcMap에 사용자 정의 attr 함수를 추가할 수 있습니다.

funcMap := template.FuncMap{
    "attr": func(s string) template.HTMLAttr {
        return template.HTMLAttr(s)
    },
    "safe": func(s string) template.HTML {
        return template.HTML(s)
    },
}

이 기능이 있으면 다음과 같이 템플릿을 수정할 수 있습니다.

<option {{.attr | attr}}>test</option>
{{.html | safe}}

이렇게 하면 HTML을 허용하는 동시에 속성 값이 안전하게 이스케이프됩니다.

결론

"ZgotmplZ"의 목적을 이해하고 적절한 이스케이프 기술을 사용하면 안전하지 않은 콘텐츠가 Go HTML 템플릿의 안전하지 않은 컨텍스트에 도달하는 것을 방지할 수 있습니다. 웹 애플리케이션의 무결성과 보안.

위 내용은 Go HTML 템플릿에서 'ZgotmplZ'가 발생하는 원인은 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.