Seperti yang disarankan dalam pertanyaan ini , saya menambahkan topik ini sebagai pertanyaan baru, untuk diskusi / voting komunitas mengenai praktik terbaik untuk keamanan Plugin / Tema.
Berikut adalah daftar periksa awal, berdasarkan pengaturan saya saat ini (sedang dalam proses) / daftar periksa keamanan data yang digunakan untuk meninjau Tema (prinsip-prinsip seharusnya tidak berbeda untuk Plugin daripada untuk Tema).
Jika Anda ingin memeriksa tema dengan halaman pengaturan tema yang aman dan berkode solid, periksa tema ini:
http://wordpress.org/extend/themes/coraline
Jawaban:
Gunakan Nonces (saat tidak menggunakan Pengaturan API)
Plugin dan Tema harus secara eksplisit menyediakan Pengaturan-halaman sebelum pemeriksaan, jika tidak menggunakan Pengaturan API:
sumber
Sanitasi, validasi, dan lepas data
Bersihkan segala sesuatu yang bisa masuk dan keluar dari (!) Basis data baik ujung depan dan ujung belakang!
Plugin dan Tema harus melakukan validasi data yang tepat:
Keluar dari semua data yang tidak tepercaya sebelum ditampilkan dalam file templat Tema
Plugin dan Tema harus digunakan
esc_attr()
untuk input teks danesc_html()
atauesc_textarea()
untuk area teks.Juga tersedia dari API WordPress adalah
esc_url()
,esc_url_raw()
,esc_js()
danwp_filter_kses()
.Contoh buruk:
Contoh yang baik:
Berikut adalah video hebat Mark Jaquith yang menjelaskan penggunaan fungsi pelarian:
sumber
Hanya gunakan $ _GET / $ _POST / $ _REQUEST dengan hati-hati dan ketika API yang lebih baik tidak tersedia
Plugin dan Tema harus menggunakan API Pengaturan untuk mendapatkan dan menyimpan data input formulir daripada mengandalkan
$_POST
dan$_REQUEST
data secara langsung.sumber
Menggunakan
$wpdb->prepare
Saat membangun kueri khusus melalui
$wpdb
objek, selalu gunakan$wpdb->prepare
untuk mengisi placeholder dengan nilai alih-alih menulis kueri dengan data yang dicampur dengan kode SQL, karenamysql_*
fungsi keluarga telah salah mengajari semua orang.sumber
$wpdb->prepare
adalah tidak sama dengan pernyataan siap.Hati-hati dengan fungsi PHP yang mungkin digunakan untuk menjalankan kode berbahaya
Bacaan yang bagus untuk siapa pun yang menulis PHP: Fungsi PHP yang dapat dieksploitasi di StackOverflow.
Gunakan API Modifikasi Tema
Tema harus menggunakan
set_theme_mod()
dan fungsi terkait bukan skema nama yang ditemukan sendiri.API theme_mod adalah lapisan khusus untuk API pengaturan; itu menjamin nama-nama unik, mendorong semua opsi menjadi satu array dan - dari pengalaman saya - jauh lebih mudah untuk ditangani. Plus, ia menawarkan filter standar untuk plugin - yang bagus untuk interoperabilitas.
Hindari diaktifkan
register_globals
Jangan mengandalkan
register_globals = on
. Sebuah Tema Pro yang klien terakhir saya membeli tidak tepat ini. Saya bisa meretas situs mana pun menggunakan tema ini dalam 5 menit ...ThimbThumb melakukan ini juga (dan masih?).
Jangan membuat file dengan izin akses lebar yang tidak perlu
Jangan membuat file dengan izin akses yang terlalu bebas.
Gunakan SSL jika tersedia
Arahkan Share Anda di Twitter / Facebook / Apa pun tautan ke HTTPS URI jika tersedia. Keamanan pembaca Anda juga penting.
sumber
set_theme_mod()
, terutama, bagaimana menggabungkannya dengan pengaturan API?Simpan data dalam satu array
Plugin dan Tema harus menyimpan opsi dalam satu larik, daripada membuat beberapa opsi untuk halaman pengaturan. Penggunaan API Pengaturan akan menangani ini.
sumber
Periksa kemampuan yang sesuai saat menambah dan mengeluarkan halaman pengaturan
Plugin harus menggunakan kapabilitas yang sesuai (mis.
manage_options
) Untuk kapabilitas menambahkan halaman pengaturan.Tema harus digunakan
edit_theme_options
sebagai kemampuan yang sesuai untuk menambahkan halaman pengaturan.sumber
edit_theme_options
dengan pengaturan API, pengiriman opsi membutuhkan kode untuk memintamanage_options
untuk mengirimkan pembaruan. Tiket Trac terkait dapat ditemukan di sini .edit_theme_options
batasnya, saya pikir mungkin berguna untuk menunjukkan bahwa pengaturan API dalam kondisi saat ini hanya dapat digunakan oleh peran denganmanage_options
kemampuan.Gunakan tutorial dan informasi terbaru
Plugin & Tema harus mengimplementasikan halaman Opsi dan Pengaturan dengan sengaja dan tidak bergantung pada tutorial situs web salin dan rekat yang kedaluwarsa dan tidak menyertakan keamanan data yang tepat, seperti yang tercantum di bawah ini.
Contoh apa yang tidak boleh dilakukan :
Cara membuat halaman opsi untuk tema wordpress Anda (1stwebdesigner.com)
Buat halaman opsi tema WordPress yang mengagumkan bagian 1 (wpshout.com)
sumber
Gunakan Pengaturan API
Plugin dan Tema harus menggunakan Pengaturan API, yang lebih mudah digunakan, lebih aman, dan menangani banyak kerja keras halaman pengaturan:
Untuk tutorial yang baik tentang cara menggunakan Pengaturan API, lihat:
sumber
Untuk kotak centang dan pilih opsi, Plugins dan Tema harus menggunakan
checked()
danselected()
fungsi untuk keluaranchecked="checked"
danselected="selected"
masing-masing.sumber
checked( $theme_options['whatever_option'] )
atauchecked( 'some_value' == $theme_options['whatever_option'] )
. Saya tidak tahu bagaimana ini menjadi lebih ringkas dari itu?Fungsi awalan dan nama variabel
Plugin harus mengawali semua opsi, fungsi kustom, variabel kustom, dan konstanta kustom dengan plugin-slug.
Tema harus mengawali semua opsi, fungsi khusus, variabel khusus, dan konstanta khusus dengan slug tema.
sumber
Gunakan wp_safe_redirect () alih-alih memanggil fungsi tajuk php () langsung ketika mengarahkan ke halaman di domain yang sama.
sumber
Tambahkan halaman pengaturan ke bagian admin menu yang sesuai
Plugin harus menggunakan
add_options_page()
fungsi untuk menambahkan Halaman Pengaturan Plugin keSettings
menu, daripada menggunakanadd_menu_page()
untuk menambahkan menu tingkat atas.Tema harus menggunakan
add_theme_page()
fungsi untuk menambahkan Halaman Pengaturan Tema keAppearance
menu, daripada menggunakanadd_menu_page()
untuk menambahkan menu tingkat atas.sumber