Saya mencoba memahami sanitasi data (bukan validasi data) untuk membantu saya menulis tema aman untuk WordPress. Saya telah mencari di internet mencoba menemukan panduan komprehensif untuk pengembang tema yang merinci praktik terbaik. Ada beberapa sumber yang saya temui termasuk halaman codex berjudul Validasi Data, meskipun tidak ada yang berguna bagi saya. Halaman codex mencantumkan fungsi sanitasi yang tersedia, penggunaannya dan apa yang mereka lakukan, tetapi gagal menjelaskan mengapa Anda akan menggunakan yang satu di atas yang lain atau dalam situasi apa Anda akan menggunakan fungsi sanitasi tertentu. Tujuan dari posting ini adalah untuk meminta setiap orang untuk berkontribusi contoh kode buruk / tidak bersih dan bagaimana itu harus ditulis ulang untuk sanitasi yang tepat. Ini bisa menjadi kode umum untuk membersihkan judul posting atau mengirim thumnails src atau kode yang lebih rumit yang menangani sanitasi$_POST
data untuk permintaan Ajax.
Selain itu, saya ingin tahu apakah fungsi WordPress untuk menambah / memperbarui basis data (mis. Yang disebutkan dalam blok kode di bawah) secara otomatis menangani pekerjaan sanitasi untuk Anda? Jika ya, apakah ada pengecualian ketika Anda akan mengambil tindakan tambahan untuk membersihkan data yang dikirim ke fungsi WordPress ini?
add_user_meta
update_user_meta
add_post_meta
update_post_meta
//just to name a few
Juga, apakah sanitasi perlu dilakukan secara berbeda ketika menggemakan HTML dalam PHP dibandingkan dengan PHP inline HTML? Agar lebih jelas tentang apa yang saya minta, inilah kodenya:
<?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?>
<div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div>
Kedua pernyataan di atas mencapai hal yang sama. Tetapi apakah mereka perlu diberkati secara berbeda?
Jawaban:
Halaman kodeks ini menjelaskannya dengan cukup baik menurut saya.
Mungkin fungsi yang paling penting dan umum digunakan
esc_attr
. Ambil contoh ini:Jika
$author_name
berisi"
karakter Anda mendapatkan atribut Anda ditutup, dan jika karakter itu diikuti olehonclick="do_something();"
itu bisa menjadi lebih buruk :)Melakukan
print esc_attr($author_name)
memastikan bahwa karakter tersebut dikodekan, dan browser tidak melakukan hal-hal yang seharusnya tidak dilakukan.Ada satu kasus di mana Anda tidak membutuhkannya: ketika Anda mengharapkan angka, dalam hal ini Anda bisa memasukkan data input ke integer, misalnya:
Meta * fungsi yang Anda daftarkan di sana sudah berhati-hati dengan membersihkan input untuk penyimpanan basis data, jadi Anda tidak perlu khawatir tentang itu.
The
wpdb->prepare()
Metode perlu digunakan ketika Anda melakukan DB query sendiri. Ini sebuah contoh:Kata kunci
%s
dan%d
akan diganti dengan $ _POST nilai sanitasi Anda.Kesalahan yang sangat umum yang saya lihat di banyak plugin di repositori WP.org adalah untuk melewatkan permintaan yang sudah disiapkan untuk itu (dan tidak siap), seperti:
Jangan lakukan ini :)
Tidak.
sumber
Video ini oleh Mark Jaquith menjelaskan semuanya untuk saya. http://wordpress.tv/2011/01/29/mark-jaquith-theme-plugin-security/
sumber