Bagaimana dan kapan menggunakan filter_xss () dan check_plain ()?

11

Ada banyak file templat seperti ini views-view-fields--magazine--magazine.tpl.phpdi situs web saya. bagaimana dan kapan saya harus menggunakan filter_xss () dan check_plain () untuk meningkatkan keamanan? misalnya ini kodenya:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

Bagaimana saya bisa menerapkan fungsi-fungsi itu di dalamnya?

M ama D
sumber
Gunakan filter_xss()ketika Anda ingin memfilter XSS dari konten yang berpotensi berbahaya (yaitu konten dari pengguna yang tidak dipercaya), dan check_plain()ketika Anda ingin melarikan diri karakter khusus HTML dari string
Clive

Jawaban:

13

Pertama, baca tentang ini di API Drupal:

Jadi check_plain()mengkodekan karakter khusus yang memiliki arti khusus dalam HTML (seperti <dan &) ke dalam entitas teks biasa (yaitu &lt;dan &amp;masing - masing) yang akan membuat ini diterjemahkan secara harfiah (tidak diartikan sebagai HTML) ketika string yang kemudian ditampilkan sebagai bagian dari halaman dengan Markup HTML. Fungsi ini filter_xss()memfilter string HTML untuk mencegah kerentanan lintas-situs-scripting (XSS). Itu melakukan empat hal:

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

Kedua fungsi digunakan untuk membersihkan data dari pengguna untuk memastikan bahwa setiap injeksi pengguna dinetralkan sebelum data diberikan di situs Anda.

Anda tidak pernah melewati string yang sama melalui keduanya .

Jika Anda menggunakan check_plain()maka string yang diteruskan ke fungsi seharusnya digunakan sebagai teks biasa (bukan HTML). Maka filter_xss()tidak diperlukan, karena check_plain()akan selalu membuat teks string sederhana.

Jika Anda menggunakan filter_xss(), maka string yang diteruskan ke fungsi seharusnya HTML, dan check_plain()akan mengacaukannya.

Ketika saya melihat templat yang Anda gunakan sebagai contoh, tampak bagi saya seolah ketiga bidang yang diteruskan print()berasal dari konten yang sudah disanitasi, dan tidak perlu sanitasi lagi.

Namun, jika Anda membuat modul Anda sendiri yang mengumpulkan input pengguna tanpa melewati itu melalui filter teks "aman" seperti "Filtered HTML" atau "Plain", Anda harus menggunakan fungsi-fungsi ini untuk keperluan sanitasi.

Radikal bebas
sumber
Di mana saya dapat memeriksa input yang berasal dari pengguna? misalnya ada jenis konten dan pengguna anonim diizinkan membuat simpul semacam itu.
M ama D
@Drupalis, Anda tidak boleh mengizinkan pengguna Anonim menggunakan format teks "tidak aman". Arahkan ke Administrasi »Konfigurasi» Penulisan konten »Format Teks . Format teks "aman" yang menyertai Drupal adalah "Filtered HTML" dan "Plain text". Jika ini adalah satu - satunya format yang diizinkan untuk pengguna Anonim, Drupal melakukan pemeriksaan yang diperlukan untuk Anda untuk semua jenis simpul bawaan dan jenis simpul apa pun yang Anda buat dengan fitur Bidang inti . Jika use case Anda berbeda dari ini, ajukan pertanyaan baru yang menguraikan use case.
Radikal Gratis
Pengguna anonim hanya diizinkan untuk menggunakanplain text
M ama D
@Drupalis, tidak apa-apa. Tidak perlu menggunakan fungsi-fungsi ini untuk membersihkan teks biasa.
Free Radical
3
@ ARUN, tidak. Praktik Drupal standar adalah untuk selalu menyimpan dengan tepat apa yang diketik pengguna dalam DB, dan untuk membersihkan teks sebelum rendering.
Radikal Gratis