Lewati ke konten utama

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.

  • 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.