Saya memiliki kotak teks posting khusus yang ingin saya bersihkan wp_kses
sebelum saya memperbarui meta posting saya.
Saya mencari contoh $allowed
pengaturan umum , tetapi saya hanya melihat contoh ini:
$allowed = array(
'a' => array( // on allow a tags
'href' => array() // and those anchors can only have href attribute
)
);
Apa itu wp_kses
$allowed
pengaturan khas ? Bisakah seseorang memberikan contoh untuk apa mereka biasanya menyaring?
Jawaban:
Saya tidak akan setuju dengan solusi yang diposting oleh @ JaredCobb,
wp_kses()
jauh lebih fleksibel daripada metode yang ia sajikan. Itu dapat menghapus atribut yang tidak diinginkan dari tag tanpa menghancurkan tag itu sendiri. Misalnya, jika pengguna memasukkan<strong class='foo'>
,wp_kses()
akan kembali<strong>
jika Anda tidak mengizinkan kelas, sedangkanstrip_tags()
akan menghapus<strong>
sepenuhnya.@redconservatory: Atribut yang ingin Anda gunakan adalah sebagai berikut:
Ini akan memungkinkan cetak tebal dan miring tanpa atribut, serta tag jangkar dengan
href
atribut ... dan tidak ada yang lain. Ini menggunakan prinsip daftar putih, yang @jaredcobb benar dicatat adalah cara yang lebih baik untuk pergi di sini.sumber
wp_kses
memungkinkan lebih banyak kontrol daripada opsi PHP asli. Saya pikir saya mengatakan itu. Saya menggunakan kata "atribut" juga. Saya mengatakan itu tergantung pada kasus penggunaan Anda. Seseorang yang mencoba melindungi data mereka dari semua tag akan lebih baik menggunakan strip_tags IMHO tetapi itu lebih merupakan preferensi saya daripada yang lainnya. Bersulang.Saya akan mulai dengan
$allowedtags
array yang sama yang digunakan WordPress untuk komentar mereka. Anda dapat menemukan larik mereka di[wordpress directory]/wp-includes/kses.php
file. Ini tampak seperti default yang masuk akal bagi saya, dan titik awal yang baik. Berikut ini adalah susunan mereka ...Saya TIDAK akan menggunakan PHP
strip_tags
sebagai penggantiwp_kses
.Anda tidak boleh menggunakan strip_tag untuk memfilter konten pengguna yang tidak dikenal!
Saya telah membuat video singkat yang menjelaskan Mengapa WordPress 'wp_kses () lebih baik daripada strip_tags () PHP untuk keamanan .
sumber
Saya hanya menggunakan
wp_kses
ketika saya secara khusus perlu membolehkan / memfilter atribut tag HTML (misalnya, saya ingin mereka diizinkan memiliki<image>
tag, dengansrc=""
atribut tetapi saya tidak ingin mereka dapat melakukannya tetapihref=""
ataustyle=""
atau apa pun pada tag gambar. Dalam hal ini,wp_kses
sangat berguna karena (seperti yang Anda lihat dalam contoh yang Anda buat) Anda dapat memfilter ke bawah secara khusus. Saya jarang menggunakannyawp_kses
karena saya hanya menemukan beberapa PHP asli fungsi (di bawah) melakukan trik dan lebih mudah dimengerti ketika saya melihat kode beberapa bulan kemudian.Jika Anda ingin sepenuhnya menghapus tag HTML (kecuali mungkin mengizinkan beberapa) maka saya selalu menggunakan
strip_tags
. Anda dapat mengirimkan serangkaian tag yang diizinkan (seperti<p> <br> <strong>
) atau apa pun tag berbahaya lainnya yang Anda suka. Hal ini memungkinkan pengguna untuk dapat memiliki beberapa kontrol atas format, jika itu berlaku untuk kasus penggunaan Anda. Saya sukastrip_tags
karena dibutuhkan pendekatan daftar putih untuk membersihkan data Anda. (Artinya semuanya dilucuti kecuali apa yang Anda daftar putih secara eksplisit).Jika tujuan Anda adalah mengizinkan mereka untuk memasukkan HTML apa pun ke dalam konten, tetapi Anda hanya ingin menunjukkan teks mereka ketika mereka memasukkannya (seperti contoh kode) kemudian gunakan
htmlspecialchars
. Ini akan mengonversi karakter HTML menjadi rekanan yang disandikan sehingga Anda dapat dengan aman menampilkannya ke halaman.Anda mungkin menemukan kode yang menggunakan
str_replace
"terlihat" untuk tag buruk suka atau atau apa pun. Saya benar-benar tidak merekomendasikan pendekatan itu karena dibutuhkan pendekatan daftar hitam untuk membersihkan data dan Anda harus terus-menerus memastikan bahwa daftar hitam Anda mutakhir.Saya kira untuk menyimpulkan, itu tergantung pada apa yang digunakan untuk metabox Anda. Jika Anda melindungi terhadap input dari pengguna (yang mungkin jahat) saya akan merekomendasikan
strip_tags
dan hanya mengizinkan beberapa tag yang tidak berbahaya. Jika Anda memiliki kasus bisnis yang bagus untuk benar-benar mengelola tag dan atribut spesifik konten penggunause wp_kses
,.sumber
wp_kses()
melakukan semua yangstrip_tags()
dilakukan dan lebih banyak lagi? Saya semua untuk menjaga hal-hal sederhana, tetapi saya juga berpikir ada argumen untuk tidak "mengejutkan" siapa pun.wp_kses()
adalah "cara Wordpress", dan karena kita sedang menulis kode Wordpress, ada argumen bahwa itu mungkin pilihan yang lebih baik. Plus, jika pada titik tertentu di masa mendatang, kami ingin memasukkan kombinasi tag / atribut tertentu, menggunakanwp_kses()
dari awal tidak memerlukan refactor.Ini dia. Ini berfungsi baik di WordPress dan di luar WordPress.
sumber
Anda juga bisa menggunakan fungsi wp_kses_post yang digunakan pada konten posting dan hanya membutuhkan data sebagai parameter.
Info lebih lanjut di sini: http://codex.wordpress.org/Function_Reference/wp_kses_post
sumber
@Svetoslav Marinov
Saya telah menambahkan kode ini tepat setelah $ buffer = trim ($ buffer);
untuk mencoba membersihkan html dan menghindari menyisipkan karakter tersembunyi yang melanggar kode, tetapi tidak berhasil, ia membersihkan html, tetapi karakter tersembunyi masih tetap ada.
sumber