Ketika saya menolak kode AI meskipun fungsi utamanya berjalan, masalah pertama yang saya cari adalah keamanan dasar: otentikasi, session, dan pengelolaan secret. Pada artikel ini saya tunjukkan langkah konkret untuk cek keamanan kode AI sebelum menerima kontribusi otomatis, khususnya menyentuh auth, secret, serta deteksi penyalahgunaan.

1. Validasi Auth dan Session secara Menyeluruh

Otomatisasi AI sering menghasilkan query database atau permintaan API yang terlihat benar, tetapi saya perlu bukti bahwa permintaan itu berjalan di dalam boundary otorisasi yang jelas. Langkah penting yang saya pakai sebelum menerima kode adalah:

  • Kaji ulang flow token: pastikan token dipakai dari header resmi (Authorization: Bearer) dan tidak dimasukkan ulang sebagai parameter query yang bisa bocor.
  • Verifikasi middleware: apakah middleware auth memang memanggil jwt.verify(), memeriksa audience/issuer, dan menolak cache tanpa invalidasi.
  • Kontrol session: cek apakah token disimpan di storage yang tepat (misal Secure HTTP-only cookie) dan sesi dihentikan saat logout atau token dicabut.

Contoh audit cepat: jalankan permintaan yang sengaja memakai token valid tapi di luar scope, lalu pastikan kode menolak. Saya kerap menambahkan test unit yang mensimulasikan token luar scope. Kode AI yang tidak menyediakan pemeriksaan scope otomatis saya tolak, karena artinya tidak ada jaminan otorisasi granular.

2. Penanganan Secret dan Konfigurasi Sensitif

Secret bukan hanya kata sandi. Dalam proses review saya, kode AI ditolak ketika ia menggunakan secret hard-coded atau menaruh file konfigurasi raw dalam repositori. Saya mengharuskan:

  • Secret injection melalui variabel lingkungan: pastikan kode membaca secret dari process.env atau vault sejenis, dan selalu logging key-nya disensor.
  • Rotasi yang terdokumentasi: jika kode otomatis mengakses secret, ada mekanisme untuk rotasi (token jangka pendek, refresh) dan tidak menyimpan lama di memori.
  • Mekanisme fallback aman: jika secret tidak tersedia, kode harus gagal dengan log yang menolak eksekusi, bukan mencoba koneksi dengan string kosong.

Pengujian praktisnya: hapus secret dari environment test dan pastikan kode tidak jalan sembarangan. Saya menolak kontribusi yang menampilkan secret saat error atau menyimpan secret ke log default, karena kebocoran data sensitif ini tidak terdeteksi oleh fungsi AI otomatis.

3. Validasi Input, Upload, dan Limit Abuse

Saat menilai kode AI, saya menaruh perhatian ekstra pada tempat data masuk: endpoint upload, parameter JSON, maupun form multipart. Saya menolak kode jika tidak ada:

  • Validasi tipe dan panjang: pastikan struktur input dicek menggunakan schema (misalnya zod atau ajv) sebelum dipakai.
  • Sanitasi upload file: upload harus dilakukan ke storage yang membatasi ekstensi dan memeriksa signature. Simpan file di area terisolasi agar kode tidak langsung mengeksekusi nama file atau path.
  • Rate limit dan abuse detection: log penyalahgunaan (multiple 429 atau percobaan brute-force) dan masukkan ke sistem alarm. Saya menolak sistem yang mengandalkan Cloud default tanpa deteksi custom karena AI cenderung menghasilkan endpoint plain tanpa proteksi abuse.

Contoh implementasi rate limit yang saya terima biasanya memakai Redis counter: setiap permintaan increment counter berdasarkan IP + user ID, reset setiap interval, dan disertai response yang jelas saat limit terlampaui. Tanpa validasi ini, AI code dapat membuka pintu DDoS atau upload berbahaya.

4. Pencegahan Abuse yang Terbukti

AI bisa menghasilkan logika otomatis yang ‘membaca’ data sensitif atau mengekspos API. Saya mengkhawatirkan abuse karena ia jarang mengecek edge case. Cara saya memastikan tidak ada abuse:

  • Rate limit berbasis user session: jika terdapat API untuk eksplorasi data, pastikan ada batasan operasi per user role.
  • Audit logging: setiap tindakan berisiko harus terekam detail: user ID, timestamp, IP. Bila AI code menerima permintaan, saya cek apakah log ini terpenuhi sehingga jejak tindakan dapat dilacak.
  • Monitoring anomaly: pastikan ada metrik error spike, status 500, atau response time tinggi yang dipantau dan memicu pager.

Saya menolak kode yang tidak menyediakan hook logging atau rate limit, karena meski fungsinya berjalan, potensi abuse bisa besar. Penambahan circuit breaker atau flag disable otomatis juga meningkatkan keyakinan saya.

5. Checklist Final Sebelum Menerima Kode AI

Setelah melakukan pemeriksaan utama, saya mengandalkan checklist berikut:

  1. Auth & session dipaksa melalui middleware/ guard.
  2. Secret hanya diakses lewat vault/ env, bukan commit.
  3. Input divalidasi dan upload di-scan.
  4. Rate limit dibangun dengan pengukuran dan penalti.
  5. Audit log & monitoring tersedia untuk abuse.

Jika salah satu poin tidak terpenuhi, saya lebih memilih menolak kontribusi AI hingga perbaikan dilakukan. Pendekatan When I reject AI code even if it works memastikan kode yang masuk tidak hanya berjalan, tetapi juga aman dan dapat diaudit.