Keamanan website menjadi aspek penting untuk melindungi dari ancaman seperti hacker, malware, hingga phishing. Tujuannya adalah menjaga privasi data pengunjung serta memastikan website tetap berfungsi dengan baik. Dalam artikel ini, kami akan membahas cara meningkatkan keamanan website CodeIgniter secara lengkap.
Apa itu CodeIgniter?
CodeIgniter adalah framework dengan arsitektur MVC (Model, View, dan Controller) yang digunakan untuk membuat atau mengembangkan website dinamis dengan basis PHP. Dengan konsep MVC, maka tampilan, data, dan logic akan dipisahkan. Ini merupakan konsep umum yang ada di dalam framework.
Selain itu, dengan konsep MVC akan memberikan kenyamanan saat harus bekerja dalam tim. Karena developer backend bisa cukup fokus pada bagian logic, sedangkan developer frontline, hanya fokus di bagian tampilan.
Selengkapnya tentang apa itu CodeIgniter bisa Anda pelajari pada artikel berikut: Apa itu CodeIgniter
Cara Meningkatkan Keamanan Website CodeIgniter
CodeIgniter memiliki beberapa fungsi keamanan yang bisa Anda aktifkan, untuk meningkatkan keamanan pada website dari serangan hacker, malware hingga phishing. Berikut adalah cara meningkatkan keamanan website CodeIgniter yang dapat Anda lakukan.
1. Mengaktifkan Proteksi CSRF
CodeIgniter menyediakan fitur proteksi CSRF yang dapat digunakan untuk melindungi aplikasi web dari serangan CSRF. CSRF adalah singkatan dari Cross-site Request Forgery, yaitu jenis serangan pada aplikasi web dimana penyerang memaksa pengguna yang sudah terautentikasi untuk melakukan tindakan yang tidak diinginkan.
Bayangkan seperti ini: Anda sedang login ke akun bank Anda, lalu secara tidak sengaja mengklik sebuah tautan yang tersembunyi di sebuah email. Tautan ini, tanpa sepengetahuan Anda, bisa saja mengirimkan perintah ke bank Anda untuk mentransfer uang ke rekening orang lain. Ini adalah contoh sederhana dari serangan CSRF.
Untuk mengaktifkan CSRF Protection di Codeigniter kita perlu mengubah pengaturan di file /application/config/config.php
$config['csrf_protection'] = TRUE; // SET TRUE UNTUK ENABLE CSRF PROTECTION
$config['csrf_token_name'] = 'csrf_test_name'; // NAMA CSRF TOKEN YANG AKAN DIGUNAKAN
$config['csrf_cookie_name'] = 'csrf_cookie_name'; // NAMA CSRF COOKIE YANG AKAN DIGUNAKAN
$config['csrf_expire'] = 7200; // JANGKA WAKTU CSRF TOKEN EXPIRED (DALAM DETIK)
$config['csrf_regenerate'] = TRUE; // JIKA TRUE MAKA CSRF TOKEN AKAN DI GENERATE ULANG UNTUK SETIAP REQUEST
$config['csrf_exclude_uris'] = array(); // ARRAY BERISI LIST URI YANG TIDAK MENGGUNAKAN CSRF PROTECTION
Kemudian, tambahkan form token pada form di view. Dengan menambahkan pengaturan diatas, CodeIgniter akan otomatis menambahkan token CSRF pada setiap form dan memverifikasi token pada setiap request.
2. Upgrade Codeigniter dan library-nya secara teratur
Lakukan upgrade versi Codeigniter beserta library yang Anda gunakan secara teratur, untuk memastikan keamanan script serta mendapatkan fitur baru yang dapat Anda gunakan. Dengan demikian, script CodeIgniter Anda akan lebih aman dari potensi peretasan.
3. Menggunakan Filter XSS
Cross-Site Scripting (XSS) adalah serangan di mana penyerang menyisipkan skrip berbahaya ke dalam halaman yang dijalankan di browser pengguna. CodeIgniter menyediakan filter XSS yang bisa diaktifkan saat menerima input dari pengguna.
Berikut contoh filter XSS pada form input:
$data = $this->input->post('input_name', TRUE); // TRUE akan memfilter XSS
4. Mencegah SQL Injection
CodeIgniter sudah menyediakan Query Builder yang secara otomatis melindungi aplikasi Anda dari SQL Injection. Selalu gunakan query builder atau prepared statements daripada menulis query SQL langsung.
Contoh penggunaan Query Builder:
$this->db->where('username', $username);
$this->db->where('password', $password);
$query = $this->db->get('users');
5. Mengaktifkan SSL
Cara ke lima untuk meningkatkan keamanan website CodeIgniter adalah mengaktifkan SSL atau HTTPS. Dengan HTTPS data antara server dan klien di enkripsi sehingga terhindar dari penyadapan dan manipulasi oleh pihak ketiga.
Pada Cogeigniter, konfigurasi HTTPS dilakukan melalui file application/config/config.php, dengan menambahkan atau mengubah base_url
menggunakan https.
$config['base_url'] = 'https://yourdomain.com';
Atau melalui .htaccess untuk memaksa mengalihkan ke HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Selengkapnya tentang HTTPS pada CodeIgniter bisa Anda pelajari di artikel berikut: Cara Setting HTTPS CodeIgniter
6. Menggunakan Session yang aman
Pastikan session
yang digunakan pada aplikasi Anda aman. Beberapa langkah untuk mengamankan session:
Gunakan session yang terenkripsi. Atur pengaturan session di config.php untuk memperkuat pengamanan:
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200; // 2 jam
$config['sess_save_path'] = sys_get_temp_dir();
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300; // 5 menit
7. Proteksi dari File Upload
Jika website menyediakan fitur bagi pengguna untuk mengunggah file, pastikan membatasi jenis file yang dapat diunggah dan ukuran file yang diizinkan. Pastikan juga file yang diunggah tidak dapat dieksekusi.
Contoh konfigurasi untuk membatasi jenis file yang dapat diunggah:
$config['allowed_types'] = 'jpg|jpeg|png';
Pada contoh diatas kita hanya membatasi extension file yang bisa diupload hanya file dengan extension jpg, jpeg, dan png.
8. Password Yang Aman
Untuk meningkatkan keamanan password di website CodeIgniter, Implementasikan kekuatan password pada form register dengan password yang kuat. Gunakan kombinasi karakter yang kuat (huruf besar, kecil, angka, simbol), panjang minimal 12 karakter.
Gunakan Hashing yang aman untuk password. Hash adalah salah satu fungsi pada php untuk melakukan (one way hashing) atau hashing satu arah untuk merubah plain text menjadi suatu kode acak atau kode enkripsi. metode ini cocok untuk mengamankan password anda, karena algoritma one way hashing ini tidak bisa kembali lagi ke data / plain teks sebelumnya.
BACA JUGA: Cara Kelola Sandi yang Aman Melalui Google Password Manager
9. Matikan Directory listings
Ketika directory listings aktif, directory yang tidak memiliki file index akan menampilkan daftar file yang terdapat pada directory tersebut terutama directory asset.
Untuk menyembunyikan file tersebut, cara pertama, buat sebuah file html kosong, dan beri nama index.htm kemudain upload ke website (atau pada folder/directory tertentu di website)
Sedangkan cara kedua, gunakan file .htaccess untuk men-disable directory listing. Masukkan saja perintah Options -Indexes
pada .htaccess. Sekarang, pengunjung website Anda akan mendapatkan error 403 dan bukan daftar dari isi direktori Anda.
10. Membatasi akses ke file penting
Pastikan file-file penting seperti .env, application/config, dan lainnya tidak dapat diakses langsung oleh pengguna. Anda bisa mengonfigurasi file .htaccess untuk memblokir akses ke file tertentu.
Contoh .htaccess untuk melindungi file konfigurasi:
<FilesMatch "^(application|system)/.*$">
Order Deny,Allow
Deny from all
</FilesMatch>
Gunakan CAPTCHA untuk menghindari serangan pada form atau formulir. Jika ada form atau formulir yang memungkinkan pengguna untuk mengirimkan data, gunakan CAPTCHA untuk mencegah serangan bot.
CodeIgniter tidak menyediakan CAPTCHA bawaan, tetapi bisa menggunakan layanan pihak ketiga seperti Google reCAPTCHA. Tutorial cara menambahkan reCAPTCHA di CodeIgniter 4 bisa Anda pelajari di artikel berikut.
11. Menonaktifkan Error Reporting
Cara meningkatkan keamanan website CodeIgniter yang terakhir adalah menonaktifkan error reporting. Jangan sampai pesan error muncul pada website jika sudah live (production), karena bisa memberikan informasi yang berguna bagi hacker. Nonaktifkan error reporting dengan mengubah konfigurasi Berikut
Untuk CodeIgniter 3 pada file index.php pastikan dikonfigurasi sebagai berikut :
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');
Untuk CodeIgniter 4 pada file .env, hilangkan tanda pagar (#) dibagian CI_ENVIRONMENT seperti berikut.
CI_ENVIRONMENT = production
Penutup
Menjaga keamanan website berbasis CodeIgniter adalah langkah penting untuk melindungi data dan memastikan performa situs tetap optimal. Dengan menerapkan langkah-langkah keamanan yang tepat, seperti yang telah kami sampaikan diatas, dapat meminimalkan risiko serangan.
Jika Anda membutuhkan layanan hosting yang cepat, aman dan andal untuk website CodeIgniter Anda, Rumahweb adalah pilihan yang tepat. Dilengkapi dengan SSL gratis, Firewall, ModSec, hingga Imunify360 yang merupakan kombinasi keamanan terbaik yang dapat melindungi website CodeIgniter Anda.
Demikian beberapa cara meningkatkan keamanan website CodeIgniter yang bisa Anda lakukan untuk melindungi website berbasis CodeIgniter agar lebih aman. Selamat mencoba 🙂