5 Cara Terbaik untuk Mengatasi Kerentanan WordPress

Diterbitkan: 2020-02-01

Saat ini, WordPress mencakup 33% dari web. Ini berarti sejumlah besar pengguna menggunakannya yang pasti akan menarik lebih banyak penyerang dan peretas. Karena itu, ada lebih banyak ancaman dan serangan seperti serangan SQL Injection, serangan Redirection, serangan CSRF, serangan XSS, dll yang menyebabkan kerentanan di WordPress. Untuk alasan ini, ini tidak berarti bahwa WordPress tidak aman. Kita harus fokus pada sanitasi data, validasi data, pelolosan data, penggunaan dan verifikasi nonce, pengalihan aman, kemampuan pengguna, dll. untuk membuat WordPress aman. Namun, kerentanan di WordPress membuatnya tidak aman. Jadi, Mari kita bahas Masalah Keamanan WordPress.

Kerentanan datang ke WordPress juga. Tapi bagaimana caranya?

Di satu sisi, ada ancaman dan serangan besar karena kerentanan WordPress . Di sisi lain, kita harus mengatasi atau mencegah serangan ini dengan kode kita selama pengembangan WordPress.

Bahkan jika Anda bukan pengembang WordPress, kami menganjurkan Anda untuk membaca postingan tersebut karena Anda akan dapat mengetahui serangan besar yang menarik peretas untuk menyerang situs Anda. Dan Anda juga akan dapat memahami cara mengetahui plugin dan tema WordPress yang dikodekan dengan buruk . Jika Anda menjalankan toko online, ada baiknya Anda memutuskan plugin dan tema WooCommerce Terbaik yang aman.

Isi
1 Kerentanan Keamanan WordPress
2 Ancaman dan Serangan
2.1 Kerentanan WordPress – Serangan Injeksi SQL
2.2 Sanitasi Data
2.2.1 Contoh Sanitasi Data:
2.3 Kerentanan WordPress – Serangan XSS
2.3.1 Contoh serangan XSS:
2.4 Validasi Data
2.4.1 Contoh Validasi Data:
2.5 Pelarian Data
2.5.1 Contoh Pelepasan Data:
2.6 Kerentanan WordPress – Serangan CSRF
2.7 Menggunakan Nonce
2.8 Memverifikasi Nonce
2.9 Kerentanan WordPress – Serangan Pengalihan
2.10 Pengalihan Aman
2.11 Kerentanan Kemampuan Pengguna
2.12 Selalu Kembali atau Keluar di WordPress

Kerentanan Keamanan WordPress

Dari Mana Kode Rentan Berasal?

Pada awalnya, kita harus memiliki pemahaman yang baik tentang di mana masalah Keamanan WordPress . WordPress terdiri dari kode inti WordPress, tema, dan plugin yang mencakup Php, Html, javascript, dan kode lainnya.

Komunitas sumber terbuka memeriksa Kode Inti WordPress. Ada sejumlah besar orang yang melaporkan bug dan memperbaiki kerentanan dan mengambil kredit untuk itu. Kerentanan di WordPress dapat dimanfaatkan oleh serangan SQL Injection, serangan CSRF, serangan XSS, serangan Redirection, dan teknik serupa lainnya. Jadi, Kerentanan WordPress dari pengembangan inti tidak banyak.

Baik tema biasanya berinteraksi dengan database wp, maupun situs sering mengubah tema. Karena Gutenberg adalah editor default WordPress, kita perlu memilih Tema WordPress yang Kompatibel dengan Gutenberg untuk kinerja dan keamanan yang lebih baik. Jadi, lebih sedikit kerentanan yang terjadi dengannya.

Di sisi lain, plugin WordPress memiliki fitur dan perilaku yang kompleks. Juga, interaksi yang tinggi dengan pengguna dan database. Situs ini memang menyertakan sejumlah besar plugin untuk memiliki fitur eksternal. Akibatnya, mereka dapat membawa sejumlah besar kerentanan ke situs. Plugin memperkenalkan kerentanan utama di WordPress.

