Hook

Hook secrets: deteksi secret yang hardcoded

Pindai basis kode untuk menemukan kredensial yang hardcoded, langsung dari command line.

Hook secrets menandai kredensial yang tertanam di kode sumber alih-alih dibaca dari environment. Hook ini berpatokan pada asal-usul nilainya (literal atau pembacaan dari environment), bukan pada isi nilainya, sehingga tidak memerlukan katalog lengkap prefiks penyedia layanan dan hampir tidak menghasilkan positif palsu. Hook ini adalah engine deterministik di balik spesialisasi secrets.

Signature format penyedia layanan, kredensial di connection string, dan literal yang diberikan ke identifier bernama secret bersifat tidak bergantung pada bahasa: string yang sama terbaca sama di file mana pun. Dua heuristik yang bergantung pada sintaksis, yaitu pembacaan environment dengan nilai default yang hardcoded dan secret yang mengalir ke sink log, mengenali bahasa, sehingga console.log JavaScript tidak pernah dicari di file Rust dan os.getenv("X", "default") milik Python dikenali tersendiri.

Menjalankan​

npx lagune read secrets # scans the whole project
npx lagune read secrets --dir src # scans a directory
npx lagune read secrets --file config.ts # scans a single file

Pemindaian mencetak hingga dua bagian. Hardcoded secrets found berisi temuan (nilai default yang hardcoded untuk variabel environment bernama secret, kredensial yang tertanam di connection string, atau nilai yang cocok dengan format penyedia layanan yang terkurasi), jadi hook ini keluar dengan kode bukan nol. Secret handling to review manually berisi petunjuk: literal biasa yang diberikan ke identifier bernama secret (asal-usulnya bisa dipastikan, tetapi apakah nilainya secret sungguhan tidak bisa), dan nilai bernama secret yang mengalir ke sink log atau response. Proses yang bersih mencetak no hardcoded secrets found.

Opsi CLI​

OpsiNilaiDeskripsi
--dirdirektoriMembatasi pemindaian ke satu direktori. Bisa diulang dan digabung dengan --file.
--filefileMembatasi pemindaian ke satu file. Bisa diulang dan digabung dengan --dir.

Tanpa opsi apa pun, hook ini memindai seluruh proyek.

Pilih apa yang dipindai​

Hook ini melewati apa yang diabaikan Git. Untuk melewati lebih banyak, atau untuk memindai apa yang diabaikan Git, beri secrets pengaturannya sendiri:

npx lagune write add --ignore test/fixtures --checker secrets
{
"checkers": {
"secrets": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}

Konfigurasi hook membahas semua pengaturannya.

Cakupan bahasa​

Temuan default environment dan petunjuk sink log membaca kumpulan bentuk yang berbeda untuk tiap bahasa, jadi keduanya mencakup bahasa di bawah ini dan diam di bahasa lain. Tiga sinyal lainnya berjalan di setiap file.

SinyalBahasa
Default environmentJavaScript/TypeScript, Python, Ruby, PHP, Kotlin, Java, Go (cmp.Or), Rust, C#
Sink log atau responseJavaScript/TypeScript, Python, Ruby, PHP, Java, Kotlin, Go, Rust, C, C++, C#
Apakah ini masalah kebijakan?

Tidak. Mendeteksi format secret untuk memperingatkan bahwa secret itu telah di-commit adalah praktik standar perangkat keamanan defensif, operasi yang sama dengan yang dilakukan gitleaks, trufflehog, dan push protection GitHub. Hook ini membawa signature deteksi (format token yang bersifat publik), tidak pernah secret sungguhan, dan hook ini mengaudit serta menjelaskan alih-alih mengeksfiltrasi.

Pertanyaan yang sering diajukan

Hook ini berpatokan pada asal-usul nilai, bukan pada isinya. Format dengan tingkat keyakinan tinggi (token penyedia layanan, fallback environment, connection string) adalah temuan yang keluar dengan kode bukan nol. Literal biasa yang diberikan ke identifier bernama secret adalah petunjuk untuk ditinjau dan dikonfirmasi, dan identifier yang sama yang dibaca dari process.env sama sekali tidak ditandai.