Saya membangun jenis posting khusus di mana kita dapat menemukan textarea / tinymce standar yang dihasilkan oleh wp_editor()
dan saya menghadapi masalah untuk bagian penyimpanan.
Jika saya menyimpan konten dengan kode berikut:
update_post_meta( $post_id, $prefix.'content', $_POST['content'] );
Semuanya berfungsi dengan baik tetapi tidak ada keamanan (sanitasi, validasi dll ...)
Jika saya menyimpan konten dengan kode berikut:
update_post_meta( $post_id, $prefix.'content', sanitize_text_field($_POST['content']) );
Saya memecahkan masalah keamanan tetapi saya kehilangan semua gaya, media dll. Dalam konten.
Apa yang bisa menjadi cara yang baik untuk menyimpan konten dengan semua gaya yang diterapkan, media yang dimasukkan tetapi termasuk sanitasi?
Saya membaca sedikit tentang wp_kses()
tetapi saya tidak tahu bagaimana saya bisa menerapkan filter yang baik. (Mengizinkan tag umum, yang mana yang harus saya blokir? Dll.)
wp_kses
keluarga.Jawaban:
Singkatnya: tergantung pada konteks Anda, data di dalam editor Anda.
wp_kses()
sangat membantu dan Anda dapat menentukan HTML yang diizinkan khusus. Alternatif Anda dapat menggunakan fungsi default, sepertiwp_kses_post
atauwp_kses_data
. Fungsi ini sangat membantu dalam memastikan bahwa HTML yang diterima dari pengguna hanya berisi elemen yang terdaftar putih. Lihat https://codex.wordpress.org/Data_Validation#HTML.2FXML_FragmentsWordPress mendefinisikan lebih banyak fungsi untuk membersihkan input, lihat https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data dan https://codex.wordpress.org/Data_Validation Halaman ini sangat membantu.
Namun dalam konteks Anda harus
wp_kses_post
fungsi pilihan yang tepat.sumber
Mencoba
htmlentities()
akan mengonversi semua karakter yang memiliki setara entitas karakter HTML ke yang setara.sanitize_text_field()
kemudian akan memeriksa karakter UTF-8 yang tidak valid dan menghapusnya. Ini sekarang dapat disimpan dalam database.html_entity_decode()
akan mengonversi entitas HTML menjadi setara dengan tag HTML merekasumber
Anda dapat melakukan sesuatu seperti ini:
@fuxia: seperti OP menulis:
"Saya membaca sedikit tentang wp_kses () tapi saya tidak tahu bagaimana saya bisa menerapkan filter yang baik. (Mengizinkan tag umum, yang mana yang harus saya blokir? dll ..)"
wp_kses melakukan hal berikut:
"Fungsi ini memastikan bahwa hanya nama elemen HTML yang diizinkan, nama atribut dan nilai atribut ditambah hanya entitas HTML yang waras yang akan muncul dalam $ string. Anda harus menghapus garis miring dari tanda kutip ajaib PHP sebelum Anda memanggil fungsi ini. "
https://codex.wordpress.org/Function_Reference/wp_kses
Kode saya digunakan
wp_kses
dengan "Mengizinkan tag umum". Apa saja tag yang umum? Daftar tersedia untuk dibaca di tautan yang diberikan. Daftarnya panjang, jadi saya tidak menempelkannya di sini.https://codex.wordpress.org/Function_Reference/wp_kses_allowed_html
Saya pikir textarea itu sendiri tidak boleh diizinkan di textarea.
@bueltge
wp_kses_post melakukan hal yang sama, kecuali mengizinkan tag '<textarea>', yang - saya pikir - tidak boleh.
https://core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/kses.php#L1575
sumber
wp_slash Informasi lebih lanjut.
sumber