ホームページ >バックエンド開発 >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」は「ゼロ値がテンプレート Z を取得しました」の略で、安全でないコンテンツが渡されたときに表示されます。テンプレート内の 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)
    },
}

Withこの関数を適切に配置すると、次のようにテンプレートを変更できます:

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

これにより、属性値が安全にエスケープされます。

結論

「ZgotmplZ」の目的を理解し、適切なエスケープ手法を採用することで、安全でないコンテンツが Go HTML テンプレート内の安全でないコンテキストに到達するのを防ぐことができます。 、Web アプリケーションの整合性とセキュリティを維持します。

以上がGo HTML テンプレートの「ZgotmplZ」の原因と解決方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。