Keamanan (Security) di CodeIgniter
CodeIgniter menyediakan berbagai fitur keamanan untuk membantu melindungi aplikasi web dari serangan umum seperti XSS, CSRF, SQL Injection, dan lainnya.
1. Proteksi Cross-Site Scripting (XSS)
Gunakan fungsi esc()
atau htmlspecialchars()
untuk menampilkan output ke browser dengan aman:
<?= esc($user->nama) ?>
Atau secara manual:
<?= htmlspecialchars($user->nama, ENT_QUOTES, 'UTF-8') ?>
2. Proteksi Cross-Site Request Forgery (CSRF)
CSRF token digunakan untuk memastikan permintaan berasal dari sumber yang sah.
a. Aktifkan CSRF di app/Config/Filters.php:
public $globals = [
'before' => [
'csrf',
],
];
b. Tambahkan token di form HTML:
<form method="post">
<?= csrf_field() ?>
<input type="text" name="nama">
<button type="submit">Kirim</button>
</form>
c. Konfigurasi tambahan di app/Config/Security.php:
public $csrfProtection = true;
public $tokenName = 'csrf_token_name';
public $headerName = 'X-CSRF-TOKEN';
public $cookieName = 'csrf_cookie_name';
3. Proteksi SQL Injection
Gunakan Query Builder atau parameter binding untuk mencegah SQL Injection:
// Aman
$db->query("SELECT * FROM users WHERE email = ?", [$email]);
Hindari interpolasi langsung ke query SQL seperti:
"SELECT * FROM users WHERE email = '$email'"
4. Password Hashing
Gunakan class Password
untuk menyimpan dan memverifikasi password:
a. Hash Password
$hashed = password_hash($password, PASSWORD_DEFAULT);
b. Verifikasi Password
if (password_verify($password_input, $hashed)) {
// cocok
}
5. Input Filtering
a. Filter HTML/PHP Tag
strip_tags($string);
b. Escape String
$db->escape($input);
6. Content Security Policy (CSP)
Untuk menambah keamanan terhadap XSS, kamu bisa mengaktifkan CSP di header HTTP. Contoh manual di BaseController:
$this->response->setHeader(
'Content-Security-Policy',
"default-src 'self'; script-src 'self'; style-src 'self'"
);
7. Proteksi Upload File
-
Validasi ekstensi dan tipe MIME
-
Batasi ukuran file
-
Simpan dengan nama acak
Contoh validasi:
$validationRules = [
'file' => 'uploaded[file]|max_size[file,2048]|ext_in[file,jpg,jpeg,png]'
];
8. Rate Limiting (Manual)
CodeIgniter tidak memiliki rate limiting bawaan, tapi kamu bisa mengimplementasikannya via middleware/filter dengan memanfaatkan session atau Redis.
9. HTTPS dan Secure Cookie
-
Gunakan HTTPS di server produksi.
-
Atur secure cookie di
app/Config/App.php
:
public $cookieSecure = true;
10. Tips Keamanan Tambahan
-
Selalu validasi dan sanitasi semua input
-
Gunakan
set_cookie()
untuk mengatur cookie dengan aman -
Gunakan
.env
untuk menyimpan kredensial -
Matikan debug mode di produksi:
.env → CI_ENVIRONMENT = production
Dengan memanfaatkan fitur keamanan CodeIgniter secara maksimal, kamu bisa melindungi aplikasi dari sebagian besar serangan umum di web.