Praktik Terbaik Keamanan untuk Plugin WordPress dan Pengembang Tema
Diterbitkan: 2020-12-09Sebagai pengembang WordPress, ada banyak keputusan yang harus Anda buat tentang apa yang harus dikerjakan. Minat dan prioritas utama Anda adalah untuk membangun tema atau plugin yang luar biasa, dan langkah-langkah keamanan sering kali tidak diperhatikan saat Anda duduk di kursi pengemudi untuk mengerjakan kode. Kapan terakhir kali Anda duduk dan meninjau kode Anda sendiri untuk masalah keamanan? Tidak, saya tidak berpikir begitu
Kiat-kiat ini didasarkan pada pengalaman saya dari mengembangkan plugin di CleverPlugins dan membantu banyak pelanggan agar situs web mereka kembali online setelah diretas. Mengembangkan plugin keamanan seperti WP Security Ninja tidak membuat saya kurang paranoid tentang kode orang lain.
Alasan paling umum untuk situs web yang diretas adalah manajemen kata sandi yang buruk, tetapi itu tidak boleh menjadi alasan untuk menggunakan beberapa cara sederhana untuk melindungi kode Anda.
Saat Anda mengembangkan plugin atau tema, Anda ingin itu menjadi populer dan menginstalnya di sebanyak mungkin situs web. Semakin besar kesuksesan Anda, semakin besar kemungkinan orang akan mencoba menyalahgunakan pekerjaan Anda untuk meretas situs web pengguna Anda.
Karena popularitas WordPress, itu telah menjadi salah satu target paling umum bagi peretas. Jika kerentanan terdeteksi dalam plugin atau tema, itu bisa berarti ribuan, jika tidak ratusan ribu situs web terbuka untuk disalahgunakan.
Sayangnya, sering terjadi kerentanan muncul di produk terkenal, jadi ada baiknya mengambil beberapa langkah keamanan dasar untuk melindungi kode Anda bagi pengguna Anda.
Bagaimana Dengan Tim Peninjau WordPress.org?
Anda mungkin berpikir bahwa tim yang meninjau plugin dan tema sebelum menerbitkan di repositori resmi memeriksa semua jenis masalah keamanan, tetapi tim tersebut kecil dan hanya terdiri dari beberapa orang. Antrian plugin dan tema untuk diperiksa terus bertambah, sehingga waktu yang mereka miliki untuk meninjau masing-masing terbatas.
Namun, jika mereka menemukan sesuatu, mereka mungkin secara otomatis menutup plugin Anda sampai Anda memperbaikinya atau mengirim email peringatan bahwa Anda harus memperbaiki kerentanan sebelum jangka waktu tertentu.
Intinya adalah bahwa setelah plugin atau tema Anda terdaftar di repositori, Anda dapat mendorong pembaruan melalui repositori tanpa penyaringan tambahan, sehingga kerentanan dapat dengan mudah menyelinap masuk kapan saja dan tidak terdeteksi selama hampir semua periode waktu.
Pada dasarnya, memperketat langkah-langkah keamanan plugin Anda terserah Anda, jadi mari kita lihat beberapa cara Anda dapat melindungi produk WordPress Anda dan mencegah diri Anda dari banyak sakit kepala dan berpotensi berdampak negatif pada merek Anda.
Inilah yang dapat Anda lakukan untuk mengembangkan plugin atau tema WordPress Anda dengan aman.
1. Pikirkan tentang keamanan dari semua perspektif!
Anda tidak pernah tahu siapa yang mungkin menggunakan plugin atau tema Anda dan tingkat pemahaman mereka tentang keamanan, jika ada.
Anda tidak pernah tahu siapa yang mungkin menggunakan plugin atau tema Anda dan tingkat pemahaman mereka tentang keamanan, jika ada. Tweet
Administrator, editor, atau pengguna biasa di situs web pelanggan mana pun mungkin tidak menggunakan kata sandi yang aman, dan akun mereka dapat diretas. Jika produk Anda tidak diamankan, akun ini dapat disalahgunakan untuk mendapatkan akses lebih lanjut untuk memasang kode berbahaya di situs web pelanggan Anda.
Anda seharusnya tidak mengharapkan administrator server yang telah mengonfigurasi server tempat situs web berjalan cukup tahu tentang cara melindungi situs web Anda dari situs lain di server yang sama. Jika situs web di-host oleh penyedia besar, Anda dapat mengharapkan situs web "dipisahkan" dengan benar, tetapi Anda tidak tahu di mana produk Anda akan dipasang.
Apakah itu terdengar paranoid? Mungkin. Tetapi, jika dan ketika plugin atau tema Anda menjadi sangat populer, Anda akan dengan senang hati mengambil pendekatan paranoid terhadap keamanan.
Jika dan ketika plugin atau tema Anda menjadi sangat populer, Anda akan dengan senang hati mengambil pendekatan paranoid terhadap keamanan.Tweet
2. Mencegah XSS – serangan Cross-Site Scripting
Yang ini semakin penting karena WordPress menjadi proyek yang lebih didorong oleh frontend dengan Gutenberg dan ReactJS.
Salah satu kesalahan paling umum bagi pengembang WordPress adalah lupa memvalidasi dan membersihkan kode mereka – membiarkannya terbuka terhadap serangan XSS. Ada beberapa variasi XSS, tetapi secara umum, serangan XSS terjadi ketika peretas diizinkan untuk menyuntikkan kode ke server dan kemudian mengeksekusinya di browser pengunjung.
Bayangkan Anda memiliki kolom input. Demi kesederhanaan, katakanlah itu adalah bidang komentar tempat pengguna atau pengunjung dapat mengirimkan komentar ke sebuah pos.
Peretas akan mencoba mengirimkan komentar dengan "<script>alert('XSS');</script>"
.
Sekarang, ini hanyalah contoh dasar yang memunculkan peringatan di layar pengguna dan tidak ada yang lain. Seorang hacker yang sebenarnya akan menggunakan kolom komentar untuk menyuntikkan kode yang memuat kode dari situs mereka yang dapat mencuri informasi dari browser pengunjung dan banyak lagi.
Kita dapat mencegah hal ini terjadi dengan memvalidasi, membersihkan, dan melarikan diri.
Memvalidasi adalah memeriksa data yang dikirimkan sebelum melakukan sesuatu, seperti menyimpannya di database. Setiap kali data dikirimkan, Anda dapat memeriksanya dan memastikannya dapat diterima. Jika ini adalah bidang kuantitas, Anda mengharapkan angka. Jika bukan angka, Anda dapat mengembalikan pesan kesalahan kepada pengguna.
Membersihkan data adalah memproses informasi yang dikirimkan dan memastikannya tidak mengandung apa pun yang tidak ingin kami simpan, seperti menghapus karakter yang tidak diinginkan. WordPress memiliki beberapa fungsi bawaan untuk membantu hal ini. Lebih lanjut tentang sanitasi sebentar lagi.
Melarikan diri adalah mencegah kode berbahaya apa pun agar tidak benar-benar dijalankan di browser Anda. Katakanlah Anda sudah memiliki kode berbahaya yang disuntikkan ke situs web Anda, atau plugin atau tema lain membiarkan peretas memasukkan kode ke dalam data yang Anda gunakan – melarikan data ke layar sebelum menampilkannya akan mencegahnya menjadi masalah.
Mari kita lihat contoh sederhana yang sama seperti yang kita gunakan sebelumnya "<script>alert('XSS');</script>"
Jika kita tidak melakukan apapun dengan kode ini, browser akan mengira itu adalah kode HTML. Detail penting di sini adalah karakter < > yang digunakan untuk mendefinisikan tag HTML. Dengan menghindari ini, kita mengubah <
menjadi <
dan >
ke >
Browser sekarang memahami bahwa ini bukan kode HTML yang sebenarnya, dan seharusnya hanya menampilkan tanda kurang dari dan lebih besar dari.
Dengan memvalidasi, membersihkan, dan mengeluarkan semua data yang masuk dan keluar dari aplikasi Anda, Anda melindungi pengguna Anda dari salah satu metode serangan yang paling umum.
3. Hati-hati dengan injeksi SQL
Seperti namanya, penyerang dapat menggunakan injeksi SQL untuk membuat situs web Anda memproses kueri SQL yang diubah dan menggunakannya untuk mendapatkan akses ke database Anda.
Bergantung pada data yang Anda simpan di situs web Anda, kebocoran data situs web Anda dari serangan injeksi SQL bisa berubah dari memalukan menjadi benar-benar menghancurkan reputasi dan bisnis Anda.
Injeksi SQL adalah cara lama untuk menyerang situs web, tetapi masih sangat efektif dan ada banyak orang yang mencari cara untuk menggunakan bentuk serangan ini. Pada Oktober 2020, plugin WordPress Loginizer yang populer mengumumkan bahwa mereka memiliki kerentanan injeksi SQL yang membuat lebih dari satu juta situs web berisiko.
Pada 2019, peretas tak dikenal mencuri jutaan data pajak Bulgaria melalui serangan injeksi SQL, dan pada 2016, sekelompok peretas Rusia mengekstrak informasi pemilih sekitar 500.000 orang di Ohio. Jenis serangan ini masih sangat efektif, dan Anda dapat menemukan banyak informasi tentangnya.
Sumber: https://xkcd.com/327/
Tempat paling umum terjadinya injeksi SQL adalah di bidang formulir yang menerima input pengguna – misalnya, nama. Serangan terjadi dengan memasukkan bagian kode SQL di bidang input, membuat kueri khusus yang memberikan hasil berbeda dari yang Anda harapkan.
Katakanlah Anda memiliki formulir yang memungkinkan orang untuk mencari nama tertentu.
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' AND meta_key = 'celebrity_name';
Contoh sederhana ini akan mengambil semua baris dari tabel meta pos dengan semua baris yang memiliki nama Henry
dan kunci tertentu, celebrity_name
– dengan cara ini, kami tidak mengembalikan seluruh basis data dan hanya baris tertentu yang kami butuhkan.
Seorang penyerang akan mencoba untuk mengurai nilai yang berbeda – misalnya 'Henry' OR 1=1--
Kueri sekarang akan mengembalikan semua baris dengan nilai spesifik kami, atau apa pun – karena OR 1=1
dalam SQL selalu benar.
Ini menjadi lebih buruk. Kueri SQL kami hanya meminta hasil di mana meta_key
cocok dengan nilai tertentu yang kami cari, jadi kami tidak akan mengembalikan semuanya. Ini seharusnya membatasi dampak serangan injeksi SQL, bukan?
Yah, tidak begitu. Dalam SQL, tanda hubung ganda adalah indikator komentar, jadi semua yang muncul setelah ini dikomentari.
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1--' AND meta_key = 'celebrity_name';
Ini berarti kueri terlihat seperti ini:
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1
Kueri sekarang pada dasarnya mengembalikan semua yang ada di tabel database itu.
Ini hanya contoh sederhana. Ada banyak cara yang lebih rumit untuk mengakses sebagian besar, jika tidak semua, informasi dalam database. Seorang penyerang akan dapat mencoba serangan injeksi SQL buta, yang berarti menjalankan kode pada database Anda – menambahkan administrator baru, menghapus semua data Anda, dan seterusnya.
Sebagian besar serangan akan berupa string kueri acak yang berisi bagian-bagian SQL yang dikirimkan ke formulir situs web Anda. Skrip otomatis akan mendeteksi perubahan apa pun pada keluaran situs web Anda dan kemudian mendeteksi potensi serangan.
Cara sederhana dan efektif adalah mengirim tanda kutip '
sebagai masukan dan melihat apakah itu mengubah sesuatu, terjadi kesalahan, atau lebih banyak hasil dikembalikan.
WordPress untuk menyelamatkan
Alih-alih berinteraksi langsung dengan database, pengembang mana pun harus menggunakan kelas abstraksi database bawaan di WordPress, $wpdb
.
Kelas $wpdb
di WordPress memiliki semua fungsionalitas CRUD yang Anda butuhkan untuk berinteraksi dengan database dengan aman, dan Anda bahkan dapat menggunakan kelas tersebut untuk berinteraksi dengan tabel database Anda sendiri jika plugin atau tema Anda membutuhkannya.
Anda dapat memecahkan masalah dengan mengantisipasi jenis data apa yang harus dimasukkan secara wajar di setiap formulir input. Dalam contoh kami sebelumnya, kami mencari nama. Kami dapat membersihkan input untuk memastikan kami hanya menerima surat. Jika Anda memiliki kotak pilih atau grup radio yang hanya berisi beberapa opsi, Anda dapat memeriksa data untuk memastikan itu hanya salah satu pilihan yang Anda izinkan.
Hal terpenting yang dapat Anda lakukan untuk menyelesaikan masalah adalah menyiapkan data Anda dengan fungsi $wpdb->prepare()
.
Fungsi ini mengambil string kueri yang disiapkan dan larik argumen yang ingin Anda tambahkan ke kueri SQL.
$meta_key = 'celebrity_name'; $meta_val = 'Henry' $allhenrys = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_val ) );
Semua pekerjaan dilakukan di dalam fungsi prepare()
. Parameter pertama, kueri yang disiapkan – berisi placeholder %s
alih-alih nilai sebenarnya. Ini digantikan oleh variabel parsing lainnya, $meta_key
dan $meta_val
.
Catatan – Penting untuk tidak memiliki apostrof dalam kueri Anda di sekitar placeholder, karena fungsinya akan menambahkannya untuk Anda.
Ini adalah contoh yang disederhanakan, tetapi proses yang sama dapat digunakan untuk kueri basis data apa pun dan Anda dapat menggunakan %s
untuk string, %d
untuk bilangan bulat, dan %f
untuk float.
Ada juga fungsi untuk situasi tertentu, seperti menambahkan baris baru ke database. Untuk tujuan ini, Anda dapat menggunakan $wpdb->insert()
.
$wpdb->insert( "{$wpdb->prefix}my_custom_table", array( 'name' => 'Henry', 'userid' => 123, 'score' => 10, ), array( '%s', '%d', '%d', ) );
Menggunakan fungsi persiapan dapat membantu mencegah sebagian besar upaya injeksi SQL terhadap produk Anda.
Harap ingat untuk memeriksa dokumentasi $wpdb. Beberapa fungsi akan menghindari input untuk Anda; yang lain mengharapkan Anda untuk keluar dari input sendiri sebelum mem-parsing data ke fungsi.
4. Gunakan nonces untuk melindungi permintaan Anda
Menggunakan sistem nonce di WordPress dapat membantu Anda mencegah banyak serangan. Sebuah nonce dalam hal keamanan adalah nomor yang digunakan hanya sekali. Idenya adalah untuk menambahkan nomor unik ini ke semua permintaan yang Anda buat dari kode Anda ke instalasi WordPress sebagai cara untuk memverifikasi bahwa permintaan ini sah.
Ini seperti memiliki kata sandi rahasia yang harus Anda berikan kepada penjaga untuk masuk ke klub
Namun, nonce di WordPress sedikit berbeda – mereka bukan angka atau nonce hanya digunakan sekali.
Secara teknis nonces di WordPress dapat berisi huruf kecil dan angka, dan alih-alih digunakan hanya sekali , itu dibuat ulang setelah jangka waktu tertentu.
Cara Anda menggunakan nonce adalah bahwa kode PHP yang mendaftarkan file JavaScript Anda menghasilkan sedikit kombinasi unik dari angka dan huruf serta menguraikannya sehingga kode JS Anda dapat membacanya.
Setiap kali kode JavaScript mengirimkan permintaan ke situs web Anda, kode tersebut mengirimkan potongan kode tersebut, dan jika kode tersebut tidak cocok, kode Anda harus mengabaikan permintaan tersebut sepenuhnya.
Itu selalu sedikit lebih mudah dengan sebuah contoh, jadi mari kita lihat cara sederhana untuk memuat file .js di plugin Anda dengan mengikuti langkah-langkah berikut:
Menggunakan nonces di plugin WordPress
add_action('wp_enqueue_scripts', 'load_my_plugin_script'); function load_my_plugin_script() { // Register the script with all details and ensures it is loaded after jQuery wp_register_script('secure-plugin', plugin_dir_url( __FILE__ ). 'js/secure-plugin.js', array( 'jquery' ) ); // Here happens the magic, we add some details to an object that we can later reference and read from in our JS code. wp_localize_script( 'secure-plugin', 'plugin_ajax_object', array( 'nonce' => wp_create_nonce('secure-plugin-nonce') ) ); // Once that is done, we can now enqueue the script wp_enqueue_script('secure-plugin'); }
Dalam fungsi ini, kami memberi tahu WordPress untuk memuat file JavaScript. Pertama, kita mendaftarkan file yang ingin kita muat dengan wp_register_script()
.
Kemudian kita menggunakan wp_localize_script()
untuk mengurai array data, khususnya “nonce” yang berisi nonce unik yang ingin kita gunakan dalam kode JS kita. Ingat, Anda juga dapat mengirim semua jenis informasi lain dalam larik itu, tetapi kami hanya membuatnya sederhana dalam contoh ini.
Saat Anda mengirim permintaan dari file JavaScript Anda, Anda harus menyertakan nonce unik itu. Melakukannya mudah:
Menggunakan nonce dari plugin WordPress dalam file JavaScript
jQuery(document).ready(function($) { $.ajax({ url: ajaxurl, // WP variable, contains URL pointing to admin-ajax.php type: 'POST', data: { 'action': 'get_custom_data', '_ajax_nonce': plugin_ajax_object.nonce, 'user_data': 'Some input from a user' }, success: function( response ) { // Here we do what happens if all is good - update the interface with a success message!? }, error: function( response ) { // Whooops, something went wrong! // console.log(response); } }); });
Karena kita menggunakan wp_localize_script()
kita dapat menggunakan variabel plugin_ajax_object dalam JavaScript. Kami mengirim nonce sebagai variabel, _ajax_nonce
.
Periksa dan verifikasi nonce di plugin WordPress dari kode JavaScript
add_action('wp_ajax_get_custom_data', 'get_custom_data'); function get_custom_data() { // Ready for the magic to protect your code? check_ajax_referer('secure-plugin-nonce'); /** * That's it - the check_ajax_referer function verifies the nonce is correct or it dies and stops code execution if it fails. * * If you want to customize the error handling and perhaps return an error to your JS code, you could change the code to something like: * if ( ! check_ajax_referer( 'secure-plugin-nonce', false, false ) ) { * wp_send_json_error( 'Invalid nonce' ); * } */ $sanitized_user_data = sanitize_text_field( $_POST['user_data'] ); // ... continue with the rest of your plugin's function code ... }
Keajaiban terjadi dengan fungsi check_ajax_referer()
yang memeriksa nonce dan gagal serta menghentikan eksekusi kode lebih lanjut jika nonce tidak sesuai dengan yang diharapkan.
Anda dapat menyesuaikan kode lebih lanjut untuk mengembalikan informasi spesifik kepada pengguna tentang apa yang terjadi.
Menggunakan nonces dalam kode Anda adalah cara yang cepat, mudah, dan efektif untuk mencegah berbagai jenis upaya peretasan. Itu tidak berarti Anda dapat melewatkan melakukan semua tindakan keamanan lainnya, tetapi ini membantu mengurangi masalah terburuk.
Ingat apa yang saya katakan tentang tidak pernah mempercayai siapa pun? Itu membawa kami ke cara lain untuk melindungi kode Anda – sanitasi.
Berlangganan dan dapatkan salinan gratis buku kami
11 Teknik Terbukti Untuk Meningkatkan Perselisihan Kartu Kredit Anda, Menangkan Tingkat Keberhasilan sebesar 740%
Berbagi dengan teman
Masukkan alamat email teman Anda. Kami hanya akan mengirim email kepada mereka buku ini, scout's honor.
Terima kasih sudah berbagi
Luar biasa - salinan '11 Teknik Terbukti Untuk Meningkatkan Perselisihan Kartu Kredit Anda Memenangkan Tingkat Keberhasilan sebesar 740%' baru saja dikirim ke . Ingin membantu kami menyebarkan berita lebih banyak lagi? Ayo, bagikan buku ini dengan teman dan kolega Anda.
Terima kasih telah berlangganan!
- kami baru saja mengirimkan salinan '11 Teknik Terbukti Untuk Meningkatkan Perselisihan Kartu Kredit Anda, Menangkan Tingkat Keberhasilan sebesar 740%' ke .
Ada salah ketik di email Anda? klik di sini untuk mengedit alamat email dan mengirim lagi.
5. Sanitasi input pengguna
Pada contoh sebelumnya, kami menyertakan bagian data tambahan yang dikirim dari JS ke PHP. Setiap kali Anda memasukkan data ke dalam kode Anda, Anda harus mengharapkannya menjadi tidak aman.
'user_data':'Some input from a user'
Dalam contoh ini, ini adalah string sederhana, tetapi karena kami mengirim data kembali ke PHP, kami perlu memastikan bahwa input tidak berisi kode apa pun yang dapat dieksploitasi di lingkungan PHP kami atau disimpan dalam database yang memungkinkan penyalahgunaan lebih lanjut.
Masuk sanitasi. WordPress memiliki berbagai fungsi yang mengambil input apa pun yang Anda berikan dan membersihkan data sebelum mengembalikannya kepada Anda.
Dalam contoh ini, kami menggunakan fungsi sanitize_text_field()
, tetapi WordPress hadir dengan banyak fungsi sanitasi yang cocok untuk berbagai jenis data.
Ada banyak fungsi dan metode hebat lainnya yang ada di dalam WordPress yang dapat Anda gunakan untuk menjaga kode Anda tetap aman dan mencegah penyalahgunaan.
Anda tidak boleh pernah menggunakan data apa pun yang dikirim ke kode Anda tanpa membersihkannya terlebih dahulu. Lihat artikel ini tentang kesalahan umum pengembang WordPress dengan detail lebih lanjut tentang sanitasi dan tip praktis hebat lainnya.
Dan itu membawa saya ke tip berikutnya, yang dialami sebagian besar pengembang WordPress:
6. Ingat bahwa is_admin()
tidak seperti yang Anda pikirkan
Ketika Anda pertama kali mulai berpikir untuk melindungi kode Anda dari kejahatan, Anda mungkin akan menemukan fungsi is_admin()
, dan dari namanya, sepertinya itu semua yang Anda butuhkan, dan yang perlu Anda lakukan hanyalah membungkus kode Anda dengan itu, dan semua akan baik-baik saja.
Tidak, sayangnya tidak. Fungsi is_admin()
hanya mendeteksi jika kode dijalankan di sisi administrasi situs web. Tidak ada yang mendeteksi jika kode Anda dijalankan oleh pengguna atau administrator biasa.
Anda tidak akan pernah menyadarinya jika Anda hanya memasukkan kode di plugin Anda karena kemungkinan besar Anda menjalankan kode di antarmuka administrasi, dan itu berarti kode hanya akan dievaluasi menjadi true
, dan Anda akan berhenti memikirkannya dan beralih ke sesuatu lain.
Cara yang benar untuk memeriksa apakah pengguna adalah administrator adalah dengan memeriksa kemampuan pengguna:
if ( current_user_can( 'activate_plugins' ) ) { // Do your code here }
Ada kemampuan yang berbeda untuk peran pengguna yang berbeda, sehingga Anda memiliki kontrol yang jauh lebih terperinci. Dalam kebanyakan kasus, 'activate_plugins'
adalah yang Anda butuhkan hanya untuk admin.
Jika Anda menginginkan cara untuk mengizinkan administrator dan editor melakukan sesuatu, Anda harus menguji kemampuan 'edit_pages'
.
7. Tambahkan rel="noopener" atau rel="noreferrer" ke tautan Anda
Menautkan ke sumber daya eksternal cukup normal, dan metode lama menambahkan target="_blank"
ke tautan tersebut masuk akal karena Anda tidak ingin pengguna meninggalkan halaman plugin/tema Anda.
Namun, ini membuka Anda untuk apa yang disebut Tabnabbing. Ini adalah masalah keamanan di mana kode JavaScript berbahaya dapat mencuri informasi dari pengguna Anda dengan menyalahgunakan fitur JavaScript window.opener
.
Mencegah hal ini bisa sesederhana menambahkan rel="noopener"
ke tautan Anda. Halaman yang Anda tautkan hari ini mungkin baik-baik saja, tetapi itu bisa berubah di masa mendatang.
rel=noopener
berarti halaman yang Anda tautkan tidak dapat mengakses informasi atau mendapatkan kendali atas halaman Anda.
rel=noreferrer
melakukan hal yang sama, dan juga menginstruksikan browser untuk tidak meneruskan informasi rujukan apa pun melalui header Referrer. Menambahkan rel="noreferrer"
berarti halaman yang Anda tautkan tidak tahu dari mana pengunjung Anda berasal.
Catatan: Kedua properti ini tidak boleh disamakan dengan rel=nofollow
, yang terkait dengan SEO.
8. Gunakan HTTPS dan Token Aman dengan API Pihak Ketiga
Sebagai pengembang, Anda sering kali harus mengintegrasikan API, dan sangat penting untuk melakukan ini dengan aman untuk melindungi data yang Anda kirim bolak-balik.
Untungnya, sudah ada standar yang ditetapkan tentang cara melakukan ini dengan aman; salah satunya adalah HTTPS. Menggunakan HTTPS memperkenalkan lapisan keamanan di mana semua data yang dikirimkan dienkripsi.
Namun, untuk memastikan data Anda terlindungi dari mata-mata, menggunakan HTTPS saja tidak cukup.
Seperti yang dijelaskan oleh artikel oleh Ars Technica ini, “HTTPS tidak berarti data Anda aman, itu hanya berarti koneksi Anda aman.”
Token aman – JWT
Standar aman untuk menangani komunikasi dan integrasi API adalah dengan menggunakan JSON Web Tokens, JWT.
Token aman dibuat dengan membuat permintaan ke server yang memvalidasi detail login pengguna dan menghasilkan token, sepotong kecil string yang berisi data, seperti nama pengguna, ID, dan sebagainya.
Saat Anda mengirim permintaan berikutnya ke server, Anda menyertakan token itu dalam permintaan. Token ini membuktikan bahwa Anda diautentikasi dan memiliki akses. Jika token valid dan belum kedaluwarsa, server akan menggunakan detail pengguna yang terdapat dalam token dan menarik data yang diminta.
Server dapat dengan cepat memproses permintaan dengan cara ini, dibandingkan dengan menggunakan kunci API, yang perlu mencari pengguna melalui kunci itu sebelum memutuskan untuk memproses data. Dengan menggunakan token, Anda dapat memasukkan data di dalam token tentang pengguna dan menyimpan beberapa kueri basis data.
Dengan cara token yang aman dibuat dan kemudian digunakan, tidak mungkin membuat token palsu atau memanipulasi konten token. Hanya mungkin untuk membuat token yang valid dengan mengetahui kunci rahasia, yang akan disembunyikan dengan baik oleh perusahaan di belakang platform.
Catatan yang sangat penting untuk diingat adalah bahwa data di dalam token tidak dienkripsi. Tidak mungkin untuk mengutak-atik isi token tanpa membatalkannya, tetapi data di dalam token dapat dengan mudah dibaca oleh siapa saja, jadi ini bukan tempat yang baik untuk menyimpan data sensitif.
Sumber yang bagus jika Anda ingin lebih mendalami token dan cara kerjanya adalah Pengantar Token Web JSON.
9. Jangan gunakan perpustakaan eksternal dari CDN
Meskipun mungkin tergoda untuk menyertakan pustaka apa pun yang mungkin Anda perlukan melalui cdnjs.com atau CDN global gratis lainnya, ada beberapa kekurangannya.
Pertama-tama, Anda tidak memiliki kendali atas perpustakaan dan kode berbahaya apa pun yang menyelinap ke dalam file yang Anda sertakan.
Meskipun CDN umumnya stabil dan cepat menurut definisi, mereka juga menjadi sasaran lebih banyak serangan. Jika kode Anda bergantung pada pustaka JS pada CDN yang diserang, maka plugin dan tema Anda akan dimuat dengan sangat lambat atau tidak sama sekali.
Ini terjadi pada situs web pelanggan di mana CDN publik yang digunakan plugin pada saat itu kehabisan waktu untuk pengguna di beberapa wilayah yang membuat antarmuka tidak dapat digunakan. Pada akhirnya, saya harus mengubah plugin untuk menggunakan salinan lokal skrip JS sebagai perbaikan cepat.
Menggunakan sumber pihak ketiga eksternal juga dapat membahayakan privasi. CDN dapat mencatat semua IP pengguna Anda – pastikan untuk memeriksa kebijakan GDPR dan memberi tahu pelanggan Anda.
Secara umum, jika Anda menggunakan penyedia CDN pihak ketiga yang memiliki reputasi baik, Anda tidak akan menghadapi masalah apa pun, tetapi pendekatan paling sederhana dan paling dapat diandalkan adalah dengan mendistribusikan pustaka JS yang disertakan dalam produk Anda.
Tahukah kamu? WordPress hadir dengan beberapa perpustakaan JS yang disertakan. Banyak perpustakaan JS yang lebih umum yang mungkin ingin Anda gunakan disertakan dengan WordPress. Perpustakaan ini akan mencakup sebagian besar kebutuhan dasar Anda.
Kiat pengembang: Harap muat hanya file JS dan CSS tambahan pada halaman tertentu yang Anda butuhkan. Sebagai pengembang dan pengguna, saya sangat tidak menyukai plugin yang memperlambat admin dengan memuat file JS dan CSS yang tidak diperlukan di setiap halaman. Ini tidak hanya memperlambat halaman admin lainnya, tetapi juga dapat benar-benar mengacaukan tata letak visual dan membuat beberapa halaman admin hampir tidak dapat digunakan. Tolong
Ada juga beberapa alat di luar sana yang dapat membantu Anda melindungi kode Anda, dan alat hebat yang dapat Anda gunakan secara gratis adalah Coderisk.
10. Gunakan alat dan layanan untuk menganalisis kode Anda
risiko kode
Ada banyak layanan otomatis untuk membantu mengidentifikasi masalah kode. Exakat, SonarSource, dan PHPStan untuk beberapa nama, dan favorit saya – Coderisk.com – Cara mudah untuk menemukan beberapa kesalahan keamanan yang lebih jelas dalam kode Anda.
Perusahaan ini memindai semua plugin WordPress dari repositori WordPress.org publik. Perangkat lunak mereka mampu memindai dan mengidentifikasi ratusan jenis masalah keamanan yang berbeda berdasarkan standar pengkodean yang berbeda.
Menurut statistik mereka sendiri, sejauh ini mereka telah memindai lebih dari 4 miliar baris kode publik, dan ada cukup banyak masalah bahkan dengan plugin teratas.
Untuk mendaftar ke layanan gratis mereka cukup sederhana – Anda dapat membuat akun gratis dan kemudian mulai mengklaim plugin Anda. Mengklaim sebuah plugin semudah mengambil satu baris kode yang Anda masukkan ke readme.txt saat Anda menerapkan versi baru.
Ini memungkinkan Anda untuk mengakses pemindaian plugin Anda yang terbaru, dan di dalamnya, mereka memiliki informasi dan detail spesifik tentang setiap masalah, dengan tautan langsung ke kode Anda.
Perlu diingat, ini adalah layanan gratis, jadi mereka mungkin tidak memperbarui pemindaian plugin Anda sesering itu, tetapi begitu Anda mendapatkan pemberitahuan, ada baiknya memeriksa kode Anda, karena Anda mungkin telah membuat kesalahan sejak terakhir kali Anda meninjau kode Anda.
Antarmukanya cukup mudah dinavigasi setelah Anda memahaminya, dan sistemnya sangat berguna, memberi Anda petunjuk yang sangat mudah dipahami tentang apa yang salah yang membantu Anda melacak kesalahan.
Ada juga banyak cara untuk menyaring bug, dan Anda dapat menandai setiap masalah sebagai telah diperbaiki atau banyak opsi lain untuk membantu Anda mendapatkan gambaran umum tentang semua masalah dengan cepat.
Catatan: Jika Anda tidak pernah menjalankan Coderisk (atau alat lain dalam kategorinya) pada kode Anda, jangan khawatir tentang jumlah masalah yang dicurigai yang akan membuat Anda diperingatkan. Alat-alat ini dapat menghasilkan jumlah positif palsu yang baik karena mereka hanya menganalisis kode tanpa memahami logika bisnis. Gunakan output alat sebagai daftar awal yang solid dari item untuk ditinjau.
PHP_CodeSniffer
Alat hebat lainnya untuk memeriksa kode Anda adalah PHP_CodeSniffer. PHPCS terdiri dari dua skrip, PHPCS yang memeriksa kode Anda dan melaporkan kesalahan kepada Anda dan PHPCBF yang secara otomatis dapat memperbaiki berbagai masalah yang diidentifikasi PHPCS.
Menggunakan PHPCS sangat mudah digunakan dari baris perintah setelah Anda menginstalnya. Alat ini tidak akan mencegah masalah keamanan muncul dalam kode Anda, tetapi Anda dapat menghilangkan kesalahan pengkodean sederhana yang membuatnya lebih sulit untuk menyalahgunakan masalah yang lebih besar.
Dimungkinkan juga untuk mengintegrasikan PHPCS langsung ke editor Anda, seperti Sublime Text dan Visual Code. Dengan cara ini Anda dapat dengan mudah melihat kesalahan dan memperbaikinya dengan cepat di IDE Anda.
Tidak masalah jika Anda bekerja dalam tim atau sebagai pengembang tunggal, ada baiknya menggunakan sistem otomatis karena ini adalah cara mudah untuk menghilangkan masalah keamanan dasar yang mungkin Anda lewatkan.
Menggunakan sistem otomatis untuk memindai kode Anda untuk masalah keamanan bukanlah metode menangkap-semua-bug yang aman, tetapi dapat membantu Anda menunjukkan kesalahan yang paling jelas.
11. Jangan copy-paste kode dari web tanpa review yang benar
Menjaga produk WP Anda seaman mungkin harus menjadi proses yang berkelanjutan, tidak hanya sesekali. Saat Anda memperkenalkan fitur baru atau menghapus kode, Anda juga dapat memperkenalkan masalah keamanan baru.
Google tidak selalu menjadi teman Anda. Sebagai pengembang, Anda terbiasa memeriksa internet luas untuk mencari contoh kode untuk menginspirasi Anda – atau hanya menulis ulang potongan-potongan di sana-sini jika Anda malas.
Sebagian besar potongan kode yang Anda temukan di internet jarang siap digunakan dalam lingkungan produksi yang aman dan dimaksudkan sebagai contoh masalah pengkodean apa pun yang Anda coba perbaiki. Menggunakan potongan kode ini secara membabi buta dan tanpa peninjauan dapat menimbulkan masalah dengan sangat cepat.
Ada banyak hal yang harus dilakukan sebagai pengembang WordPress, dan memperbaiki masalah keamanan yang mendesak di plugin Anda dengan ribuan instalasi seharusnya tidak menjadi salah satunya.
Ingatlah bahwa reputasi Anda dipertaruhkan
Jika Anda tidak memperhatikan keamanan plugin atau tema Anda, Anda mempertaruhkan pengguna Anda, bisnis mereka, bisnis Anda, dan reputasi Anda. Itu sangat berpotensi membuang waktu dan uang!
Kerentanan keamanan dapat berdampak besar pada kepercayaan dan keyakinan pelanggan terhadap merek atau produk Anda. Contoh Loginizer di atas menunjukkan bahwa bahkan kerentanan keamanan yang paling memalukan dapat terjadi pada pengembang plugin keamanan itu sendiri! Dan contoh lain tentang penipuan pemilih dan peretasan pemerintah memberi tahu kami bahwa siapa pun rentan.
Jika dan ketika Anda menemukan kerentanan, bertindak cepat untuk menyelesaikannya, dan ikuti praktik terbaik untuk mengumumkan masalah secara publik (jika perlu) bersama dengan merilis perbaikan.
Jika Anda tetap terdepan dalam hal komunikasi dan masalah "hubungan masyarakat" yang mungkin timbul dari kerentanan, maka Anda dapat menghindari beberapa masalah besar dan meningkatkan reputasi Anda alih-alih merusaknya.
Terima kasih sudah membaca!
Mungkin menakutkan untuk melihat semua hal yang perlu Anda lakukan ketika Anda tidak tahu apa yang harus dicari untuk memulai, dan mungkin sulit untuk menemukan informasi yang tepat. Jika Anda tidak tahu harus mulai dari mana, Anda harus mempertimbangkan agar produk Anda ditinjau oleh pakar keamanan WP (saya juga melakukan tinjauan keamanan).
Sangat menggoda untuk menghemat uang atau waktu untuk tinjauan keamanan, tetapi biaya untuk tidak mengamankan produk Anda sebanyak mungkin bisa lebih tinggi dalam jangka panjang.
Ini hanyalah beberapa cara yang Anda dapat dan harus melindungi produk WordPress Anda dari penyalahgunaan. Jika Anda ragu, ingat saja – Jangan percaya siapa pun