Kerentanan WordPress - Ancaman dan Serangan
Kerentanan WordPress – WPscan.org

Menurut wpscan.org, 11% kerentanan berasal dari tema sementara 37% kerentanan berasal dari pengembangan WordPress Core. Dengan cara yang sama, 52% sisanya berasal dari Plugin. Saya berasumsi Anda sudah tahu apa itu Plugin WordPress

Ancaman dan Serangan

Jika Anda adalah pengembang tema atau plugin WP, maka Anda harus memiliki pengetahuan yang baik tentang ancaman dan serangan untuk membuat kode Anda aman dan mengurangi Kerentanan WordPress.

Ancaman dan Serangan-SQL Injection-XSS-CSRF-Redirection
Ancaman dan Serangan

Ada banyak serangan seperti serangan SQL Injection, serangan XSS, serangan Redirection, serangan CSRF yang dapat dicegah dengan sanitasi data, validasi data, pelarian data, penggunaan dan verifikasi nonce, pengalihan aman, kemampuan pengguna, dll.

Sebagai pengembang, musuh Anda umumnya adalah pengguna yang jahat. Pengguna tersebut merusak kode kami. Ketika kami memasukkan Never Trust User Inputs ke dalam perilaku pengkodean harian kami, maka kami sudah setengah jalan untuk menulis kode yang lebih aman untuk mengurangi masalah keamanan di WordPress. Ini akan membuat pekerjaan Anda lebih mudah sebagai WordPress Customizer.

Kerentanan WordPress – Serangan Injeksi SQL

Dalam upaya untuk mengambil data penting dan sensitif, serangan injeksi SQL menyuntikkan kode SQL berbahaya ke dalam database WP. Mereka menargetkan situs WordPress yang menggunakan database SQL – MySQL, Oracle, SQL Server, dll.

Dengan maksud ini, mereka memiliki akses ke kata sandi, alamat email, atau data sensitif apa pun karena mereka dapat dengan mudah menambahkan, mengedit, atau membaca data.

Kita bisa mengambil contoh komik The Famous “Bobby Tables”.

Tabel bobby terkenal Komik- Ancaman dan Serangan
Komik bobby table yang terkenal

Dalam komik ini seorang wanita menyimpan nama putranya ' Robert'); DROP TABLE Siswa; –') '; dengan perintah SQL yang ketika masuk ke database akan menghapus seluruh tabel siswa sekolah jika namanya belum disanitasi.

Jadi untuk menghindari injeksi SQL kita harus membersihkan data input pengguna.

Mari kita bahas sanitasi data secara detail.

Sanitasi Data

Sanitasi berarti mengamankan input, membersihkan input pengguna. Proses ini menghapus teks yang tidak valid, karakter UTF-8 atau kode dari input untuk mengurangi kerentanan di WordPress.

Ini mengubah karakter khusus HTML menjadi entitas, menghapus semua tag. Ini juga menghapus jeda baris, tab, dan spasi ekstra, strip oktet yang merupakan alasan masalah keamanan utama di WordPress.

Ada banyak fungsi bawaan WordPress untuk membersihkan data. Beberapa di antaranya ada dalam daftar di bawah ini:

  1. sanitize_email(): Menghapus semua karakter yang tidak boleh ada di email
  2. sanitize_text_field(): Membersihkan string (dari input/database pengguna)
  3. sanitize_file_name(): Menghapus karakter (dari nama file)
  4. sanitize_key(): Tombol strip kecuali untuk karakter alfanumerik huruf kecil, tanda hubung, dan garis bawah.

Contoh Sanitasi Data:

 $title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);

Di sini, pada awalnya, kami membersihkan judul. Setelah sanitasi, kami memperbarui nilai judul di database wp.

 $Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')

Di sini, di perintah SQL di atas nama memiliki string dan karakter khusus dan entitas yang dimasukkan ke dalam tabel siswa, nama ' Robert'); Ini menutup perintah insert SQL dan perintah lain dapat dijalankan dengan setengah dari nama DROP TABLE Students; –') '; dan siswa tabel drop ini menghapus semua catatan siswa dari database.

