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

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.