Tidak perlu < Melarikan diri dalam Templat HTML: Menyelesaikan dengan teks/templat
Isu terbaharu timbul dalam alat pembangunan yang menggunakan templat untuk penjanaan fail, khususnya readmes dan lesen. Semuanya beroperasi dengan lancar, kecuali untuk keadaan di mana < watak akan berubah menjadi <. Walau bagaimanapun, > watak kekal tidak terjejas.
Untuk menggambarkan isu ini, pertimbangkan coretan kod berikut:
<code class="pawn">#include <{{.Repo}}></code>
Di sini, parameter Repo sepatutnya telah dimasukkan seperti yang dijangkakan, menghasilkan:
#include <sometext>
Walau bagaimanapun, keputusan sebenar ialah:
#include &lt;sometext>
Analisis dokumentasi tidak memberikan penjelasan yang jelas untuk tingkah laku ini. Ia kelihatan tidak logik untuk > watak kekal tidak terjejas semasa < watak mengalami pelarian.
Penyelesaian terletak pada memahami tujuan html/template. Ia direka khusus untuk menjana output HTML, menyediakan pelarian sensitif konteks automatik untuk mengelakkan suntikan kod. Dokumentasi dengan jelas menyatakan:
html/template hanya untuk menjana output HTML. Ia menyediakan antara muka yang sama seperti teks/templat pakej dan harus digunakan bukannya teks/templat apabila outputnya ialah HTML.
Apabila output bukan HTML, seperti yang berlaku di sini dengan fail readme, ia adalah lebih sesuai menggunakan teks/templat. Enjin templat ini tidak melepaskan data, menyelesaikan isu penukaran aksara yang tidak perlu. Dengan bertukar kepada teks/templat, output yang dijangkakan telah dicapai:
#include <sometext>
Perbezaan antara html/templat dan teks/templat ini memastikan bahawa pelarian sensitif konteks digunakan hanya apabila perlu, menghalang penukaran aksara yang tidak dijangka dalam bukan -Senario output HTML.
Atas ialah kandungan terperinci Kenapa `` saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!