Jadi di sini jika sanitasi telah dilakukan sebelum memasukkan nilai dalam database maka Anda tidak akan kehilangan seluruh tabel database siswa.

Mari kita lihat contoh di bawah ini untuk melakukan sanitasi.


 $Name=sanitize_text_field("' Robert'); DROP TABLE Students; --') ';"); $sql = $wpdb->prepare("INSERT INTO Students VALUES ($Name)"); /* this will only insert 'Robert DROP TABLE Students' */ $wpdb->query($sql);

Di sini, dalam contoh di atas, sanitasi telah menghapus entitas dan karakter tambahan dari nama dan hanya mengizinkan string untuk dimasukkan ke dalam database. Dengan cara ini, kita dapat dengan aman memasukkan data dan aman dari injeksi SQL.

Ikuti tautan ini untuk mempelajari lebih lanjut tentang mengamankan input .

Kerentanan WordPress – Serangan XSS

Serangan Cross-Site Scripting (XSS) menyuntikkan kode javascript bahasa skrip yang rentan untuk mencuri data serupa dari pengguna lain seperti cookie, token sesi, dan informasi lainnya. Jika kami memiliki informasi cookie maka kami dapat terhubung secara otomatis. Masalah keamanan di WordPress datang dengan cookie yang dicuri, karena kami dapat dengan mudah masuk dengan identitas lain.
Ini berjalan di browser. Jutaan orang yang menjelajahi situs akan terpengaruh oleh serangan ini. Tidak diragukan lagi, serangan ini adalah salah satu serangan paling serius.

Contoh serangan XSS:

 <script <script type=”text/javascript”>
var hacker ='../hacker.php? cookie_data=' +escape(document.cookie);
</script>
</script>

Di sini, dalam contoh serangan XSS ini, cookie lolos dan dikirim ke variabel skrip hacker.php 'cookie_data'

Jika penyerang akan menyuntikkan skrip ini ke dalam kode situs web, maka skrip tersebut akan dieksekusi di browser pengguna dan cookie akan dikirim ke penyerang yang merupakan masalah berbahaya. Jadi untuk menghindari ini kita perlu memvalidasi. Validasi dan bersihkan semua data input pengguna dan keluarkan data output.

Mari kita bahas secara detail di bawah ini.

Validasi data

Validasi adalah memeriksa input pengguna. Hal ini dilakukan untuk memeriksa apakah pengguna memasukkan nilai yang valid atau tidak.
Ada tiga cara untuk memvalidasi data yaitu fungsi PHP bawaan, fungsi inti WordPress, dan fungsi kustom. Jangan pernah lepas dari ini untuk menghindari Kerentanan WordPress. Beberapa di antaranya ada dalam daftar di bawah ini:

  1. isset()/empty(): periksa apakah variabel ada atau tidak
  2. is_email(): memeriksa apakah data yang diberikan dalam format email atau tidak
  3. is_serialized(): periksa apakah nilainya string atau tidak

Contoh Validasi Data:

 $number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }

Contoh di atas memeriksa apakah data input berupa angka atau bukan, program hanya akan dijalankan jika berupa angka. Dengan demikian, validasi data membantu mengurangi masalah Keamanan WordPress.

Ikuti tautan ini untuk mempelajari lebih lanjut tentang validasi data

Pelarian Data

Melarikan diri adalah mengamankan output. Ini adalah proses menghapus data yang tidak diinginkan, seperti HTML atau tag skrip yang salah format. Melarikan diri tidak hanya mengubah karakter HTML khusus menjadi entitas HTML tetapi juga menampilkan, alih-alih eksekusi. Ini dilakukan untuk mencegah serangan XSS dan juga untuk memastikan bahwa data ditampilkan seperti yang diharapkan pengguna.
WordPress menyediakan beberapa fungsi pembantu. Mereka digunakan untuk sebagian besar kasus. Beberapa dari mereka adalah:

  1. esc_html(): Keluar dari karakter khusus HTML
  2. esc_attr(): Melarikan diri dari nilai atribut tag HTML
  3. esc_url(): Melarikan diri dari atribut REFerence Hypertext

