Saat ini saya sedang mengembangkan sebuah plugin dan kemungkinan besar saya akan merilisnya di repositori plugin publik sehingga orang lain dapat menggunakannya.
Plugin akan menggunakan API dan untuk menggunakan API ini Anda harus memberikan nama pengguna dan kata sandi. Jadi plugin saya perlu menyimpan kredensial login ini dalam database. Saya tidak ingin menyimpan ini dalam teks biasa meskipun API membutuhkannya dalam teks biasa.
Jadi pertanyaan saya adalah bagaimana cara menyimpan sedikit informasi sensitif ini? Hashing keluar, jadi harus semacam enkripsi.
Di WordPress adakah kunci unik yang bisa digunakan yang akan berbeda dari blog ke blog? Apa fungsi php yang harus saya gunakan untuk mengenkripsi dan mendekripsi? Saya mencari fungsi yang kemungkinan besar akan berfungsi pada semua instalasi WP.
Jawaban:
Sementara saya setuju dengan jawaban sebelumnya, untuk menjawab pertanyaan yang sebenarnya Anda tanyakan, yang muncul di pikiran adalah menggunakan salah satu dari konstanta ini untuk wp-config.php:
Mereka dimaksudkan untuk menjadi unik di seluruh instalasi wordpress - dan merupakan satu-satunya pilihan untuk kunci yang sudah ada yang dapat ditemukan di wordpress. Alternatifnya adalah dengan menambahkan konstanta serupa Anda sendiri yang dibangun dengan mem-hashing salah satunya terhadap alamat email admin atau sejenis - dan kemudian menyimpannya dalam opsi pengaturan tersembunyi - untuk melindungi dari kehilangan kunci Anda jika seseorang secara tidak sengaja memodifikasi kunci setelah Anda plugin terpasang. Bahayanya adalah, jika mereka tidak dibuat unik pada instalasi awal, tetapi admin / pemilik situs memutuskan untuk memperbaiki kegagalan setelah fakta, mereka tidak seharusnya secara tidak sengaja merusak enkripsi kata sandi Anda.
Adapun fungsi enkripsi / dekripsi - pencarian Google cepat mengembalikan daftar berikut dengan kode yang tampaknya sesuai dengan tagihan: http://maxvergelli.wordpress.com/2010/02/17/easy-to-use-and-strong- enkripsi-dekripsi-php-fungsi /
Berikut beberapa dokumentasi enkripsi AES yang digunakan di sini: http://www.chilkatsoft.com/p/php_aes.asp
sumber
Ini persisnya keadaan yang dirancang untuk OAuth.
Dari beranda OAuth :
Keuntungan dari OAuth adalah Anda tidak perlu menyimpan kata sandi pengguna. Ketika mereka pertama kali mengatur plugin, mereka diminta untuk masuk dengan nama pengguna dan kata sandi melalui aplikasi (biasanya sebuah halaman di-host di server yang sama dengan API dan dimuat baik di halaman redirect, thickbox, atau iframe) .
Setelah pengguna masuk, server (sistem Anda) membuat kunci aman yang dapat digunakan sistem mereka (WordPress) untuk berinteraksi dengan API. Kunci ini unik untuk akun pengguna dan situs - dan ini memberikan izin aplikasi (di WordPress) untuk melakukan hal-hal dengan API atas nama pengguna tanpa menyampaikan informasi otentikasi mereka setiap kali.
Jika Anda ingin melihat contoh tindakan ini, periksa Jetpack .
Ketika Anda mengaktifkan plugin, itu mengeluh tidak terhubung. Ketika Anda "menghubungkan" itu, Anda memasukkan kredensial Anda melalui WordPress.com dan mengatur interaksi OAuth antara WordPress dan API mereka.
Tetapi Anda hanya perlu melakukan ini sekali saja dan nama pengguna / kata sandi WordPress.com Anda tidak pernah disimpan dalam basis data WordPress lokal Anda.
sumber
Ini adalah masalah penting, karena banyak layanan masih tidak mendukung OAuth dan menyimpan kata sandi dalam basis data opsi membuatnya dapat dibaca oleh setiap plugin Wordpress tunggal (lihat komentar saya di atas).
Ini bukan (belum) jawaban nyata untuk pertanyaan, tetapi juga terlalu lama untuk komentar. Saya berharap untuk memulai diskusi dengan ini, dengan tujuan menghasilkan solusi "terbaik" untuk masalah "tidak dapat diselesaikan" ini.
Ide dasar yang membuat saya berpikir bahwa mengenkripsi kata sandi adalah mungkin adalah sebagai berikut:
Ada satu informasi rahasia yang dimiliki setiap pengguna: kata sandi Wordpress mereka. Seharusnya dimungkinkan untuk menyimpan kredensial ke layanan pihak ketiga yang dienkripsi dengan bentuk turunan rahasia kata sandi dan hanya mendekripsi mereka ketika pengguna login.
Dengan cara ini seharusnya dimungkinkan untuk setidaknya membuat tidak mungkin untuk mencuri kata sandi dari salinan file dan database Wordpress. Itu tidak dapat memecahkan masalah plugin lain mencuri kredensial, karena setiap plugin dapat menangkap kata sandi teks biasa saat login.
Sebenarnya dekripsi agak mudah dilakukan: Misalkan kita sudah memiliki versi terenkripsi dari layanan pihak ketiga yang disimpan dalam database, kita dapat menghubungkan ke dalam
'authenticate'
filter atau dengan menimpawp_authenticate()
fungsi, menghasilkan hash asin dari kata sandi pengguna teks biasa (oleh berartiwp_hash_password()
), simpan kata sandi yang hash sebagai kunci enkripsi di suatu tempat pribadi sampai pengguna logout (gunakan'wp_logout'
kait untuk menghapus kunci) dan menggunakannya setiap kali kita membutuhkan kata sandi pihak ketiga untuk mendekripsi nilai terenkripsi dalam database.Walaupun saya merasa seharusnya membuat ini berhasil, ada beberapa masalah yang belum terpecahkan:
'authenticate'
. Pengguna dapat diminta untuk masuk untuk menjaga periode sampai periode ini singkat.'authenticate'
hanya berjalan ketika pengguna benar-benar masuk?sumber