Apakah check_plain () cukup?

16

Apakah check_plain () cukup untuk menampilkan kembali teks yang dimasukkan oleh pengguna di browser, atau haruskah saya tetap memfilter dengan filter_xss () ?

Citricguy
sumber

Jawaban:

26

Saya membayangkan pertanyaannya adalah tentang menggunakan check_plain(filter_xss($string)), atau filter_xss(check_plain($string)).

check_plain()dan filter_xss()memiliki dua tujuan yang berbeda, dan sebaliknya:

  • check_plain() menyandikan karakter khusus dalam string teks biasa yang kemudian ditampilkan sebagai HTML.
  • filter_xss()memfilter string HTML untuk mencegah kerentanan lintas-situs-scripting (XSS). Secara khusus tujuannya adalah:

    • Menghapus karakter dan konstruk yang dapat memperdayai peramban
    • Memastikan semua entitas HTML terbentuk dengan baik
    • Memastikan semua tag HTML dan atribut terbentuk dengan baik
    • Memastikan tidak ada tag HTML yang berisi URL dengan protokol yang tidak diizinkan (mis. Javascript :)

Jika Anda menggunakan check_plain(), string yang diteruskan ke fungsi seharusnya digunakan sebagai teks biasa; dalam hal demikian, filter_xss()tidak perlu. Jika Anda menggunakan filter_xss(), maka string yang diteruskan ke fungsi seharusnya HTML, dan check_plain()tidak perlu.

Jika pertanyaannya adalah tentang menggunakan check_plain()dan filter_xss()pada bagian berbeda dari string yang sama, maka, seperti yang ditunjukkan greggles dalam komentarnya, Anda dapat menggunakan (misalnya) check_plain()pada konten atribut tag, dan filter_xss()pada seluruh tag HTML.

kiamlaluno
sumber
5
filter_xss dimaksudkan untuk digunakan pada seluruh bagian html. Jika Anda menggunakan filter_xss pada atribut html itu tidak akan menyaringnya dengan benar. check_plain dapat digunakan untuk memfilter atribut html dengan aman. Lihat juga drupalscout.com/knowledge-base/… dan drupalscout.com/knowledge-base/… untuk info lebih lanjut tentang penggunaan fungsi-fungsi ini.
Greggles