Contoh Pelepasan Data:

 $url = "javascript : alert ('Hello')";
<a href= "<?php echo esc_url ($url) ;?>"> Text </a> href= "<?php echo esc_url ($url) ;?>"> Text </a>

Dalam contoh di atas, peretas telah memasukkan kode bahasa skrip untuk menantang masalah keamanan situs WordPress. Jadi untuk menghindari ini, kami telah menggunakan esc_url untuk keluar dari nilai URL dan setelah itu hanya kami yang menggemakan nilai dalam kode kami. Dengan cara ini, kami telah mencegah serangan XSS.

Kerentanan WordPress – Serangan CSRF

Membahas lebih lanjut dalam Kerentanan WordPress, serangan Pemalsuan Permintaan Lintas Situs adalah ancaman dan serangan satu klik atau serangan naik sesi.
Serangan CSRF memungkinkan penyerang memaksa pengguna yang masuk untuk melakukan tindakan penting tanpa persetujuan atau sepengetahuan mereka.
Di sini, pengguna yang berwenang mengirimkan perintah yang tidak sah.
Itu bergantung pada gagasan bahwa pengguna resmi yang dikirim ke halaman atau URL tertentu mungkin dapat melakukan hal-hal yang tidak mereka sadari telah mereka lakukan. Selain itu, dapat diperbaiki dengan penggunaan nonce dan verifikasi nonce.

Menggunakan Nonce

WP menghasilkan token keamanan yang disebut nonce. Ini adalah nomor unik yang tidak berulang hanya untuk Anda yang dapat digunakan oleh Anda untuk operasi tertentu. Nilai nonce berlaku selama 24 jam setelah itu kedaluwarsa dan yang baru akan dihasilkan oleh wp. Anda juga dapat mengatur waktu validasi untuk nonce juga.
Ini melindungi URL dan formulir dari penyalahgunaan untuk mengurangi masalah keamanan yang ada di WordPress.

Selanjutnya, untuk mengamankan formulir dengan nonce, buat bidang nonce yang disembunyikan menggunakan fungsi wp_nonce_field() :

 <form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>

Di bawah ini adalah beberapa fungsi untuk nonce:

  1. wp_nonce_url() – Untuk menambahkan nonce ke URL.
  2. wp_create_nonce() – Untuk Menggunakan nonce dengan cara khusus untuk memproses permintaan AJAX.

Memverifikasi Nonce

  1. check_ajax_referer() – Memeriksa nonce (tetapi bukan pengarah), dan jika pemeriksaan gagal maka secara default ia menghentikan eksekusi skrip.
  2. wp_verify_nonce() – Untuk memverifikasi nonce.
 if(isset($_POST['name_of_nonce_field']) && wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action')){ //do something } else{ esc_html_e('Sorry,your nonce did not verify.','text-domain'); }

Ikuti tautan ini untuk mempelajari lebih lanjut tentang nonce

Kerentanan WordPress – Serangan Pengalihan

Kerentanan WordPress juga menyebabkan pengunjung situs dengan pengalihan otomatis ke situs web berbahaya.
Ini biasanya terjadi ketika pengunjung mengalihkan ke halaman lain, bukan halaman atau situs web yang mereka minta.
Jika situs Anda memiliki lalu lintas tinggi maka serangan ini dapat menyebabkan lebih sedikit lalu lintas ke situs Anda. Anda bahkan tidak akan menyadari bahwa pengunjung situs Anda akan dialihkan ke halaman lain. Namun, itu bisa diperbaiki dengan bantuan Safe Redirect.

Pengalihan Aman

Setelah tindakan atau formulir jika Anda mengarahkan pengguna ke halaman mana pun, gunakan wp_safe_redirect. wp_safe_redirect memeriksa host yang diizinkan. Jika host tidak diizinkan maka akan mengarahkan ulang ke URL situs. Jadi, itu akan mencegah pengalihan berbahaya ke host lain. Tapi ini tidak diperiksa oleh wp_redirect. Jadi untuk mengurangi masalah keamanan WordPress, menggunakan wp_safe_redirect adalah cara yang lebih aman untuk mengarahkan ulang tautan.

 $redirect=admin_url('edit.php'); wp_safe_redirect($redirect);

Kerentanan Kemampuan Pengguna

Selain serangan Redirection, serangan XSS, serangan CSRF, dan serangan SQL Injection, WordPress juga rentan dari Kemampuan Pengguna. Jika Anda mengizinkan pengguna mana pun untuk datang ke situs Anda untuk mengirimkan data apa pun, maka periksa kemampuan pengguna. Jika tidak, Anda akan menjadi korban ancaman dan serangan.
Semakin tinggi peran pengguna, semakin banyak kemampuan yang dimiliki pengguna.
Terkadang pengembang lupa untuk memastikan bahwa pengguna yang ada di halaman yang mengirimkan formulir memiliki hak istimewa yang diperlukan untuk melakukan tindakan tersebut atau tidak. Ini akan membawa sumber umum Kerentanan WordPress.

 if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }

