Go HTML 템플릿으로 작업할 때 출력에서 수수께끼의 "ZgotmplZ"를 발견할 수 있습니다. 단순한 문자열이 아니라 문제를 나타내는 특별한 값입니다.
"ZgotmplZ"는 "Zero-value got templateZ"를 의미하며 안전하지 않은 콘텐츠가 전달될 때 나타납니다. 템플릿의 CSS 또는 URL 컨텍스트에 추가합니다. 예를 들어, 다음 템플릿을 실행하면
<option {{ printSelected "test" }} {{ printSelected "test" | safe }}>test</option>
다음이 출력됩니다.
<option ZgotmplZ ZgotmplZ >test</option>
"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!