# Hook secrets: deteksi secret yang hardcoded

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

Kanonis: https://lagune.ai/id-ID/docs/hooks/secrets
Bahasa: id-ID
Asli: https://lagune.ai/docs/hooks/secrets
Terakhir diperbarui: 2026-11-06

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`](https://lagune.ai/id-ID/docs/catalog).

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

```bash
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

| Opsi     | Nilai     | Deskripsi                                                                          |
| -------- | --------- | ---------------------------------------------------------------------------------- |
| `--dir`  | direktori | Membatasi pemindaian ke satu direktori. Bisa diulang dan digabung dengan `--file`. |
| `--file` | file      | Membatasi 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:

```bash
npx lagune write add --ignore test/fixtures --checker secrets
```

```json
{
  "checkers": {
    "secrets": { "gitignore": false, "ignore": ["test/fixtures"] }
  }
}
```

[Konfigurasi hook](https://lagune.ai/id-ID/docs/hooks/configure) 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.

| Sinyal                 | Bahasa                                                                          |
| ---------------------- | ------------------------------------------------------------------------------- |
| Default environment    | JavaScript/TypeScript, Python, Ruby, PHP, Kotlin, Java, Go (`cmp.Or`), Rust, C# |
| Sink log atau response | JavaScript/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

### Bagaimana hook secrets menghindari positif palsu?

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.