Mari kita ambil contoh kerentanan Formulir Kontak 7 (Jenis Kerentanan WordPress)

Nomor aktivasi plugin ini adalah 5+ juta pengguna. Jika ada satu kode rentan maka itu akan mempengaruhi 5+ juta orang.

Kerentanan Hak Istimewa-Formulir Kontak 7
Kerentanan Hak Istimewa Formulir Kontak 7

Ada kerentanan kemampuan di versi 5.0.3 dan yang lebih lama. Pengguna yang masuk dalam peran Kontributor dapat dengan mudah mengedit formulir kontak. Secara default, itu hanya dapat diakses oleh pengguna peran Administrator dan Editor.
Jadi, ada kemungkinan lebih besar untuk diretas. Versi baru plugin telah mengatasi kesalahan ini.

Selalu Kembali atau Keluar di WordPress

Jika Anda melewatkan kembali atau mati setelah menyelesaikan kode Anda saat menulis fungsi apa pun atau panggilan ajax. Ini mungkin terlihat sederhana tetapi dapat menyebabkan masalah keamanan yang penting.

Pastikan Anda selalu menambahkan kembali dan mati di tempat yang Anda maksud. Anda dapat mengambil contoh bug #gotofail Apple.

 defined( 'ABSPATH' ) defined( 'ABSPATH' ) or die ( "No script kiddies please!" );
function function adls_view() { global $wpdb; { global $wpdb;
            include( 'inc/frontend/smls-detail/smls-grid-inline.php' );
           exit(); }
function function adls_generate_random_string ( $length ){
           $string = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $random_string = '';
            for ( $i = 1; $i <= $length; $i ++ ) { { $random_string .= $string[ rand( 0, 61 ) ];
            }
            return $random_string;
       }
 }

Membungkus

Ini adalah posting penting bagi Profesional WordPress yang peduli dengan keamanan. Dari posting ini, Anda telah belajar tentang berbagai ancaman dan serangan yang membawa kerentanan ke WordPress. Ini termasuk pengenalan singkat tentang serangan SQL Injection, serangan XSS, serangan CSRF, serangan Redirection dan banyak lagi.

Validasi-Sanitasi-Escaping-Nonce
Poin yang perlu diingat

Berbagai teknik seperti Sanitasi data, Validasi data, Pelepasan data, penggunaan dan verifikasi nonce, pengalihan aman, dan kemampuan pengguna juga dibahas. Karena ini, ada masalah keamanan di WordPress.

Kesimpulannya ,

  1. Jangan Percayai Masukan Pengguna untuk menghindari Kerentanan WordPress.
  2. Validasi, Sanitasi semua input dan keluarkan semua data output
  3. Percayakan pada WordPress!

Jika Anda menghadapi masalah terkait ancaman dan serangan yang disebutkan di atas, beri tahu kami. Pakar kami akan memberikan solusi yang sesuai dengan masalah Anda.