> Mit csinál a detect-secrets, miben különbözik a becommitolt baseline a gitleakstól és a TruffleHogtól, miért számít az ellenőrző hívás a CI-ban, és hol ér véget a tool.
>
> Web page: https://balazscsorba.com/hu/blog/detect-secrets · Language: Magyar · Also available in: [English](https://balazscsorba.com/blog/detect-secrets.md) · [Deutsch](https://balazscsorba.com/de/blog/detect-secrets.md)
> Author: Balázs Csorba · Published: 2026-08-03 · Keywords: detect-secrets, detect-secrets vs gitleaks, detect-secrets baseline, secret scanning tools comparison, gitleaks vs trufflehog, rotate leaked api keys, pre-commit secret hook

[Blog](https://balazscsorba.com/hu/blog)/Biztonság és megfelelés

# detect-secrets: titkos kulcsok vizsgálata becommitolt baseline-nal

Mit csinál a detect-secrets, miben különbözik a becommitolt baseline a gitleakstól és a TruffleHogtól, miért számít az ellenőrző hívás a CI-ban, és hol ér véget a tool.

[Balázs Csorba](https://balazscsorba.com/hu/about)·2026\. augusztus 3.·10 perc olvasás

-   Secret scanning
-   Pre-commit
-   Git
-   DevSecOps

![Széles lap öt kis négyzettel, felette nagyító, alatta keresztezett vonal.](https://balazscsorba.com/images/blog/detect-secrets/cover.webp?v=bd656d8345)

## A lényeg röviden

-   A detect-secrets elfogadja, hogy a repóban már lehetnek titkok. A becommitolt .secrets.baseline rögzíti a találatokat, és a hook csak az újat blokkolja, tehát a bevezetéshez nem kell előbb rendrakási projekt.
-   A pontosság nem jobb regexekből, hanem jelölésekből jön: a detect-secrets audit a --stats kapcsolóval a mérés, a --exclude-files, --exclude-lines, --word-list és a két entrópia-küszöb pedig a tekerők.
-   Az ellenőrzés alapból be van kapcsolva, és hálózaton keresztül szólítja meg a kibocsátó szolgáltatást. Ez erősen csökkenti a zajt, és elszigetelt CI-futónál határozott döntést kíván.
-   Az 2024. május 6-i 1.5.0 verzió még mindig a legfrissebb kiadás, a Python 3.13 támogatás pedig kiadás nélkül ütközik a masteren. Pineld a verziót, és ne építs új automatizálást új detektorokra.
-   Új repóhoz a gitleaks az egyszerűbb választás, a TruffleHog pedig az, amely megerősíti, hogy él-e még egy kulcs. A detect-secrets birtokolja az audit- és rotálási munkafolyamatot, amelyet a másik kettő nem kínál.

Ezen az oldalon

1.  [Mi ez](https://balazscsorba.com/#what-it-is)
2.  [Hogyan működik](https://balazscsorba.com/#how-it-works)
3.  [Első lépések](https://balazscsorba.com/#getting-started)
4.  [Jel és zaj](https://balazscsorba.com/#signal-vs-noise)
5.  [A rotálási munkafolyamat](https://balazscsorba.com/#rotation-workflow)
6.  [Hol csúszik el](https://balazscsorba.com/#where-it-shingles)
7.  [Foglalat](https://balazscsorba.com/#verdict)
8.  [Források](https://balazscsorba.com/#sources)

Cikk meghallgatása

0:000:00

A detect-secrets a Yelp Apache-2.0 licenceű titkos kulcsfigyelője Git-repókhoz, és az, ami megkülönbözteti minden mástól, a baseline. Elfogadod, hogy a repóban már lehetnek titkok, rögzíted, mi van benne, és onnantól csak az újat blokkolja. Ez szándékosan lehangolt tervezés, és egy olyan kódbázisnál, amelyre senkinek nincs ideje rendrakni, továbbra is ez a jó forma. A probléma a karbantartottság: az 1.5.0-s verzió 2024. május 6-áról származik és még mindig a legfrissebb kiadás, a masteren landoló utolsó commit pedig 2026 áprilisában volt.

Ugyanoda tartozik, mint a gitleaks és a TruffleHog: a commit vagy a pipeline elé. Nem secret manager, hanem keres, blokkol, és átad egy listát a rotáláshoz. A GitHub saját secret scanningje csak a GitHubon tárolt repókat fedi le, a privát repókhoz GitHub Secret Protection kell, GitLabhez, Bitbuckethez vagy saját szerverhez pedig semmi. Hogy illeszkedik egy szkenner az ügynökök sandboxolásának történetébe, arról a [coding agentek sandboxolása a CI-ban](https://balazscsorba.com/hu/blog/sandboxing-coding-agents-ci-checklist) cikk szól.

## Mi ez

A csomag három parancsot ad, és a README szokatlanul egyértelmű arról, melyik mikor kell. A `detect-secrets scan` létrehozza vagy frissíti a baseline-t, a `detect-secrets-hook` egy fájllistát ellenőriz vele, és nem nulla kilépési kóddal tér vissza, ha bármi új jelenik meg, a `detect-secrets audit` pedig egy interaktív menet, amely valódi titkosnak vagy zajnak jelöli a találatokat, és ezeket a jelöléseket visszaírja a baseline-ba.

-   **Python, Apache-2.0, 1.5.0 verzió**, 2024. május 6-án jelent meg, 4.649 csillaggal és 573 forkkal. A PyPI-osztályozó production/stable értéket ír, ami inkább az API-ra vonatkozik, mint az ütemtervre.
-   **27 detektor** listáz a `--list-all-plugins` kapcsolóval, három családban: regex szabályok az AWS, GitHub, GitLab, Slack, Stripe, OpenAI, npm, PyPI, Telegram, Twilio és privát kulcsok számára; entrópia-detektorok Base64 és hex stringekre; és egy kulcsszó-detektor, amely az értéket figyelmen kívül hagyja, és a `password` jellegű nevekre való hozzárendeléseket jelöli.
-   **A szűrők a pluginek után futnak**, és döntik el, mi marad: `--exclude-files`, `--exclude-lines`, `--exclude-secrets`, a saját azonosítóidból álló szólista és a soron belüli pragmák.
-   **Az ellenőrzés alapból be van kapcsolva**. A felismert mintáknál a tool rákérdez a kibocsátó szolgáltatásnál, hogy valódi-e a titok. A `-n` (`--no-verify`) kikapcsolja, a `--only-verified` pedig csak a megerősítetteket hagyja meg.
-   **A baseline maga az egész állapot**. Egy JSON-fájl a repóban, amely a plugin- és szűrőbeállításokat meg minden találat lenyomtatott ujjlenyomatát tartalmazza.
-   **Az audit a mérés**. A jelölések miatt a `detect-secrets audit --stats` megmondja, hogy egy-egy detektor mennyire teljesít a te kódodban, és ez az egyetlen becsületes hangolási út.
-   **Három felhasználási mód**: pre-commit hook, CI-feladat a stage-elt vagy verziózott fájlokra, vagy könyvtárként a `SecretsCollection` osztályon keresztül, ha a saját eszközláncodba kell.

## Hogyan működik

A motor két lépcsős. A pluginek potenciális titkokat állítanak elő, majd a szűrők és az ellenőrzési szabály dönti el, mi kerül ténylegesen a jelentésbe. A transformerek előbb normalizálják a bemenetet, ezért az INI-, YAML-, XML- és Markdown-fájlok formányonkénti külön esetek nélkül vizsgálhatók soronként. A két felet összekötő, szerializálható settings-objektum a baseline-ban utazik, így a CI-futón futó vizsgálat pontosan azt a konfigurációt használja, amelyik a fájlt a gépeden létrehozta.

![detect-secrets: egyszer vizsgál, minden commitnál őriz A verziózott git-fájlok átmennek a transzformereken, plugineken és szűrőkön, az ellenőrzés támogatott pluginnél hálózati hívást indít, az eredmény pedig egy becommitolt JSON baseline-ba kerül. A pre-commit hook és az audit menet is ezt olvassa.](https://balazscsorba.com/images/blog/detect-secrets/diagram-7.webp?v=ea48ecd3d7)

Egy vizsgálat állítja elő a baseline-t; a hook és az audit menet csak olvassa.

Az ellenőrzés az a mechanizmus, amely eldönti, hogy használható-e a tool a gyakorlatban. A 0.12.4 óta egy plugin implementálhat verify függvényt, amely rákérdez a kibocsátó szolgáltatásnál, hogy él-e még a titok, a keyhacks projektben összegyűjtött technikákat használva. Az ellenőrzés öt sor kontextust is kap a találat előtt és után, mert az ezt alátámasztó kutatás szerint 80 százalék eséllyel megtalálható a többfaktoros titok második fele a közelben. A pontosságnövekedés nagy; az ár az egy kimenő hálózati kérés minden olyan commitnál, amely érint egy megfelelő sort.

A baseline utána elvégzi a belügyek szétválasztását. A `detect-secrets scan --baseline .secrets.baseline` újra átvizsgálja a fát, a fájlt a jelenlegi formátumra migrálja, hozzáadja az új találatokat, eldobja az eltűnteket, és megőrzi az audit jelöléseit, így a diff átnézhető marad. A `--slim` kapcsoló tovább megy, és minimalizálja a commitok közötti diffet, de ez az audit funkció ára: a karcsú baseline-okat később már nem lehet auditálni, újra kell őket gyártani.

## Első lépések

A telepítés a `pip install detect-secrets` vagy a `brew install detect-secrets`. Az 1.5.0 a Python 3.8 és 3.12 közötti verziókat támogatja, a 3.6-ot és 3.7-et eldobta; a masteren már ott a Python 3.13 támogatás is, de ez egy kiadásban sincs bent, ezért 3.13 környezetben gitből kell telepíteni. A dokumentált beállítás egy pre-commit hook, aminek a baseline az argumentuma.

```
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/Yelp/detect-secrets
    rev: v1.5.0
    hooks:
      - id: detect-secrets
        args: ['--baseline', '.secrets.baseline']
        exclude: package.lock.json
```

Ezután egyszer hozd létre a baseline-t a repó gyökerében, és commitold be. Attól kezdve a hook minden commitnál fut, és csak azoknál a soroknál bukik el, amelyek nincsenek a fájlban. Egy régi repó első vizsgálata több ezer találatot is visszaadhat, és pontosan erre való a baseline.

```
pip install detect-secrets

# once, from the repository root: record what is already there
detect-secrets scan > .secrets.baseline

# after real leaks are rotated, or the repo legitimately grew
detect-secrets scan --baseline .secrets.baseline

# label findings once, then keep the labels
detect-secrets audit .secrets.baseline

# CI: fail the build on anything the baseline does not list
git diff --staged --name-only -z | xargs -0 \
  detect-secrets-hook --baseline .secrets.baseline
```

A soron belüli engedélyezés a munkafolyamat másik fele. Az a sor, amely `# pragma: allowlist secret` végződéssel zárul, vagy amely fölött `// pragma: allowlist nextline secret` áll, kimarad anélkül, hogy hozzáérne a baseline-hoz, és ez a jó eszköz egy tesztfixture-höz vagy egy dokumentációs példához. A `detect-secrets scan --only-allowlisted` megfordítja az ellenőrzést, és pont azokat a sorokat jelenti, így a pragma nem válhat csendben a valódi titkok búvóhelyévé.

**Két döntés, mielőtt ez buildbe megy**

Az ellenőrzés a hookot futtató minden gépen kimenő kéréseket küld külső API-khoz. Elszigetelt CI-hálózaton ez vagy lassítja a vizsgálatot, vagy megbuktatja, tehát tudatosan dönts a `-n` használata és az ellenőrzött szolgáltatások proxy-allowlistje között.

`detect-secrets audit --report` kiírhatja magukat a titkokat is. Az auditot gépen futtasd, és a kimenetét soha ne másold be ticketbe, chatre vagy CI-logba. A baseline csak lenyomatokat tárol.

## Jel és zaj

Alapállapotban a detektorok egy általános repóra vannak hangolva, és a következő munka az, hogy a tieidre hangoljuk őket. Az audit lépés nem Formság: ez az egyetlen elérhető mérés, és kézzel végzik.

1.  Generáld a baseline-t, majd jelölj egy reprezentatív mintát a `detect-secrets audit` paranccsal. A lista többi pontja enélkül nem működik.
2.  Olvasd el a statisztikát. Azokat a detektorokat, amelyek nagyrészt zajt termelnek, kapcsold ki a `--disable-plugin` kapcsolóval, vagy szűkítsd a `--exclude-files` és `--exclude-lines` szabályokkal.
3.  Ne detektorokat törölj, hanem az entrópia-küszöböket told: a `--base64-limit` alapértéke 4.5, a `--hex-limit` értéke 3.0, és ez a két tekerő, amit a tool ad.
4.  Adj hozzá saját azonosítólistát a `--word-list` kapcsolóval, ehhez a `detect-secrets[word_list]` extra kell.
5.  Érdemes megfontolni az opcionális gibberish modellt azokhoz a titkokhoz, amelyek szónak látszanak. Alapból nincs bekapcsolva, mert a `password` jellegű értékeket is átugorja.
6.  Minden változtatás után futtasd újra a vizsgálatot a `--baseline` kapcsolóval, és olvasd el a baseline-fájl diffjét. A kisebb diff kevesebb zajt jelent, nem kevesebb titkot.

**Két lépésben vezesd be a kaput**

Először egy sprintre csak jelentésként futtasd a hookot, és számolj találatokat ezer módosított sorra. Csak utána tedd blokkolóvá. Az a kapu, amely túl gyakran sípol, a `-n` kapcsolóval, egy `SKIP` előtaggal vagy force-pushsal kerülhető meg, és egy megkerülött kapu rosszabb, mint a kapu nélküli állapot, mert a csapat fedezettnek érzi magát.

## A rotálási munkafolyamat

A harmadik parancs fizeti meg a hangolást, és nem új dolgot keres. Az audit jelölések `is_secret` értéket írnak a baseline-ba; a `--report` kapcsolóval együtt ebből jön ki az a lista, amelyen a repóban még meglepő titkok vannak, és amelyeket cserélni kell. Ez a lista alakítja a vizsgálatot tulajdonossal és határidővel rendelkező biztonsági feladattá.

-   Előbb jelölj, aztán riportálj. A baseline-ban valódi titkosként megjelölt találat egy migrációs lista bejegyzése.
-   A szolgáltatónál rotálj, ne a repóban. A fájl törlése nem változtat semmit azon, hogy a kulcs működik-e.
-   Utána futtasd újra a `--baseline` kapcsolóval. A találat eltűnik a fájliból, és ez a diff bizonyítja, hogy a migráció kész van.
-   A history vizsgálatát tartsd külön. A tool soha nem néz bele régi commitokba, az átírás vagy az egyszeri history-scan más feladat.

Ez az a belügyek szétválasztása, amit a README leír, és még mindig a legjobb érv a tool mellett. Nem követeli meg, hogy rendrakd a repót, mielőtt hasznossá válik, és pont ezt követelik meg azok a szkennerek, amelyeket utólag tesznek egy megnövekedett kódbázisra.

## Hol csúszik el

A gyengeségek strukturálisak, nem kosmetikaiak. Több soros titkot nem talál, és olyan alapértelmezett jelszót sem, amelyet a kulcsszó-detektor nem ismer, és ezt a README a Caveats szakaszban ki is mondja. A git-históriát szándékosan nem vizsgálja, így egy évekkel ezelőtt commitolt, majd törölt titok láthatatlanok számára. Az egyedi plugineket egy tetszőleges fájl importálásával tölti be, amit a plugin-dokumentáció maga is biztonsági feltételezésként jelöl. A projekt pedig karbantartási módban van: az 1.5.0 a 2024. május 6-áról még mindig a legfrissebb tag, a Python 3.13 támogatás 2025 januárja óta a masteren ütközik, és a hibajegyben 184 nyitott tétel várakozik.

Jellemző

detect-secrets

gitleaks

TruffleHog

Licenc

Apache-2.0

MIT

AGPL-3.0

Nyelv

Python

Go

Go

Felismerési modell

27 detektor: regex, entrópia, kulcsszónevek

TOML szabálykészlet, regex és entrópia, szabályonként bővíthető

Több mint 800 osztályozott hitelesítő adattípus

Ellenőrzés

Igen, felismert mintánként hálózati hívás

Nem

Igen, bejelentkezik, hogy ellenőrizze, él-e a titok

Mit olvas

A munkafában verziózott git-fájlok, plusz a könyvtár API-ja

git log -p patchek, könyvtárak, stdin

Git, GitHub, GitLab, S3, GCS, Docker, Jenkins, Elasticsearch és mások

Ismert állapot

Elfogadott találatok: egy becommitolt, auditált baseline

Találatok egy riportfájlból baseline útként

Eredményszűrés, baseline fogalom nélkül

A lényeges összehasonlítás az, hová megy a munka. A gitleaks egyetlen Go bináris, kiváló TOML szabályformátummal, gyorsabban bevezethető, és a szerzője ma már nyíltan kimondja, hogy a projekt feature complete, csak biztonsági javításokat kap, az új munka pedig másik projektbe költözött. A TruffleHog a másik irány: valós API-k ellen ellenőrizi a hitelesítő adatokat, és ez az egyetlen módja biztosan megmondani, hogy egy találat sürgős, ezt pedig körülbelül 800 adattípussal és AGPL-3.0 licencsel fizeti meg, amelyet egyes jogi osztályok nem írnak alá. A detect-secrets cserébe a szélességet adja fel az egyetlen munkafolyamat kedvéért, amely másoknál nincs: egy auditált, becommitolt lista arról, mi ismert már, és a kivezetés róla.

## Foglalat

Vedd fel, de infrastruktúraként, nem projektként. A baseline modell a helyes válasz egy több éves előzményekkel rendelkező repóhoz, ahol nincs keret a rendrakásra, és azt az artefaktumot állítja elő, amit egy biztonsági átnézés valójában kér: egy listát a rotálandó kulcsokról. Nem ez a tool az új repóhoz, ahol a gitleaks egyszerűbb, és nem az a csapaté, amelynek tudnia kell, hogy egy kiszivárgott kulcs még működik-e, az a TruffleHog dolga.

1.  Akkor válaszd, ha a repóban már vannak titkok, a history nem írható újra, és a cél a vérzés leállítása egy migrációs projekt indítása nélkül.
2.  Tartsd a baseline-t a repóban, és a diffjét vidd be a review-ba. A magyarázat nélkül változó baseline az a hibaforma, amit figyelni kell.
3.  Egy napot szánj a hangolásra. A tool pontosan olyan jó, mint a jelölt baseline, és a jelölés kézi munka.
4.  Egészítsd ki szerveroldali vizsgálattal, ne helyettesítsd. A detect-secrets egy fejlesztő gépén blokkol; valaminek a már becommolt dolgokat is át kell néznie.
5.  Ne építs új automatizálást arra a feltételezésre, hogy a detektorok még szaporodnak. Pineld az 1.5.0-ot, olvasd a mastert, ha Python 3.13 kell, és tervezz utódot, ha a projekt csendes marad.

**Egy ökölszabály**

Ha a csapatban senki nem hajlandó rotálni a baseline-ban felsorolt kulcsokat, a detect-secrets nem ér semmit. Csökkenti a jövőbeli incidensek számát, nem a repóban már meglévőkét.

## Források

1.  [Yelp/detect-secrets: README and usage](https://github.com/Yelp/detect-secrets)
2.  [Yelp/detect-secrets: CHANGELOG (v1.5.0, 6 May 2024)](https://github.com/Yelp/detect-secrets/blob/master/CHANGELOG.md)
3.  [Yelp/detect-secrets: plugin and verification documentation](https://github.com/Yelp/detect-secrets/blob/master/docs/plugins.md)
4.  [detect-secrets 1.5.0 on PyPI](https://pypi.org/project/detect-secrets/)
5.  [Yelp/detect-secrets: releases](https://github.com/Yelp/detect-secrets/releases)
6.  [Gitleaks README (MIT, Go)](https://github.com/gitleaks/gitleaks)
7.  [TruffleHog README (AGPL-3.0, credential verification)](https://github.com/trufflesecurity/trufflehog)
8.  [GitHub Docs: About secret scanning](https://docs.github.com/en/code-security/secret-scanning/introduction/about-secret-scanning)
9.  [betterleaks/betterleaks](https://github.com/betterleaks/betterleaks)

## Gyakori kérdések

Mi az a .secrets.baseline, és miért commitolják be?

Egy JSON-fájl, amely felsorolja az összes aktuálisan talált titkot, a plugin- és szűrőbeállításokkal, valamint találatonként egy lenyomattal együtt. A becommitolás stabil hivatkozást ad a pre-commit hooknak: ami már szerepel a listán, azt figyelmen kívül hagyja, ami új, az megbuktatja a commitot. Ugyanakkor ez a migrációs lista is, mert a detect-secrets audit megjelöli, mely bejegyzések valódi titkok.

A detect-secrets megtalálja a titkokat a git historyban?

Nem, és ez szándékos: a munkafában verziózott fájlokat vizsgálja, így egy évekkel ezelőtt commitolt, majd eltávolított hitelesítő adatot nem lát. A README ezt azzal indokolja, hogy nem kell minden futáskor végigmenni a historyn. A historyhoz külön, egyszeri gitleaks- vagy TruffleHog-scan kell, majd egy átírás, ha a titok valaha érvényes volt.

Mit csinál a --only-verified és a --no-verify?

Alapértelmezés szerint a tool minden találatot ellenőrizni próbál úgy, hogy rákérdez a kibocsátó szolgáltatásnál, a keyhacks projekt technikáit használva. A --only-verified csak a szolgáltatás által megerősített hitelesítő adatokat jelenti, ami pontos, de kimenő hálózati hozzáférést kíván; a -n (--no-verify) teljesen kikapcsolja az ellenőrzést, és ezt kell elszigetelt CI-futónál.

Még karbantartják a detect-secrets-et?

Stabil, de csendes: az 2024. május 6-i 1.5.0 egyszerre a legfrissebb kiadás a PyPI-n és a legújabb GitHub-tag. A commitok ritkán érkeznek, a masteren legutóbbi 2026. áprilisi, a Python 3.13 támogatás pedig 2025 januárjában került be kiadás nélkül. Kezeld karbantartottként, ne fejlesztettként, pineld az 1.5.0-ot, és olvasd a masteret, ha az újabb Python kell.

Írta: Csorba Balázs

Senior fullstack és AI mérnök Stájerországban – több mint 10 év Vue, Nuxt, Node.js és PHP, ma AI-ügynököknek építek eszközöket.

[AI fejlesztés és MCP szerverek →](https://balazscsorba.com/hu/expertise/ai-engineer)[Rólam →](https://balazscsorba.com/hu/about)

## További cikkek

-   [LLM output guardrailek: moderáció, biztonságos megjelenítés és ellenőrzés, mielőtt bármi történne](https://balazscsorba.com/hu/blog/llm-output-guardrails-moderation)
-   [AI red teaming ellenőrzőlista LLM-appokhoz: mit támadj meg, mielőtt a felhasználók tennék](https://balazscsorba.com/hu/blog/ai-red-teaming-checklist-llm-apps)
-   [Slopsquatting: amikor a kódoló ágensek nem létező csomagokat telepítenek](https://balazscsorba.com/hu/blog/slopsquatting-ai-package-hallucinations)
-   [RAG-mérgezés: hogyan téríthet el néhány dokumentum egy asszisztenst, és hogyan védd a tudásbázist](https://balazscsorba.com/hu/blog/rag-poisoning-knowledge-base-attacks)

## Pont erre van szükséged?

Írj a projektedről vagy a pozícióról – szívesen hallok felőled.

[Lépj velem kapcsolatba](mailto:contact@balazscsorba.com) [Kapcsolódjunk LinkedInen](https://www.linkedin.com/in/balazs-csorba)
