Hooks

Hook secrets: Oppdag hardkodede hemmeligheter

Skann en kodebase etter hardkodede påloggingsdetaljer rett fra kommandolinjen.

Hooken secrets flagger påloggingsdetaljer som er skrevet rett inn i kildekoden i stedet for å bli lest fra miljøet. Den ser på opphav (en literal eller et oppslag i miljøet), ikke på innholdet i verdien, så den trenger ingen uttømmende katalog over leverandørprefikser og gir nesten ingen falske positiver. Den er den deterministiske motoren bak spesialiseringen secrets.

Signaturer i formatet til en leverandør, påloggingsdetaljer i tilkoblingsstrenger og en literal som er bundet til en identifikator med et navn som tyder på en hemmelighet, er språkuavhengige: Den samme strengen leses likt i alle filer. De to heuristikkene som avhenger av syntaks, et miljøoppslag med en hardkodet standardverdi og en hemmelighet som flyter inn i en loggsink, er språkbevisste, så en console.log fra JavaScript blir aldri lest i en Rust-fil, og os.getenv("X", "default") fra Python blir gjenkjent på egne premisser.

Kjør​

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

Gjennomgangen skriver ut opptil to seksjoner. Hardcoded secrets found er funnene (en hardkodet standardverdi for en miljøvariabel med et navn som tyder på en hemmelighet, påloggingsdetaljer bygd inn i en tilkoblingsstreng, eller en verdi som passer et kuratert leverandørformat), så hooken avslutter med en exit-kode som ikke er null. Secret handling to review manually er spor å følge opp: en vanlig literal bundet til en identifikator med et navn som tyder på en hemmelighet (opphavet kan avgjøres, men ikke om verdien er en ekte hemmelighet), og en verdi med et navn som tyder på en hemmelighet, som flyter inn i en sink for logg eller respons. Finner den ingenting, skriver den ut no hardcoded secrets found.

CLI-alternativer​

AlternativVerdiBeskrivelse
--diren mappeAvgrens gjennomgangen til en mappe. Kan gjentas og kombineres med --file.
--fileen filAvgrens gjennomgangen til én fil. Kan gjentas og kombineres med --dir.

Uten alternativer skanner den hele prosjektet.

Velg hva den skanner​

Den utelater det Git ignorerer. For å utelate mer, eller for å skanne det Git ignorerer, gi secrets egne innstillinger:

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

Konfigurer hookene dekker alle innstillingene.

Språkdekning​

Funnet for standardverdier i miljøet og sporet for loggsinker leser et eget sett med former per språk, så de dekker språkene nedenfor og er stille ellers. De tre andre signalene kjører på alle filer.

SignalSpråk
Standardverdi i miljøetJavaScript/TypeScript, Python, Ruby, PHP, Kotlin, Java, Go (cmp.Or), Rust, C#
Sink for logg eller responsJavaScript/TypeScript, Python, Ruby, PHP, Java, Kotlin, Go, Rust, C, C++, C#
Bryter dette med retningslinjene?

Nei. Å gjenkjenne formatet til en hemmelighet for å advare om at den er committet, er vanlig defensiv verktøybruk, den samme operasjonen som gitleaks, trufflehog og push protection i GitHub utfører. Hooken leverer gjenkjenningssignaturer (offentlige formater for tokens), aldri en ekte hemmelighet, og den reviderer og forklarer i stedet for å eksfiltrere data.

Vanlige spørsmål

Den ser på opphav, ikke på innholdet i verdien. Formater med høy treffsikkerhet (leverandørtokens, standardverdier i miljøet, tilkoblingsstrenger) er funn som avslutter med en exit-kode som ikke er null. En vanlig literal bundet til en identifikator med et navn som tyder på en hemmelighet, er et spor du må bekrefte, og den samme identifikatoren lest fra process.env blir ikke flagget i det hele tatt.