// docs / security guides / claude code checklist
Checklist keamanan Claude Code: 26 item
Claude Code (agen CLI Anthropic) menghasilkan seluruh basis kode melalui perintah garis miring, mengelola pemfaktoran ulang multi-file, dan membaca file/writes melalui bash. Daftar periksa ini menargetkan risiko spesifik Claude Code: tidak ada kebijakan keamanan default, pembatasan tarif yang jarang ditambahkan, <code>.claude/CLAUDE.md</code> sebagai file pagar pembatas keamanan Anda, dan risiko melakukan <code>.env</code> atau token yang di-cache. 26 item di seluruh rahasia, database, autentikasi, header, penerapan, dan Claude Code - gotcha khusus.
PRE = pra-penerapan (audit sumber Anda). DEPLOY = pada waktu penerapan. POST = verifikasi pasca penerapan. Referensi item FixVibe periksa ID dalam formulir category.check-id jika relevan.
Rahasia dan kunci API (5 item)
Claude Code membaca seluruh pohon sumber dan mengeluarkan seluruh file. Rahasia dalam konteks Anda menjadi rahasia pada keluarannya.
- PRE โ Create
.claude/CLAUDE.mdwith security policies. Tambahkan: "Security Rules: Jangan pernah memasukkan kunci service_role ke dalam bundel klien. Selalu merutekan operasi sensitif melalui titik akhir khusus server. Verifikasi bahwa NEXT_PUBLIC_* env vars hanya berisi nilai aman (tanpa kunci, tanpa token)." Claude Code dibaca.claude/CLAUDE.mduntuk panduan proyek. - PRE โ Ensure
.env.localis in.gitignore. Claude Code mungkin secara tidak sengaja melakukan.env.localselama refactor. Jalankangit ls-files .env*untuk memeriksa apa yang dilacak. Jika.env.localada, maka akan terekspos. - PRE โ Audit generated API routes for env-var verification. Claude Code terkadang lupa memverifikasi bahwa
process.env.SECRETada di sisi server sebelum menggunakannya. Rute akan gagal dengan cepat jika env var tidak ada, bukan masuk ke default. - PRE โ Check the
.claudecache directory. Claude Code menyimpan konteks percakapan dalam.claude/cacheatau.claude/history. File-file ini tidak boleh dikomit. Tambahkan.claude/ke.gitignore. - POST โ Run secrets.browser-storage on the deployed app. Jika Claude Code memasukkan kunci, pemindaian pasif akan menemukannya dalam bundel yang dirender.
Kontrol akses basis data (4 item)
Claude Code sangat baik dalam menghasilkan skema, tetapi kebijakan RLS memerlukan instruksi eksplisit.
- PRE โ Instruct Claude Code on RLS in
.claude/CLAUDE.md. Tambahkan: "Setiap migrasi harus menyertakanALTER TABLE ... ENABLE ROW LEVEL SECURITYdanFORCE ROW LEVEL SECURITY. Setiap kebijakan harus memvalidasiauth.uid()pengguna." - PRE โ Review generated migrations for
FORCE ROW LEVEL SECURITY. Claude Code dapat menghasilkanENABLEtapi lupakanFORCE. TanpaFORCE, pemilik tabel (pelari migrasi) melewati RLS. Tambahkan secara manual jika tidak ada. - DEPLOY โ Test RLS enforcement after deploy. Buka Supabase Studio, pilih meja, konfirmasi RLS tombolnya adalah ON. Jika migrasi Claude Code menggunakan
ENABLEtanpaFORCE, tombol alihnya akan bertuliskan ON namun penegakannya belum selesai. - POST โ Run the baas.supabase-rls active check. Ia mencoba menulis dengan kunci segera. Jika berhasil, RLS belum lengkap. Tambahkan
FORCEke migrasi dan penerapan ulang.
Otentikasi dan sesi (4 item)
Claude Code menghasilkan aliran autentikasi dengan baik tetapi tidak secara otomatis menambahkan pembatasan laju atau memverifikasi semua klaim token di sisi server.
- PRE โ Mandate server-only auth verification in
.claude/CLAUDE.md. Tambahkan: "Setiap API rute yang mengubah data harus memverifikasi pengguna denganawait supabase.auth.getUser()di server. Jangan pernah mempercayaigetSession()atau pengguna ID dari badan permintaan." - PRE โ Check generated auth handlers for token expiry. Tautan ajaib dan token penyetelan ulang kata sandi memerlukan
expires_atyang didukung server. Tanya Claude Code: "Tambahkan cek yang menolak token yang lebih lama dari 1 jam." - PRE โ Verify sign-in redirect guards. Pengalihan param
nextharus dimulai dengan/dan bukan//. Tambahkan ke.claude/CLAUDE.md: "Validasi parameternext: harus dimulai dengan/, tolak jika dimulai dengan//atau berisi protokol." - POST โ Test logout clears cookies. Masuk, keluar, periksa Aplikasi โ Cookie. Cookie sesi harus dihapus. Jika tetap ada, titik akhir logout tidak merusak status.
HTTP header dan CSP (3 item)
Claude Code tidak menghasilkan middleware secara default kecuali Anda memintanya.
- PRE โ Add middleware request to
.claude/CLAUDE.md. Sertakan: "Buatsrc/middleware.tsdengan Content-Security-Policy menggunakan nonce per permintaan, HSTS, header X-Frame-Options, dan X-Content-Type-Options." Kemudian minta Claude Code untuk mengimplementasikannya. - PRE โ Verify
src/middleware.tsexists and has CSP. Dengan tata letak Next.jssrc/, middleware harus berada disrc/middleware.ts, bukan root proyek. Pastikan header CSP menyertakan'strict-dynamic'dan nonce. - POST โ Run headers.security-headers on the deployed URL. Pemeriksaan ini melaporkan header yang hilang dan menyarankan perbaikan untuk platform Anda.
Kebersihan penempatan (4 item)
Claude Code tidak mengonfigurasi platform penerapan Anda โ itu adalah tanggung jawab Anda, namun patut untuk diperiksa.
- DEPLOY โ Scope env vars per environment in Vercel (or equivalent). Pengaturan โ Variabel Lingkungan โ tetapkan setiap rahasia hanya ke Production. Jangan pernah berbagi
sk_live_*dengan Pratinjau atau Pengembangan. - DEPLOY โ Audit your CI workflow for secret echo. Jika GitHub Tindakan atau CI lainnya memiliki
echo $SECRETdi mana saja, hapuslah. Log build diarsipkan; rahasia dalam log dikompromikan. - DEPLOY โ Prefer platform-native secret storage. Vercel Pengaturan โ Variabel Lingkungan dienkripsi; GitHub Rahasia tindakan lebih baik daripada tidak sama sekali, tetapi tidak cocok dengan penyimpanan asli platform.
- POST โ Rotate any key that reached a public build. Jika kunci muncul di Vercel Pratinjau URL atau artefak publik apa pun selama beberapa detik, maka kunci tersebut telah disusupi. Segera putar.
Claude Code - gotcha khusus (5 item)
Pola unik untuk arsitektur dan alur kerja Claude Code:
- Claude Code forks work into subagents. Pada tugas besar, Claude Code dapat memunculkan beberapa instance subagen, masing-masing dengan konteks basis kode parsial. Jika salah satu subagen berhalusinasi tentang pola rahasia yang tidak dimiliki subagen lainnya, maka timbullah ketidakkonsistenan. Tinjau perbedaan terakhir dengan cermat.
- Bash operations are unverified. Claude Code mengeksekusi perintah bash secara langsung.
git commit -m "fix"memang nyaman, tetapi jika direktori kerja memiliki file.envdan sebuah glob menyertakannya, maka ia akan dikomit. Selalu tinjaugit diff --cachedsebelum Claude Code melakukan. - Context window boundaries create gaps. Jika basis kode Anda besar, konteks Claude Code mungkin terbagi menjadi beberapa jendela. Penanganan
.env.localdi satu jendela mungkin berbeda dengan yang lain. Terapkan kebijakan di.claude/CLAUDE.mddan verifikasi hasilnya. - Rate-limiting is almost never added without asking. Claude Code menghasilkan CRUD yang berfungsi tetapi jarang menyertakan header pembatas laju atau logika backoff eksponensial. Minta secara eksplisit di
.claude/CLAUDE.md. .claude/CLAUDE.mdis read but not enforced. Claude Code membaca.claude/CLAUDE.mdAnda sebagai petunjuk, bukan kendala. Jika petunjuknya bertentangan dengan tugas, Claude Code dapat mengabaikannya. Selalu tinjau hasilnya.
Langkah selanjutnya
Periksa general vibe coding security checklist untuk 44 item lintas alat, lalu lihat step-by-step hardening untuk pola waktu penerapan. Jika Anda juga menggunakan Cursor, lihat Cursor security checklist.
