Apabila bekerja dengan templat HTML Go, anda mungkin menghadapi "ZgotmplZ" yang membingungkan dalam output anda. Ini bukan rentetan mudah tetapi nilai istimewa yang menandakan isu.
"ZgotmplZ" bermaksud "Zero-value got templateZ," dan ia muncul apabila kandungan tidak selamat dihantar kepada konteks CSS atau URL dalam templat anda. Sebagai contoh, melaksanakan templat berikut:
<option {{ printSelected "test" }} {{ printSelected "test" | safe }}>test</option>
akan mengeluarkan:
<option ZgotmplZ ZgotmplZ >test</option>
Kunci untuk menangani "ZgotmplZ" adalah untuk memastikan bahawa hanya rentetan selamat digunakan dalam konteks tidak selamat. Ini boleh dicapai dengan menggunakan fungsi selamat pada output fungsi templat. Walau bagaimanapun, dalam kes atribut seperti yang dipilih, penggunaan selamat secara langsung boleh memperkenalkan kelemahan XSS.
Untuk menangani perkara ini, anda boleh menambah fungsi attr tersuai pada funcMap templat anda:
funcMap := template.FuncMap{ "attr": func(s string) template.HTMLAttr { return template.HTMLAttr(s) }, "safe": func(s string) template.HTML { return template.HTML(s) }, }
Dengan dengan fungsi ini, anda boleh mengubah suai templat seperti berikut:
<option {{.attr | attr}}>test</option> {{.html | safe}}
Ini memastikan nilai atribut selamat melarikan diri, sambil membenarkan kandungan HTML dipaparkan sebagai mentah.
Dengan memahami tujuan "ZgotmplZ" dan menggunakan teknik melarikan diri yang sesuai, anda boleh menghalang kandungan yang tidak selamat daripada mencapai konteks yang tidak selamat dalam anda Gunakan templat HTML, mengekalkan integriti dan keselamatan aplikasi web anda.
Atas ialah kandungan terperinci Apakah Menyebabkan 'ZgotmplZ' dalam Templat HTML Go dan Bagaimana Ia Boleh Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!