Haruskah output HTML diteruskan melalui esc_html () AND wp_kses ()?

11

Saya bingung tentang perbedaan penggunaan esc_html()dan wp_kses(). Saya mengerti bahwa esc_html()mengubah karakter khusus ke entitas HTML mereka, dan yang wp_kses()menghapus tag yang tidak diinginkan (misalnya, <script>), tetapi saya tidak yakin dalam konteks apa mereka harus digunakan bersama-sama atau secara terpisah.

Jika saya menjalankan beberapa HTML yang tidak tepercaya esc_html(), maka setiap JavaScript akan ditampilkan dalam teks biasa daripada di-render oleh browser, jadi aman pada saat itu, benar? Satu-satunya alasan untuk menjalankannya wp_kses()adalah untuk menghindari skrip mentah ditampilkan?

Pada dasarnya, esc_html()membuatnya aman, dan wp_kses()membuatnya cantik. Apakah itu benar?

Ian Dunn
sumber

Jawaban:

16

Aturan umum, setidaknya seperti yang didukung oleh Mark Jaquith , adalah sanitasi pada input, melarikan diri pada output (akibat wajar dari aturan ini adalah sanitasi awal, melarikan diri terlambat ).

Jadi: gunakan filter sanitasi (seperti kses()famili) saat menyimpan data yang tidak dipercaya dalam database , dan gunakan filter yang lolos (mis. esc_*()Keluarga) saat mengeluarkan data yang tidak dipercaya dalam template .

Chip Bennett
sumber
14

Fungsi kses harus digunakan ketika Anda ingin mengizinkan beberapa html menjadi hasilnya. Misalnya, komentar mengizinkan beberapa HTML di dalamnya untuk dicetak tebal, miring, tautan, dan semacamnya.

Fungsi esc_html harus digunakan untuk keluar sepenuhnya dari html. Tidak ada HTML yang akan melewatinya tanpa dikonversi ke sesuatu yang akan ditafsirkan sebagai non-HTML oleh browser.

Otto
sumber