Bagaimana mengamankan website yang menggunakan Codeigniter 4
Published on 22 Mar 2025 by nursahid 3927
Mengamankan website yang menggunakan CodeIgniter 4 sangat penting untuk mencegah serangan seperti SQL Injection, Cross-Site Scripting (XSS), CSRF, dan lainnya. Berikut adalah beberapa langkah yang bisa Anda terapkan:
✅ 1. Gunakan CSRF Protection
CodeIgniter 4 sudah memiliki fitur CSRF (Cross-Site Request Forgery) Protection bawaan.
Untuk mengaktifkannya:
???? Tambahkan di .env
security.csrfProtection = true
Atau di app/Config/Security.php:
public bool $csrfProtection = true;
???? Tambahkan Token di Form
= csrf_field(); ?>
Atau di AJAX:
js
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr('content')
}
________________________________________
✅ 2. Lindungi dari SQL Injection
Gunakan Query Builder daripada menulis query mentah:
$db = db_connect();
$query = $db->table('users')->where('email', $email)->get();
Jangan gunakan query langsung tanpa filter:
$query = $db->query("SELECT * FROM users WHERE email = '$email'"); // ❌ Rentan SQL Injection
________________________________________
✅ 3. Aktifkan XSS Filtering
Gunakan esc() untuk memfilter input yang ditampilkan di HTML:
echo esc($data['username']);
Atau saat mengambil input:
$name = $this->request->getPost('name', FILTER_SANITIZE_STRING);
________________________________________
✅ 4. Validasi Input dengan Validation Rules
Selalu validasi input sebelum diproses:
$validation = \Config\Services::validation();
$validation->setRules([
'email' => 'required|valid_email',
'password' => 'required|min_length[8]'
]);
if (!$validation->withRequest($this->request)->run()) {
return redirect()->back()->withInput()->with('errors', $validation->getErrors());
}
________________________________________
✅ 5. Hindari Menampilkan Error di Production
Di .env, ubah:
CI_ENVIRONMENT = production
Agar error tidak ditampilkan secara detail ke pengguna.
________________________________________
✅ 6. Gunakan HTTPS
Pastikan aplikasi hanya berjalan di HTTPS agar data lebih aman.
Di .htaccess, tambahkan:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
________________________________________
✅ 7. Batasi Akses ke public/
Pastikan semua request masuk ke dalam folder public/.
Di .htaccess root project:
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L]
________________________________________
✅ 8. Gunakan Password Hashing untuk Login
Jangan simpan password dalam teks biasa. Gunakan password_hash():
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
Dan verifikasi saat login:
if (password_verify($inputPassword, $user['password'])) {
echo "Login berhasil!";
}
________________________________________
✅ 9. Batasi Akses File dengan .htaccess
Pastikan direktori writable/ dan app/ tidak bisa diakses langsung dari browser.
Di dalam writable/.htaccess:
Deny from all
________________________________________
✅ 10. Gunakan Rate Limiting untuk API
Jika Anda memiliki API, batasi jumlah request agar tidak terkena DDoS:
$throttler = \Config\Services::throttler();
if ($throttler->check(md5($this->request->getIPAddress()), 60, MINUTE) === false) {
return $this->response->setStatusCode(429)->setBody('Terlalu banyak request, coba lagi nanti.');
}
(Limit: 60 request per menit per IP)
________________________________________
✅ 11. Gunakan session_regenerate_id() setelah Login
Untuk mencegah Session Hijacking, tambahkan ini setelah login:
session()->regenerate();
________________________________________
✅ 12. Filter Input dengan Content Security Policy (CSP)
Di app/Config/Filters.php, aktifkan CSP untuk mencegah XSS:
public $globals = [
'before' => [
'security'
]
];
________________________________________
✅ Kesimpulan
Mengamankan website CodeIgniter 4 membutuhkan kombinasi pengaturan server, keamanan input, serta praktik terbaik dalam pemrograman. Dengan menerapkan langkah-langkah di atas, website Anda akan lebih sulit untuk diretas.
Komentar