[{"data":1,"prerenderedAt":751},["ShallowReactive",2],{"tool-detect-secrets-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":13,"about":20,"sources":29,"cover":57,"og":58,"expertise":59,"locales":60,"lang":62,"title":64,"description":65,"coverAlt":66,"url":32,"pricing":67,"kind":68,"metaTitle":69,"takeaways":70,"faq":76,"toc":89,"blocks":114,"others":544},"detect-secrets","2026-08-03",10,"security",[9,10,11,12],"Secret scanning","Pre-commit","Git","DevSecOps",[4,14,15,16,17,18,19],"detect-secrets vs gitleaks","detect-secrets baseline","secret scanning tools comparison","gitleaks vs trufflehog","rotate leaked api keys","pre-commit secret hook",[21,24,26],{"name":22,"url":23},"Yelp","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FYelp",{"name":11,"url":25},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGit",{"name":27,"url":28},"Apache License","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FApache_License",[30,33,36,39,42,45,48,51,54],{"title":31,"url":32},"Yelp\u002Fdetect-secrets: README and usage","https:\u002F\u002Fgithub.com\u002FYelp\u002Fdetect-secrets",{"title":34,"url":35},"Yelp\u002Fdetect-secrets: CHANGELOG (v1.5.0, 6 May 2024)","https:\u002F\u002Fgithub.com\u002FYelp\u002Fdetect-secrets\u002Fblob\u002Fmaster\u002FCHANGELOG.md",{"title":37,"url":38},"Yelp\u002Fdetect-secrets: plugin and verification documentation","https:\u002F\u002Fgithub.com\u002FYelp\u002Fdetect-secrets\u002Fblob\u002Fmaster\u002Fdocs\u002Fplugins.md",{"title":40,"url":41},"detect-secrets 1.5.0 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fdetect-secrets\u002F",{"title":43,"url":44},"Yelp\u002Fdetect-secrets: releases","https:\u002F\u002Fgithub.com\u002FYelp\u002Fdetect-secrets\u002Freleases",{"title":46,"url":47},"Gitleaks README (MIT, Go)","https:\u002F\u002Fgithub.com\u002Fgitleaks\u002Fgitleaks",{"title":49,"url":50},"TruffleHog README (AGPL-3.0, credential verification)","https:\u002F\u002Fgithub.com\u002Ftrufflesecurity\u002Ftrufflehog",{"title":52,"url":53},"GitHub Docs: About secret scanning","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fsecret-scanning\u002Fintroduction\u002Fabout-secret-scanning",{"title":55,"url":56},"betterleaks\u002Fbetterleaks","https:\u002F\u002Fgithub.com\u002Fbetterleaks\u002Fbetterleaks","\u002Fimages\u002Fblog\u002Fdetect-secrets\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fdetect-secrets\u002Fog.jpg","ai-engineer",[61,62,63],"en","de","hu","detect-secrets: Secret Scanning mit eingecheckter Baseline","Was detect-secrets tut, wie sich seine eingecheckte Baseline von gitleaks und TruffleHog unterscheidet, warum Verifikationsaufrufe in der CI zählen und wo das Tool aufhört.","Diagramm: Dateien laufen durch Transformer, Plugins, Filter und Verifikation in eine JSON-Baseline, die dann das Pre-Commit-Gate und die Audit-Sitzung speist.","Apache-2.0","Secret detection","detect-secrets: Secret Scanning mit Baseline · Balázs Csorba",[71,72,73,74,75],"detect-secrets akzeptiert, dass ein Repository bereits Secrets enthalten kann. Eine eingecheckte .secrets.baseline hält die Funde fest, und der Hook blockiert nur neue. Die Einführung braucht also kein Aufräumprojekt voraus.","Die Präzision kommt aus Labels, nicht aus besseren Regexen: detect-secrets audit mit --stats ist die Messung, und --exclude-files, --exclude-lines, --word-list sowie die beiden Entropie-Schwellen sind die Stellschrauben.","Die Verifikation ist standardmäßig an und ruft den ausstellenden Dienst über das Netz. Das senkt Fehlalarme stark und verlangt in einer abgeschotteten CI eine bewusste Entscheidung.","Version 1.5.0 vom 6. Mai 2024 ist weiterhin die neueste Veröffentlichung, die Python-3.13-Unterstützung liegt unveröffentlicht auf master. Version pinnen und keine neue Automatisierung auf neue Detektoren planen.","gitleaks ist die einfachere Wahl für ein neues Repository, TruffleHog bestätigt, ob ein Schlüssel noch lebt. detect-secrets hat den Audit- und Rotationsablauf, den die anderen beiden nicht bieten.",[77,80,83,86],{"q":78,"a":79},"Was ist eine .secrets.baseline und warum wird sie eingecheckt?","Eine JSON-Datei, die alle aktuell gefundenen Secrets zusammen mit der Plugin- und Filterkonfiguration und einem Hash je Fund listet. Eingecheckt gibt sie dem Pre-Commit-Hook eine stabile Referenz: bereits gelistete Funde werden ignoriert, alles Neue bricht den Commit ab. Zugleich ist sie die Migrations-Checkliste, weil detect-secrets audit labelt, welche Einträge echte Secrets sind.",{"q":81,"a":82},"Findet detect-secrets Secrets in der Git-Historie?","Nein, und das ist Absicht: Das Werkzeug scannt die versionierten Dateien im Arbeitsbaum, ein vor Jahren committetes und wieder entferntes Credential sieht es also nicht. Das README begründet das mit den Kosten, die das Durchlaufen der Historie bei jedem Lauf verursachen würde. Für die Historie braucht es einen gesonderten einmaligen Scan mit gitleaks oder TruffleHog und danach ein Rewrite, falls das Credential je gültig war.",{"q":84,"a":85},"Was machen --only-verified und --no-verify?","Standardmäßig versucht das Tool jeden Fund zu verifizieren, indem es den Dienst anfragt, der das Credential ausgestellt hat, und dabei die Techniken aus dem keyhacks-Projekt nutzt. --only-verified meldet nur die bestätigten Credentials, das ist präzise, braucht aber ausgehende Netzverbindungen; -n (--no-verify) schaltet die Verifikation ganz ab, was ein abgeschotteter CI-Runner braucht.",{"q":87,"a":88},"Wird detect-secrets noch gepflegt?","Stabil, aber ruhig: 1.5.0 vom 6. Mai 2024 ist zugleich die neueste Veröffentlichung auf PyPI und der neueste GitHub-Tag. Commits kommen weiterhin in geringem Tempo, der letzte auf master ist vom April 2026, und die Python-3.13-Unterstützung wurde im Januar 2025 ohne Release gemergt. Behandeln Sie es als gepflegt statt entwickelt, pinnen Sie v1.5.0 und lesen Sie master, wenn Sie das neuere Python brauchen.",[90,93,96,99,102,105,108,111],{"id":91,"title":92},"what-it-is","Was es ist",{"id":94,"title":95},"how-it-works","Wie es funktioniert",{"id":97,"title":98},"getting-started","Erste Schritte",{"id":100,"title":101},"signal-vs-noise","Signal und Rauschen",{"id":103,"title":104},"rotation-workflow","Der Rotations-Workflow",{"id":106,"title":107},"where-it-shingles","Wo es schlecht sitzt",{"id":109,"title":110},"verdict","Fazit",{"id":112,"title":113},"sources","Quellen",[115,119,128,131,147,226,227,230,239,242,253,254,265,267,270,272,287,302,303,306,356,369,370,381,394,397,398,401,489,492,493,496,508,514,515],{"type":116,"content":117},"paragraph",[118],"detect-secrets ist Yelps Apache-2.0-Secret-Scanner für Git-Repositories, und die Idee, die ihn von allen anderen unterscheidet, ist die Baseline. Sie akzeptieren, dass ein Repository bereits Secrets enthalten kann, halten fest, was drin ist, und von da an blockiert das Tool nur noch neue. Das ist ein bewusst unspektakuläres Design und nach wie vor die richtige Form für eine Codebasis, für die niemand Zeit zum Aufräumen hat. Der Haken ist der Wartungszustand: 1.5.0 vom 6. Mai 2024 ist immer noch die neueste Version, der letzte Commit auf master stammt aus April 2026.",{"type":116,"content":120},[121,122,127],"Er gehört an dieselbe Stelle wie gitleaks und TruffleHog, vor den Commit oder vor die Pipeline. Er ist kein Secret Manager: Er findet, er blockiert, und er übergibt eine Liste zum Rotieren. GitHubs eigenes Secret Scanning deckt nur bei GitHub gehostete Repositories ab und braucht für private Repositories GitHub Secret Protection; für GitLab, Bitbucket oder eine selbst gehostete Forge tut es nichts. Wo ein Scanner in die Geschichte rund um Sandbox-Pflichten für Agenten gehört, steht in ",{"tag":123,"to":124,"children":125},"link","\u002Fblog\u002Fsandboxing-coding-agents-ci-checklist",[126],"Sandboxing von Coding-Agenten in der CI",".",{"type":129,"level":130,"id":91,"text":92},"heading",2,{"type":116,"content":132},[133,134,138,139,142,143,146],"Das Paket bringt drei Kommandos mit, und das README ist ungewöhnlich klar darüber, welches wann gehört. ",{"tag":135,"children":136},"code",[137],"detect-secrets scan"," erzeugt oder aktualisiert die Baseline, ",{"tag":135,"children":140},[141],"detect-secrets-hook"," prüft eine Dateiliste dagegen und endet mit einem Fehlercode, sobald etwas Neues auftaucht, und ",{"tag":135,"children":144},[145],"detect-secrets audit"," ist eine interaktive Sitzung, die Funde als echte Secrets oder Fehlalarme labelt und diese Labels zurück in die Baseline schreibt.",{"type":148,"ordered":149,"items":150},"list",false,[151,157,170,186,203,208,217],[152,156],{"tag":153,"children":154},"strong",[155],"Python, Apache-2.0, Version 1.5.0",", veröffentlicht am 6. Mai 2024, mit 4.649 Sternen und 573 Forks. Der PyPI-Klassifizierer sagt production\u002Fstable, das beschreibt eher die API als die Roadmap.",[158,161,162,165,166,169],{"tag":153,"children":159},[160],"27 Detektoren",", die ",{"tag":135,"children":163},[164],"--list-all-plugins"," auflistet, in drei Familien: Regex-Regeln für AWS, GitHub, GitLab, Slack, Stripe, OpenAI, npm, PyPI, Telegram, Twilio und private Schlüssel; Entropie-Detektoren für Base64- und Hex-Strings; und ein Keyword-Detektor, der den Wert ignoriert und Zuweisungen an Namen wie ",{"tag":135,"children":167},[168],"password"," markiert.",[171,174,175,178,179,178,182,185],{"tag":153,"children":172},[173],"Filter laufen nach den Plugins"," und entscheiden, was übrig bleibt: ",{"tag":135,"children":176},[177],"--exclude-files",", ",{"tag":135,"children":180},[181],"--exclude-lines",{"tag":135,"children":183},[184],"--exclude-secrets",", eine Wortliste eigener Bezeichner und Inline-Pragmas.",[187,190,191,194,195,198,199,202],{"tag":153,"children":188},[189],"Verifikation ist standardmäßig an",". Für erkannte Muster fragt das Tool den ausstellenden Dienst, ob das Credential echt ist. ",{"tag":135,"children":192},[193],"-n"," (",{"tag":135,"children":196},[197],"--no-verify",") schaltet das ab, ",{"tag":135,"children":200},[201],"--only-verified"," behält nur die bestätigten.",[204,207],{"tag":153,"children":205},[206],"Die Baseline ist der gesamte Zustand",". Sie ist eine JSON-Datei im Repository mit der Plugin- und Filterkonfiguration plus einem gehashten Fingerabdruck für jeden Fund.",[209,212,213,216],{"tag":153,"children":210},[211],"Audit ist die Messung",". Die Labels lassen ",{"tag":135,"children":214},[215],"detect-secrets audit --stats"," melden, wie gut jeder Detektor auf Ihrem Code funktioniert, und das ist der einzige ehrliche Weg zum Tunen.",[218,221,222,225],{"tag":153,"children":219},[220],"Drei Einsatzformen",": Pre-Commit-Hook, CI-Job über gestagte oder versionierte Dateien, oder als Bibliothek über ",{"tag":135,"children":223},[224],"SecretsCollection",", wenn es in Ihre eigene Werkzeugkette soll.",{"type":129,"level":130,"id":94,"text":95},{"type":116,"content":228},[229],"Die Engine hat zwei Stufen. Plugins liefern potenzielle Secrets, dann entscheiden Filter und die Verifikationsregelung, was tatsächlich gemeldet wird. Transformer normalisieren die Eingabe zuerst, weshalb sich INI-, YAML-, XML- und Markdown-Dateien zeilenweise ohne Sonderfälle pro Format prüfen lassen. Ein serialisierbares Settings-Objekt verbindet beide Hälften und steckt in der Baseline, sodass ein Scan auf einem CI-Runner exakt die Konfiguration verwendet, die die Datei auf einem Laptop erzeugt hat.",{"type":231,"attrs":232,"inner":236,"caption":237},"diagram",{"viewBox":233,"role":234,"aria-labelledby":235},"0 0 720 300","img","d1-ds-t d1-ds-d","\u003Ctitle id=\"d1-ds-t\">detect-secrets: einmal scannen, bei jedem Commit prüfen\u003C\u002Ftitle>\u003Cdesc id=\"d1-ds-d\">Versionierte Git-Dateien laufen durch Transformer, Plugins und Filter, die Verifikation ruft bei passenden Plugins einen Dienst auf, und das Ergebnis landet in einer eingecheckten JSON-Baseline. Pre-Commit-Hook und Audit-Sitzung lesen nur diese Baseline.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"28\" class=\"d-title\">detect-secrets: einmal scannen, bei jedem Commit prüfen\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"28\" text-anchor=\"end\" class=\"d-label\">detect-secrets Doku\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"56\" class=\"d-label\">EINMAL PRO BASELINE\u003C\u002Ftext>\u003Crect x=\"20\" y=\"70\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"80\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Git-Dateien\u003C\u002Ftext>\u003Ctext x=\"80\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">Arbeitsbaum, git\u003C\u002Ftext>\u003Cpath d=\"M140 102 H152\" class=\"d-line\" \u002F>\u003Cpath d=\"M160 102 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"160\" y=\"70\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"220\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Transformer\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">ini, yaml, xml\u003C\u002Ftext>\u003Cpath d=\"M280 102 H292\" class=\"d-line\" \u002F>\u003Cpath d=\"M300 102 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"300\" y=\"70\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"360\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Plugins\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">regex, entropie\u003C\u002Ftext>\u003Cpath d=\"M420 102 H432\" class=\"d-line\" \u002F>\u003Cpath d=\"M440 102 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"440\" y=\"70\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"500\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Filter\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">plus Verifikation\u003C\u002Ftext>\u003Cpath d=\"M560 102 H572\" class=\"d-line\" \u002F>\u003Cpath d=\"M580 102 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"580\" y=\"70\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"640\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Baseline\u003C\u002Ftext>\u003Ctext x=\"640\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">json, gehasht\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"172\" class=\"d-label\">BEI JEDEM COMMIT\u003C\u002Ftext>\u003Cpath d=\"M600 134 C600 162 185 160 185 176\" class=\"d-line\" \u002F>\u003Cpath d=\"M185 186 l-5 -9 h10 z\" class=\"d-head\" \u002F>\u003Cpath d=\"M660 134 C660 162 535 160 535 176\" class=\"d-line\" \u002F>\u003Cpath d=\"M535 186 l-5 -9 h10 z\" class=\"d-head\" \u002F>\u003Crect x=\"20\" y=\"186\" width=\"330\" height=\"64\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"185\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">detect-secrets-hook\u003C\u002Ftext>\u003Ctext x=\"185\" y=\"235\" text-anchor=\"middle\" class=\"d-small\">gestagte Dateien, Exit 1\u003C\u002Ftext>\u003Crect x=\"370\" y=\"186\" width=\"330\" height=\"64\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"535\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">detect-secrets audit\u003C\u002Ftext>\u003Ctext x=\"535\" y=\"235\" text-anchor=\"middle\" class=\"d-small\">echt oder Fehlalarm\u003C\u002Ftext>",[238],"Ein Scan erzeugt die Baseline; Hook und Audit-Sitzung lesen sie nur.",{"type":116,"content":240},[241],"Die Verifikation ist der Mechanismus, der entscheidet, ob das Tool praktisch taugt. Seit 0.12.4 kann ein Plugin eine verify-Funktion implementieren, die den ausstellenden Dienst fragt, ob das Credential noch lebt, und dabei die Techniken aus dem keyhacks-Projekt nutzt. Die Verifikation bekommt zusätzlich fünf Zeilen Kontext vor und nach dem Treffer, weil die Forschung hinter dieser Entscheidung eine 80-prozentige Chance gefunden hat, die zweite Hälfte eines Multi-Faktor-Secrets in der Nähe zu finden. Der Zugewinn an Präzision ist groß; der Preis ist eine ausgehende Netzwerkanfrage bei jedem Commit, der eine passende Zeile berührt.",{"type":116,"content":243},[244,245,248,249,252],"Die Baseline übernimmt dann das Trennen der Belange. ",{"tag":135,"children":246},[247],"detect-secrets scan --baseline .secrets.baseline"," scannt den Baum neu, migriert die Datei in das aktuelle Format, fügt neue Funde hinzu, entfernt verschwundene und erhält die Audit-Labels, sodass der Diff klein genug zum Review bleibt. Das Flag ",{"tag":135,"children":250},[251],"--slim"," geht weiter und minimiert den Diff zwischen Commits, kostet aber die Audit-Funktion: schlanke Baselines lassen sich später nicht mehr auditieren und müssen neu erzeugt werden.",{"type":129,"level":130,"id":97,"text":98},{"type":116,"content":255},[256,257,260,261,264],"Die Installation ist ",{"tag":135,"children":258},[259],"pip install detect-secrets"," oder ",{"tag":135,"children":262},[263],"brew install detect-secrets",". Version 1.5.0 unterstützt Python 3.8 bis 3.12 und hat 3.6 und 3.7 fallengelassen; master enthält bereits Python-3.13-Unterstützung, die aber in keinem Release steht, eine 3.13-Umgebung muss also aus Git installieren. Die dokumentierte Einrichtung ist ein Pre-Commit-Hook mit der Baseline als Argument.",{"type":135,"code":266},"# .pre-commit-config.yaml\nrepos:\n  - repo: https:\u002F\u002Fgithub.com\u002FYelp\u002Fdetect-secrets\n    rev: v1.5.0\n    hooks:\n      - id: detect-secrets\n        args: ['--baseline', '.secrets.baseline']\n        exclude: package.lock.json",{"type":116,"content":268},[269],"Danach erzeugen Sie die Baseline einmal im Repository-Root und checken sie ein. Von diesem Moment an läuft der Hook bei jedem Commit und schlägt nur bei Zeilen fehl, die nicht in der Datei stehen. Der erste Scan eines alten Repositorys kann Tausende Funde liefern, und genau dafür gibt es die Baseline.",{"type":135,"code":271},"pip install detect-secrets\n\n# once, from the repository root: record what is already there\ndetect-secrets scan > .secrets.baseline\n\n# after real leaks are rotated, or the repo legitimately grew\ndetect-secrets scan --baseline .secrets.baseline\n\n# label findings once, then keep the labels\ndetect-secrets audit .secrets.baseline\n\n# CI: fail the build on anything the baseline does not list\ngit diff --staged --name-only -z | xargs -0 \\\n  detect-secrets-hook --baseline .secrets.baseline",{"type":116,"content":273},[274,275,278,279,282,283,286],"Inline-Allowlisting ist die zweite Hälfte des Ablaufs. Eine Zeile mit ",{"tag":135,"children":276},[277],"# pragma: allowlist secret"," am Ende oder eine Zeile darüber mit ",{"tag":135,"children":280},[281],"\u002F\u002F pragma: allowlist nextline secret"," wird übersprungen, ohne die Baseline anzufassen, und das ist das richtige Werkzeug für Testfixtures oder Doku-Beispiele. ",{"tag":135,"children":284},[285],"detect-secrets scan --only-allowlisted"," dreht die Prüfung um und meldet genau diese Zeilen, damit das Pragma nicht unauffällig zum Ort für echte Zugangsdaten wird.",{"type":288,"variant":289,"title":290,"body":291},"callout","warn","Zwei Dinge vorher klären",[292,297],[293,294,296],"Die Verifikation sendet bei jeder Maschine, die den Hook ausführt, Anfragen an fremde APIs. In einem abgeschotteten CI-Netz verlangsamt das entweder den Scan oder lässt ihn scheitern, also entscheiden Sie bewusst zwischen ",{"tag":135,"children":295},[193]," in der CI und einer Proxy-Allowlist für die Dienste, gegen die verifiziert wird.",[298,301],{"tag":135,"children":299},[300],"detect-secrets audit --report"," kann die Secret-Werte selbst ausgeben. Führen Sie das Audit auf einem Laptop aus und pastieren Sie die Ausgabe niemals in ein Ticket, einen Chat oder ein CI-Log. Die Baseline speichert ausschließlich Hashes.",{"type":129,"level":130,"id":100,"text":101},{"type":116,"content":304},[305],"Von Haus aus sind die Detektoren auf ein generisches Repository abgestimmt, und die Arbeit danach ist das Tunen auf Ihres. Der Audit-Schritt ist keine Formalität: Er ist die einzige verfügbare Messung, und er ist manuell.",{"type":148,"ordered":307,"items":308},true,[309,314,326,336,345,350],[310,311,313],"Baseline erzeugen, dann eine repräsentative Stichprobe mit ",{"tag":135,"children":312},[145]," labeln. Ohne das funktioniert nichts weiter auf dieser Liste.",[315,316,319,320,322,323,325],"Die Statistik lesen. Detektoren, die überwiegend Fehlalarme liefern, werden mit ",{"tag":135,"children":317},[318],"--disable-plugin"," abgeschaltet oder mit ",{"tag":135,"children":321},[177]," und ",{"tag":135,"children":324},[181]," eingegrenzt.",[327,328,331,332,335],"Schieben Sie statt Detektoren zu löschen die Entropie-Schwellen: ",{"tag":135,"children":329},[330],"--base64-limit"," steht standardmäßig auf 4.5, ",{"tag":135,"children":333},[334],"--hex-limit"," auf 3.0, und das sind die beiden Stellschrauben, die das Tool anbietet.",[337,338,341,342,127],"Ergänzen Sie eine Wortliste eigener Bezeichner über ",{"tag":135,"children":339},[340],"--word-list","; dafür braucht es das Extra ",{"tag":135,"children":343},[344],"detect-secrets[word_list]",[346,347,349],"Erwägen Sie das optionale Gibberish-Modell für Secrets, die wie Wörter aussehen. Es ist nicht standardmäßig aktiv, weil es Werte wie ",{"tag":135,"children":348},[168]," ebenfalls übergeht.",[351,352,355],"Nach jeder Änderung mit ",{"tag":135,"children":353},[354],"--baseline"," neu scannen und den Diff der Baseline-Datei lesen. Ein kleinerer Diff bedeutet weniger Rauschen, nicht weniger Secrets.",{"type":288,"variant":357,"title":358,"body":359},"tip","Das Gate in zwei Schritten ausrollen",[360],[361,362,364,365,368],"Den Hook zunächst einen Sprint lang nur melden lassen und Funde pro Tausend geänderter Zeilen zählen. Erst dann blockierend schalten. Ein Gate, das zu oft anschlägt, wird mit ",{"tag":135,"children":363},[193],", einem ",{"tag":135,"children":366},[367],"SKIP","-Präfix oder einem Force-Push umgangen, und ein umgangenes Gate ist schlimmer als keines, weil das Team sich abgedeckt fühlt.",{"type":129,"level":130,"id":103,"text":104},{"type":116,"content":371},[372,373,376,377,380],"Das dritte Kommando bezahlt das Tunen, und es findet nichts Neues. Audit-Labels schreiben ",{"tag":135,"children":374},[375],"is_secret"," in die Baseline; zusammen mit ",{"tag":135,"children":378},[379],"--report"," entsteht daraus die Liste der Credentials, die noch im Repository liegen und ersetzt werden müssen. Diese Liste macht aus einem Scan eine Sicherheitsaufgabe mit Verantwortlichem und Frist.",{"type":148,"ordered":149,"items":382},[383,385,387,392],[384],"Erst labeln, dann berichten. Ein als echtes Secret markierter Fund in der Baseline ist ein Eintrag auf der Migrationsliste.",[386],"Beim Anbieter rotieren, nicht im Repository. Eine gelöschte Datei ändert nichts daran, ob der Schlüssel funktioniert.",[388,389,391],"Danach mit ",{"tag":135,"children":390},[354]," neu scannen. Der Fund verschwindet aus der Datei, und dieser Diff ist der Beleg, dass die Migration fertig ist.",[393],"Das Scannen der Historie getrennt halten. Das Werkzeug schaut nie in alte Commits; ein Rewrite oder ein einmaliger History-Scan ist eine andere Aufgabe.",{"type":116,"content":395},[396],"Das ist die Trennung der Belange, die das README beschreibt, und immer noch das stärkste Argument für das Tool. Es verlangt nicht, dass Sie das Repository erst aufräumen, bevor es nützlich wird, und genau das verlangen Scanner, die man nachträglich auf eine gewachsene Codebasis setzt.",{"type":129,"level":130,"id":106,"text":107},{"type":116,"content":399},[400],"Die Schwächen sind strukturell, nicht kosmetisch. Mehrzeilige Secrets findet es nicht, und ein Standardpasswort, das der Keyword-Detektor nicht kennt, auch nicht; das README sagt das in einem Abschnitt namens Caveats ausdrücklich. Die Git-Historie scannt es absichtlich nicht, ein vor Jahren committetes und wieder gelöschtes Credential ist für es unsichtbar. Eigene Plugins werden durch Importieren einer beliebigen Datei geladen, was die Plugin-Dokumentation selbst als Sicherheitsannahme kennzeichnet. Und das Projekt steht im Wartungsmodus: 1.5.0 vom Mai 2024 ist weiterhin der neueste Tag, die Python-3.13-Unterstützung liegt seit Januar 2025 auf master, und der Issue-Tracker zeigt 184 offene Tickets.",{"type":402,"head":403,"rows":427},"table",[404,412,418,421],[405,406,407,408,409,410,411],"M","e","r","k","m","a","l",[413,406,414,406,415,414,416,417,406,415,407,406,414,417],"d","t","c","-","s",[419,420,414,411,406,410,408,417],"g","i",[422,407,423,424,424,411,406,425,426,419],"T","u","f","H","o",[428,445,452,461,470,480],[429,433,439,441],[430,420,431,406,432,431],"L","z","n",[434,435,410,415,436,406,416,437,127,438],"A","p","h","2","0",[405,440,422],"I",[434,442,443,430,416,444,127,438],"G","P","3",[446,448,450,451],[447,435,407,410,415,436,406],"S",[443,449,414,436,426,432],"y",[442,426],[442,426],[453,455,457,459],[454,407,408,406,432,432,423,432,419,417,409,426,413,406,411,411],"E",[456],"27 Detektoren: Regex, Entropie, Schlüsselwortnamen",[458],"TOML-Regelsatz, Regex plus Entropie, pro Regel erweiterbar",[460],"Über 800 klassifizierte Credential-Typen",[462,464,466,468],[463,406,407,420,424,420,408,410,414,420,426,432],"V",[465],"Ja, ein Netzwerkaufruf je erkanntem Muster",[467],"Nein",[469],"Ja, es meldet sich an, um zu prüfen, ob das Credential lebt",[471,474,476,478],[472,410,417,473,406,417,473,411,420,406,417,414],"W"," ",[475],"Versionierte Git-Dateien im Arbeitsbaum, dazu die Bibliotheks-API",[477],"Git-Patches über git log -p, Verzeichnisse, stdin",[479],"Git, GitHub, GitLab, S3, GCS, Docker, Jenkins, Elasticsearch und mehr",[481,483,485,487],[482,406,408,410,432,432,414,406,407,473,447,414,410,432,413],"B",[484],"Akzeptierte Funde: eine eingecheckte, auditierte Baseline",[486],"Funde aus einer Reportdatei als Baseline-Pfad",[488],"Ergebnisfilter, kein Baseline-Konzept",{"type":116,"content":490},[491],"Der entscheidende Vergleich ist, wohin die Arbeit geht. gitleaks ist eine einzige Go-Binary mit einem ausgezeichneten TOML-Regelformat, schneller einzuführen, und der Autor schreibt inzwischen offen, dass das Projekt feature complete sei, nur noch Sicherheitspatches bekomme und die neue Arbeit in ein anderes Projekt gewandert sei. TruffleHog geht den anderen Weg: Es verifiziert Credentials gegen laufende APIs, was der einzige Weg ist, um sicher zu sein, dass ein Fund dringend ist, und das zahlt es mit rund 800 Credential-Typen und einer AGPL-3.0-Lizenz, die manche Rechtsabteilungen nicht unterschreiben. detect-secrets tauscht Breite gegen den einen Ablauf, den die anderen nicht haben: eine auditierte, eingecheckte Liste dessen, was bereits bekannt ist, und einen Weg von dort weg.",{"type":129,"level":130,"id":109,"text":110},{"type":116,"content":494},[495],"Nimm es, aber als Infrastruktur und nicht als Projekt. Das Baseline-Modell ist die richtige Antwort für ein Repository mit jahrelanger Historie ohne Budget für eine Aufräumaktion, und es liefert das Artefakt, das eine Sicherheitsprüfung wirklich verlangt: eine Liste zum Rotieren. Es ist nicht das Werkzeug für ein neues Repository, wo gitleaks einfacher ist, und nicht für ein Team, das wissen muss, ob ein geleakter Schlüssel noch funktioniert, denn dafür ist TruffleHog zuständig.",{"type":148,"ordered":307,"items":497},[498,500,502,504,506],[499],"Wählen, wenn das Repository bereits Secrets enthält, die Historie nicht umgeschrieben werden kann und das Ziel ist, die Blutung zu stoppen statt ein Migrationsprojekt zu starten.",[501],"Die Baseline im Repository behalten und ihren Diff ins Review ziehen. Eine Baseline, die sich in einem unerklärten Commit ändert, ist der Fehlermodus, auf den man achten muss.",[503],"Einen Tag für das Tuning einplanen. Das Tool ist genau so gut wie seine gelabelte Baseline, und das Labeln ist Handarbeit.",[505],"Mit serverseitigem Scannen kombinieren, nicht es ersetzen. detect-secrets blockiert auf der Maschine eines Entwicklers; etwas muss trotzdem scannen, was bereits gelandet ist.",[507],"Keine neue Automatisierung darauf aufbauen, dass die Detektoren noch wachsen. 1.5.0 pinnen, master lesen, wenn Python 3.13 nötig ist, und einen Nachfolger einplanen, falls das Projekt still bleibt.",{"type":288,"variant":509,"title":510,"body":511},"note","Eine Faustregel",[512],[513],"Wenn im Team niemand bereit ist, die in der Baseline gelisteten Schlüssel zu rotieren, bringt detect-secrets nichts. Es senkt die Zahl künftiger Vorfälle, nicht die der bereits im Repository liegenden.",{"type":129,"level":130,"id":112,"text":113},{"type":148,"ordered":307,"items":516},[517,520,523,526,529,532,535,538,541],[518],{"tag":410,"href":32,"children":519},[31],[521],{"tag":410,"href":35,"children":522},[34],[524],{"tag":410,"href":38,"children":525},[37],[527],{"tag":410,"href":41,"children":528},[40],[530],{"tag":410,"href":44,"children":531},[43],[533],{"tag":410,"href":47,"children":534},[46],[536],{"tag":410,"href":50,"children":537},[49],[539],{"tag":410,"href":53,"children":540},[52],[542],{"tag":410,"href":56,"children":543},[55],[545,604,660,717],{"slug":546,"published":547,"minutes":6,"category":7,"tags":548,"keywords":553,"about":561,"sources":569,"cover":597,"og":598,"expertise":59,"locales":599,"lang":62,"title":600,"description":601,"coverAlt":602,"url":603,"pricing":67,"kind":550},"guardrails-ai","2026-09-29",[549,550,551,552],"Guardrails","Output validation","LLM reliability","Python",[554,555,556,557,558,559,560],"guardrails ai","guardrails ai validators","llm output validation python","guardrails vs nemo guardrails","guardrails on_fail actions","llm guardrails framework","pii validation llm output",[562,565,566],{"name":563,"url":564},"NVIDIA","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNVIDIA",{"name":27,"url":28},{"name":567,"url":568},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",[570,573,576,579,582,585,588,591,594],{"title":571,"url":572},"Guardrails AI on GitHub: README, news and FAQ","https:\u002F\u002Fgithub.com\u002Fguardrails-ai\u002Fguardrails",{"title":574,"url":575},"guardrails-ai 0.11.0 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fguardrails-ai\u002F",{"title":577,"url":578},"Guardrails Hub: 65 validators","https:\u002F\u002Fwww.guardrailsai.com\u002Fhub",{"title":580,"url":581},"Guardrails documentation: error remediation and on-fail actions","https:\u002F\u002Fwww.guardrailsai.com\u002Fdocs\u002Fconcepts\u002Ferror_remediation",{"title":583,"url":584},"Guardrails documentation: use on-fail actions","https:\u002F\u002Fwww.guardrailsai.com\u002Fguardrails\u002Fdocs\u002Fhow-to-guides\u002Fuse_on_fail_actions",{"title":586,"url":587},"Migration issue 1560: moving off hosted remote inferencing","https:\u002F\u002Fgithub.com\u002Fguardrails-ai\u002Fguardrails\u002Fissues\u002F1560",{"title":589,"url":590},"NVIDIA NeMo Guardrails on GitHub","https:\u002F\u002Fgithub.com\u002FNVIDIA-NeMo\u002FGuardrails",{"title":592,"url":593},"NVIDIA NeMo Guardrails documentation","https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fguardrails\u002Flatest\u002Findex.html",{"title":595,"url":596},"OpenAI API pricing, including moderation","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing","\u002Fimages\u002Fblog\u002Fguardrails-ai\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fguardrails-ai\u002Fog.jpg",[61,62,63],"Guardrails AI: prüfen, was das Modell zurückgibt","Ein Test von Guardrails AI: 65 Validatoren, acht on-fail-Aktionen, das Ende der gehosteten Inferencing im August 2026 und wann NeMo Guardrails besser passt.","Covergrafik von Guardrails AI mit Validierungs-Pipeline-Labels","https:\u002F\u002Fwww.guardrailsai.com",{"slug":605,"published":606,"minutes":6,"category":7,"tags":607,"keywords":613,"about":620,"sources":627,"cover":652,"og":653,"expertise":59,"locales":654,"lang":62,"title":655,"description":656,"coverAlt":657,"url":623,"pricing":658,"kind":659},"semgrep","2026-08-14",[608,609,610,611,612],"SAST","Static analysis","CI security","Rule authoring","AppSec",[605,614,615,616,617,618,619],"semgrep vs codeql","semgrep rules","semgrep pricing","semgrep pro engine","free sast tools","semgrep ci github actions",[621,624],{"name":622,"url":623},"Semgrep","https:\u002F\u002Fsemgrep.dev",{"name":625,"url":626},"Static application security testing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStatic_application_security_testing",[628,631,634,637,640,643,646,649],{"title":629,"url":630},"Semgrep pricing: Free, Teams and Enterprise","https:\u002F\u002Fsemgrep.dev\u002Fpricing\u002F",{"title":632,"url":633},"Semgrep Community Edition","https:\u002F\u002Fsemgrep.dev\u002Fproducts\u002Fcommunity-edition",{"title":635,"url":636},"Semgrep documentation: cross-file analysis","https:\u002F\u002Fdocs.semgrep.dev\u002Fsemgrep-code\u002Fsemgrep-pro-engine-intro\u002F",{"title":638,"url":639},"Semgrep documentation: usage and billing","https:\u002F\u002Fdocs.semgrep.dev\u002Fusage-and-billing\u002Foverview\u002F",{"title":641,"url":642},"Semgrep releases: v1.179.0","https:\u002F\u002Fgithub.com\u002Fsemgrep\u002Fsemgrep\u002Freleases",{"title":644,"url":645},"Semgrep Rules License v1.0","https:\u002F\u002Fsemgrep.dev\u002Flegal\u002Frules-license\u002F",{"title":647,"url":648},"Important updates to Semgrep OSS, 13 December 2024","https:\u002F\u002Fsemgrep.dev\u002Fblog\u002F2024\u002Fimportant-updates-to-semgrep-oss\u002F",{"title":650,"url":651},"OpenGrep repository","https:\u002F\u002Fgithub.com\u002Fopengrep\u002Fopengrep","\u002Fimages\u002Fblog\u002Fsemgrep\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fsemgrep\u002Fog.jpg",[61,62,63],"Semgrep: statische Analyse, die in einen Pull Request passt","Semgrep parst über 30 Sprachen und gleicht YAML-Muster in Sekunden ab, die Engine steht unter LGPL-2.1. Cross-file-Analyse, Regelsätze und KI-Triage liegen hinter den bezahlten Stufen.","Diagramm der Semgrep-Scan-Pipeline, von Quelldateien über Parsing und Regelabgleich bis zu gemeldeten Findings","Free · from $30 per seat","Static analysis with AI rules",{"slug":661,"published":662,"minutes":663,"category":7,"tags":664,"keywords":668,"about":677,"sources":683,"cover":708,"og":709,"expertise":59,"locales":710,"lang":62,"title":711,"description":712,"coverAlt":713,"url":714,"pricing":715,"kind":716},"lakera-guard","2026-08-04",9,[665,549,666,667],"Prompt injection","LLM security","Content moderation",[669,670,671,672,673,674,675,676],"lakera guard","lakera guard review","prompt injection filter","prompt injection detection","llm guardrails comparison","pint benchmark","check point ai guardrails","lakera pricing",[678,680],{"name":665,"url":679},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",{"name":681,"url":682},"Check Point","https:\u002F\u002Fwww.checkpoint.com\u002F",[684,687,690,693,696,699,702,705],{"title":685,"url":686},"Lakera documentation: Guard API","https:\u002F\u002Fdocs.lakera.ai\u002Fdocs\u002Fapi\u002Fguard",{"title":688,"url":689},"Guard API endpoint reference","https:\u002F\u002Fdocs.lakera.ai\u002Fapi-reference\u002Flakera-api\u002Fguard\u002Fscreen-content",{"title":691,"url":692},"Lakera documentation: projects","https:\u002F\u002Fdocs.lakera.ai\u002Fdocs\u002Fprojects",{"title":694,"url":695},"Lakera documentation: self-hosting","https:\u002F\u002Fdocs.lakera.ai\u002Fdocs\u002Fselfhosting",{"title":697,"url":698},"Lakera platform pricing","https:\u002F\u002Fplatform.lakera.ai\u002Fpricing",{"title":700,"url":701},"PINT benchmark on GitHub","https:\u002F\u002Fgithub.com\u002Flakeraai\u002Fpint-benchmark",{"title":703,"url":704},"Lakera homepage","https:\u002F\u002Fwww.lakera.ai\u002F",{"title":706,"url":707},"Check Point press release on the Lakera acquisition","https:\u002F\u002Fwww.checkpoint.com\u002Fpress-releases\u002Fcheck-point-acquires-lakera-to-deliver-end-to-end-ai-security-for-enterprises\u002F","\u002Fimages\u002Fblog\u002Flakera-guard\u002Fcover.webp","\u002Fimages\u002Fblog\u002Flakera-guard\u002Fog.jpg",[61,62,63],"Lakera Guard: Prompt-Injection-Filter an der Request-Grenze","Ein Test von Lakera Guard: ein Endpunkt vor dem Modell, die PINT-Benchmark-Ergebnisse dahinter und warum die Gratis-Stufe bei 10.000 Anfragen pro Monat endet.","Coverbild zum Lakera-Guard-Test: ein Filterschirm vor einem Sprachmodell","https:\u002F\u002Fwww.lakera.ai","Free tier · from $20 per month","Prompt injection filter",{"slug":718,"published":719,"minutes":663,"category":7,"tags":720,"keywords":722,"about":727,"sources":732,"cover":744,"og":745,"expertise":59,"locales":746,"lang":62,"title":747,"description":748,"coverAlt":749,"url":730,"pricing":67,"kind":750},"rebuff","2026-06-22",[665,666,549,721],"Canary tokens",[718,672,723,724,725,726],"rebuff python sdk","llm prompt injection guardrail","canary token leak detection","rebuff alternative",[728,731],{"name":729,"url":730},"Rebuff","https:\u002F\u002Fgithub.com\u002Fprotectai\u002Frebuff",{"name":567,"url":568},[733,735,738,741],{"title":734,"url":730},"Rebuff repository, archived 16 May 2025",{"title":736,"url":737},"Rebuff 0.1.1 on PyPI, released 20 January 2024","https:\u002F\u002Fpypi.org\u002Fproject\u002Frebuff\u002F",{"title":739,"url":740},"LangChain: Rebuff, detecting prompt injection attacks","https:\u002F\u002Fwww.langchain.com\u002Fblog\u002Frebuff",{"title":742,"url":743},"LLM Guard repository, archived 9 July 2026","https:\u002F\u002Fgithub.com\u002Fprotectai\u002Fllm-guard","\u002Fimages\u002Fblog\u002Frebuff\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frebuff\u002Fog.jpg",[61,62,63],"Rebuff: vier Schichten Prompt-Injection-Erkennung, inzwischen archiviert","Rebuff bewertete Prompts mit Heuristiken, einem LLM, einem Vektorstore früherer Angriffe und Canary-Tokens. Das Repository wurde im Mai 2025 archiviert, die letzte Version stammt von Januar 2024.","Diagramm des Rebuff-Erkennungspfads, vom eingehenden Prompt über Heuristiken, LLM-Check und Vektorsuche bis zum Ergebnis","Prompt injection detection",1791383550650]