Apa kelemahan keamanan umum yang perlu saya cari? [Tutup]

16

Sebagai pengembang plugin wannabe WP, apa kelemahan / lubang keamanan utama yang harus saya cari?

Saya akan membuat plugin baru dengan panel konfigurasi (yaitu bidang input dan lainnya). Apa yang harus saya perhatikan?

Misalnya, apakah sanitasi data menjadi masalah besar karena berada di / wp-admin / area? Bisakah seseorang yang jahat langsung menekan halaman plugin saya dan mengirim permintaan POST atau semacamnya?

Terima kasih!

MrBatman
sumber

Jawaban:

16

Berikut adalah daftar periksa yang dimodifikasi, berdasarkan pada pengaturan saya saat ini (sedang dalam proses) / daftar keamanan data yang digunakan untuk meninjau Tema (prinsip-prinsipnya tidak berbeda untuk Plugin daripada untuk Tema):

  1. Plugin harus mengawali semua opsi, fungsi kustom, variabel kustom, dan konstanta kustom dengan plugin-slug.

  2. Plugin harus mengimplementasikan Opsi Plugin dan halaman Pengaturan Plugin secara sengaja, daripada mengandalkan skrip copy-dan-tempel dari tutorial situs web, seperti yang di bawah ini, yang sudah usang, dan tidak menyertakan keamanan data yang tepat:

  3. Plugin harus menggunakan add_options_page()fungsi untuk menambahkan Halaman Pengaturan Plugin ke Settingsmenu, daripada menggunakan add_menu_page()untuk menambahkan menu tingkat atas.

  4. Plugin harus menggunakan kapabilitas yang sesuai (mis. manage_options) Untuk kapabilitas menambahkan halaman pengaturan.

  5. Plugin harus menyimpan opsi dalam satu array, daripada membuat beberapa opsi untuk halaman pengaturan. Penggunaan API Pengaturan (lihat di bawah) akan menangani ini.

  6. Plugin harus menggunakan Pengaturan API (lihat di bawah) untuk mendapatkan dan menyimpan data input formulir daripada mengandalkan $_POSTdan $_REQUESTdata secara langsung.

  7. Untuk kotak centang dan opsi pilih, Plugin harus menggunakan checked()dan selected()fungsinya masing-masing untuk menghasilkan checked="checked"dan selected="selected".

  8. Plugin harus memvalidasi dan membersihkan semua data yang tidak tepercaya sebelum memasukkan data ke dalam basis data, dan harus melepaskan semua data yang tidak dipercaya sebelum menjadi output di bidang formulir Pengaturan dan sebelum menjadi output dalam file templat Tema:

  9. Plugin harus digunakan esc_attr()untuk input teks dan esc_html()(atau esc_textarea()dalam WP 3.1) untuk textareas.

  10. Plugin harus secara eksplisit menyediakan Pengaturan-halaman nonce memeriksa, jika tidak menggunakan Pengaturan API:

  11. Juga sangat disarankan bahwa Plugin menggunakan API Pengaturan, yang lebih mudah digunakan, lebih aman, dan menangani banyak kerja keras halaman pengaturan:

Untuk tutorial yang baik tentang cara menggunakan Pengaturan API, lihat:

Jika Anda ingin memeriksa tema dengan halaman pengaturan tema yang aman dan berkode solid, periksa tema ini:
http://wordpress.org/extend/themes/coraline

Chip Bennett
sumber
Dan saya harus menambahkan: jika ada yang melihat sesuatu yang hilang dari daftar, silakan komentar , sehingga saya dapat menambahkannya ke daftar periksa, untuk membantu meningkatkan tinjauan keamanan untuk Tema!
Chip Bennett
Wow, daftar yang bagus, terima kasih. Saya ingin tahu apakah ada manfaatnya menjadikan pertanyaan ini sebagai wiki komunitas dan menjadikan masing-masing poin ini jawaban mereka sendiri untuk memungkinkan diskusi dan elaborasi dengan lebih baik?
goldenapples
Saya akan baik-baik saja dengan itu, tetapi tidak ingin membajak pertanyaan poster asli (kecuali kalau itu yang dilakukan di StackExchange? Saya masih baru di sini ...).
Chip Bennett
Saya juga tidak tahu ... serahkan pada kebijaksanaan moderator, saya kira. Sepertinya ini akan menjadi pertanyaan wiki yang hebat, karena praktiknya yang begitu penting dan terbaik masih berjalan. @ Pertama?
goldenapples
Saya bisa membuat Pertanyaan baru, jika perlu?
Chip Bennett
11

Ada dua aspek untuk ini:

  1. Prinsip dasar.

    • Apa pun yang ditulis ke dalam basis data harus diperiksa untuk injeksi SQL.
    • Apa pun yang dicetak ke layar harus diperiksa agar tidak mencetak JavaScript yang berbahaya.
    • Setiap kali seseorang melakukan sesuatu itu harus diperiksa bahwa itu adalah niatnya untuk melakukannya dan dia memiliki kemampuan yang sesuai.
    • Ada banyak hal lagi yang Anda atau saya tidak akan pernah berpikir untuk memeriksa.
  2. Spesifik.

    • WordPress modern sangat memperhatikan keamanan dan bertujuan untuk memudahkan pengembang.
    • Jadi untuk sebagian besar hal yang ingin Anda lakukan ada kemungkinan besar cara untuk menyelesaikannya dengan WP API.
    • Jadi, apa pun yang Anda lakukan langkah pertama Anda akan baik-baik saja dan mempelajari API yang sesuai.
    • Semakin jauh Anda dari fungsionalitas umum dan sederhana, semakin banyak hal kompleks yang perlu Anda pelajari dan laksanakan.
Jarang
sumber
1
  1. Tambahkan defined('ABSPATH') or die('Access denied');di setiap skrip plugin yang digunakan oleh wordpress secara langsung
  2. Tambahkan file index.php kosong di setiap direktori
  3. Tambahkan .htaccess di direktori plugin dengan instruksi yang diperlukan untuk mencegah akses langsung ke file plugin tertentu.
Egor
sumber