>백엔드 개발 >Golang >My Go HTML 템플릿이 'ZgotmplZ'를 출력하는 이유는 무엇입니까?

My Go HTML 템플릿이 'ZgotmplZ'를 출력하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-17 18:59:11291검색

Why Does My Go HTML Template Output

Go HTML 템플릿의 "ZgotmplZ" 이해

Go HTML 템플릿으로 작업할 때 수수께끼 같은 문자열 "ZgotmplZ"가 출력될 수 있습니다. . 이 독특한 값은 주의를 요하는 특별한 의미를 갖습니다.

ZgotmplZ가 나타나는 이유

"ZgotmplZ"는 잠재적으로 안전하지 않은 콘텐츠가 런타임 중에 CSS 또는 URL 컨텍스트에 들어갈 때 나타납니다. 이는 HTML이 CSS 또는 URL 속성에 직접 삽입될 때 발생하며, 이로 인해 보안 취약점이 발생할 수 있습니다. 이러한 위험으로부터 보호하기 위해 템플릿 엔진은 "ZgotmplZ"를 자리 표시자로 삽입하여 안전하지 않은 콘텐츠가 실행되는 것을 방지합니다.

샘플 예

다음 템플릿을 고려하세요. 코드:

func printSelected(s string) string {
    if s == "test" {
        return `selected="selected"`
    }
    return ""
}

func main() {
    funcMap := template.FuncMap{
        "printSelected": printSelected,
        "safe": func(s string) template.HTML {
            return template.HTML(s)
        },
    }
    template.Must(template.New("Template").Funcs(funcMap).Parse(`
        <option {{ printSelected "test" }} {{ printSelected "test" | safe }} >test</option>
    `)).Execute(os.Stdout, nil)

}

이 템플릿이 실행되면 출력:

<option ZgotmplZ ZgotmplZ >test</option>

템플릿 출력 보안

템플릿 출력의 안전을 보장하려면 "funcMap"을 활용하여 "attr" 및 "safe"를 구현할 수 있습니다. " 함수:

func attr(s string) template.HTMLAttr {
    return template.HTMLAttr(s)
}

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

    template.Must(template.New("Template").Funcs(funcMap).Parse(`
        <option {{.attr | attr}}>test</option>
        {{.html | safe}}
    `)).Execute(os.Stdout, map[string]string{
        "attr": `selected="selected"`,
        "html": `<option selected="selected">option</option>`,
    })
}

이 수정된 코드는 다음과 같은 결과를 가져옵니다. 출력:

<option selected="selected">test</option>
<option selected="selected">option</option>

결론

"ZgotmplZ"의 의미를 이해하고 "attr" 및 "safe" 기능을 구현함으로써 Go를 보장할 수 있습니다. HTML 템플릿은 안전하고 안전한 출력을 생성하여 취약점의 위험을 최소화하고 애플리케이션의 무결성을 유지합니다.

위 내용은 My Go HTML 템플릿이 'ZgotmplZ'를 출력하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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