Memperkuat Auth, Session, dan Secret CodeIgniter 3 untuk API berarti membenamkan konfigurasi dan praktik yang menjaga kredensial, session, dan payload tetap konsisten dan terlindungi. Artikel ini langsung membahas konfigurasi config.php, session driver, validasi input, penanganan secret, rotasi, rate limiting, audit log, serta verifikasi tanpa perlukan referensi tambahan.
Memperkuat Auth, Session, dan Secret CodeIgniter 3 melalui Konfigurasi
Langkah pertama adalah menyelaraskan config.php, config/autoload.php, dan config/database.php untuk memastikan cookies, enkripsi, dan session menggunakan parameter aman yang bisa bertahan untuk API.
Contoh bagian config.php
$config['base_url'] = 'https://api.example.com/';
$config['cookie_secure'] = true;
$config['cookie_httponly'] = true;
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_api_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = true;
$config['csrf_protection'] = true;
$config['csrf_token_name'] = 'csrf_api_token';
$config['csrf_cookie_name'] = 'csrf_cookie';
$config['csrf_regenerate'] = true;
$config['csrf_exclude_uris'] = ['notification/webhook'];
Gunakan session driver database (table ci_sessions) sehingga session dapat dinonaktifkan secara terpusat dan audit bisa mengikuti. Pastikan database autoload memuat helper session.
Session Driver dan CSRF
Session database memudahkan invalidasi, tetapi perlu diimbangi dengan pruning, misalnya cron job untuk menghapus sesi kadaluarsa. CSRF tetap aktif meski API, karena token bisa dikirim melalui header custom. Jangan matikan CSRF saat API memakai session untuk menyimpan status sementara.
Validasi Input, Secret Rotation, dan Upload Aman
Validasi input sanitasi penting sebelum melewati controllers. Gunakan $this->form_validation untuk mengecek tipe, panjang, dan format data. File upload harus memakai allowed_types, ukuran terbatas, serta direktori di luar root publik.
Menangani secret dan rotasi
Simpan secret API di config/api_keys.php yang dimuat dari environment. Sertakan versi secret agar client bisa bertransisi tanpa pemutusan.
$config['api_secret_versions'] = [
'v3' => getenv('API_SECRET_V3'),
'v2' => getenv('API_SECRET_V2')
];
Periksa header X-Secret-Version dan bandingkan dengan versi aktif. Saat rotasi, beri jeda dukungan untuk versi lama agar tidak terjadi breaking change.
Contoh middleware controller
class Api_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->config('api_keys');
$this->load->library('form_validation');
$this->verify_auth();
}
protected function verify_auth()
{
$secret = $this->input->get_request_header('X-Api-Secret', true);
$version = $this->input->get_request_header('X-Secret-Version', true);
$valid_secrets = $this->config->item('api_secret_versions');
if (!isset($valid_secrets[$version]) || !hash_equals($valid_secrets[$version], $secret)) {
log_message('warning', 'Secret mismatch for API');
return $this->output->set_status_header(401)->set_output(json_encode(['error' => 'Unauthorized']));
}
}
}
Jika controller Anda mendukung multi secret, tambahkan mekanisme pencatatan
versi secret yang digunakan agar rotasi dan audit menjadi terukur.
Rate Limiting Sederhana dan Audit Log Akses
Rate limiting mencegah abuse. Implementasi sederhana menggunakan cache/DB untuk menyimpan hit per IP per endpoint.
protected function rate_limit($key, $limit = 60, $window = 60)
{
$this->load->driver('cache', ['adapter' => 'file']);
$cache_key = 'rl_' . $key;
$hits = (int) $this->cache->get($cache_key);
if ($hits >= $limit) {
return false;
}
$this->cache->save($cache_key, $hits + 1, $window);
return true;
}
Panggil fungsi ini di awal request API. Pertahankan informasi IP, route, dan user agent di tabel api_access_logs untuk audit.
Contoh kolom audit log: id, request_time, client_ip, endpoint, user_id, status_code, secret_version. Gunakan library DB untuk insert tanpa mengganggu jalur utama.
Strategi Migrasi dan Checklist Verifikasi API
Untuk migrasi tanpa breaking change, ikuti langkah berikut:
- Perbarui konfigurasi di staging saja, lakukan test suite untuk endpoint kritis.
- Tambahkan header secret version untuk kompatibilitas.
- Aktifkan rate limit dan audit log secara bertahap (per pengguna/test group).
- Monitor response 4xx/5xx, rollback jika terjadi lonjakan.
Berikut checklist verifikasi agar API konsisten:
- Session cookie secure dan httponly serta disimpan di database.
- Secret bersama logger mencatat versi dan IP.
- Validasi input minimal untuk setiap parameter publik.
- Upload file dibatasi tipe, size, dan disimpan di folder non-public.
- Rate limit dijalankan, fallback header
Retry-Afterdisediakan. - Audit log terupdate setiap request dan tersedia query untuk query auditing.
Dengan checklist tersebut, API tetap konsisten sepanjang rotasi secret, perubahan session, dan penambahan proteksi upload file.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!