Apa perbedaan antara esc_html, esc_attr, esc_html_e, dan sebagainya?

12

Saya mendapat umpan balik dari petugas keamanan dan dia menunjukkan bahwa saya harus menggunakan melarikan diri dari input pengguna dalam kode saya. Jadi saya telah melakukan penelitian dan menemukan fungsi pelarian.

Apa perbedaan di antara mereka? Kapan saya harus menggunakan esc_html()dan kapan esc_attr()? Dan kapan saya harus menggunakan fungsi-fungsi ini _e()di akhir?

botak
sumber
1
Sudahkah Anda membaca dokumentasinya ?
Jacob Peattie
2
Ya dan itu semakin membingungkan saya :(
baldrick

Jawaban:

19

esc_html()lolos string sehingga tidak diuraikan sebagai HTML. Karakter seperti <dikonversi menjadi &lt;, misalnya. Ini akan terlihat sama untuk pembaca, tetapi itu berarti bahwa jika nilai yang dihasilkan adalah <script>maka tidak akan ditafsirkan oleh browser sebagai tag skrip yang sebenarnya.

Gunakan fungsi ini setiap kali nilai yang dikeluarkan tidak boleh mengandung HTML.

esc_attr()lolos string sehingga aman untuk digunakan dalam atribut HTML, seperti class=""misalnya. Ini mencegah nilai dari pelepasan atribut HTML. Misalnya, jika nilainya "><script>alert();</script>dan Anda mencoba untuk mengeluarkannya dalam atribut HTML, itu akan menutup tag HTML saat ini dan membuka tag skrip. Ini tidak aman. Dengan keluar dari nilai, itu tidak akan dapat menutup atribut dan tag HTML dan menghasilkan HTML yang tidak aman.

Gunakan fungsi ini saat mengeluarkan nilai di dalam atribut HTML.

esc_url() lolos string untuk memastikan bahwa itu URL yang valid.

Gunakan fungsi ini saat mengeluarkan nilai di dalam atribut href=""atau src="".

esc_textarea()lolos nilai sehingga aman digunakan dalam suatu <textarea>elemen. Dengan keluar dari nilai dengan fungsi ini mencegah nilai menjadi output di dalam <textarea<dari menutup <textarea>elemen dan menghasilkan HTML sendiri.

Gunakan fungsi ini saat mengeluarkan nilai di dalam <textarea>elemen.

esc_html()dan esc_attr()juga memiliki versi yang berakhiran __(), _e()dan _x(). Ini untuk menghasilkan string yang dapat diterjemahkan.

WordPress memiliki fungsi, __(), _e()dan _x(), untuk menghasilkan teks yang dapat diterjemahkan. __() mengembalikan string yang dapat diterjemahkan, _e() menggemakan string yang dapat diterjemahkan, dan _x()mengembalikan string yang dapat diterjemahkan dengan konteks tertentu. Anda mungkin pernah melihatnya sebelumnya.

Karena Anda tidak dapat selalu memercayai file terjemahan berisi nilai-nilai aman, menggunakan fungsi-fungsi ini saat mengeluarkan string yang dapat diterjemahkan memastikan bahwa string yang dihasilkan tidak dapat menyebabkan masalah yang sama seperti yang dijelaskan di atas.

Gunakan fungsi-fungsi ini saat mengeluarkan string yang dapat diterjemahkan.

Jacob Peattie
sumber
2
Perhatikan bahwa secara default, tidak ada perbedaan antara esc_htmldan esc_attr, kode yang sama digunakan (mereka hanya memiliki filter yang tidak digunakan berbeda): wordpress.stackexchange.com/questions/264698/…
baptx
4

esc_htmlakan digunakan di dalam html misalnya antara <p>tag

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr akan digunakan untuk keluar dari nilai atribut pada tag html seperti:

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

berlaku _esampai akhir adalah untuk menggunakannya dengan domain teks dan secara otomatis akan menggemakannya untuk Anda, misalnya:

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

selain _eada juga __yang melakukan hal yang sama _etetapi tidak menggema sehingga Anda dapat menyimpannya dalam variabel.

jrmd
sumber
2
_ebukan hanya untuk gaung, itu untuk lokalisasi. Jadi seharusnya hanya digunakan ketika string dilewatkan ke fungsi, dan harus menyertakan domain teks. Contoh terakhir Anda menyalahgunakannya.
Jacob Peattie
@JacobPeattie salahku, aku akan memperbarui ... EDIT Tetap
jrmd