
oauth / api टोकन के लिए regex पैटर्न की सूची, स्रोत सहित
OAuth / API टोकन और सीक्रेट्स के लिए एक स्रोत-आधारित, परीक्षित, ऑफ़लाइन-प्रमाणित स्कैनर। प्रत्येक पैटर्न स्रोत-आधारित (प्राथमिक प्रदाता दस्तावेज़), परीक्षित (सकारात्मक + नकारात्मक नमूने), और प्रमाणित (RE2-संगत, ReDoS-जाँचा गया) है। विश्वास स्तरों के साथ एक CLI शिप करता है। सत्य का स्रोत build_patterns.py में DATA है; patterns.json और यह फ़ाइल उससे उत्पन्न होती है।
109 पैटर्न / 64 प्रदाता / उत्पन्न 2026-07-02
pip install -e . # console script + importable package
regextokens scan PATH... # walk files/dirs, report findings
regextokens scan PATH -m verified # only offline-proven findings
regextokens scan PATH -f sarif # SARIF for GitHub code scanning
regextokens list # show the catalog
एग्ज़िट स्टेटस: 0 कोई निष्कर्ष नहीं, 1 अनुरोधित टियर पर या उससे ऊपर निष्कर्ष, 2 त्रुटि। मर्ज को गेट करने के लिए इसे CI में किसी diff या tree पर इंगित करें। आउटपुट में सीक्रेट्स डिफ़ॉल्ट रूप से रीडैक्ट किए जाते हैं।
समीक्षित निष्कर्षों (टेस्ट फ़िक्स्चर, डॉक्स उदाहरण) को स्वीकार करें ताकि CI केवल नए सीक्रेट्स पर विफल हो:
regextokens scan . --write-baseline .regextokens-baseline.json # snapshot current findings
regextokens scan . --baseline .regextokens-baseline.json # subtract them
बेसलाइन फ़िंगरप्रिंट्स (sha256 of pattern id + hashed secret body) संग्रहीत करता है, स्वयं सीक्रेट्स को कभी नहीं, इसलिए इसे कमिट करना सुरक्षित है। मिलान लाइन-स्वतंत्र है — किसी स्वीकृत फ़ाइंडिंग के ऊपर संपादन करने से वह अन-सप्रेस नहीं होती — लेकिन भिन्न फ़ाइल में वही टोकन एक नया एक्सपोज़र है और इसकी रिपोर्ट की जाती है। एक हाथ से संपादित allow सेक्शन पॉलिसी रखता है: fnmatch पाथ ग्लॉब्स और पैटर्न आईडी। --write-baseline इसे संरक्षित और लागू करता है। यह रेपो अपनी स्वयं की बेसलाइन कमिट करता है जो build_patterns.py में सिंथेटिक सैंपल्स को कवर करती है; CI इसके विरुद्ध स्व-स्कैन करता है।
# .pre-commit-config.yaml
repos:
- repo: https://github.com/odomojuli/regextokens
rev: v0.2.0
hooks:
- id: regextokens
# .github/workflows/secrets.yml
jobs:
secrets:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: odomojuli/regextokens@main
with:
min-confidence: probable
# baseline: .regextokens-baseline.json
# optional: feed the SARIF to code scanning
# - uses: github/codeql-action/upload-sarif@v3
# if: always()
# with: {sarif_file: regextokens.sarif}
दोनों का डिफ़ॉल्ट -m probable है: low श्रेणी में सार्वजनिक पहचानकर्ता और प्लेसहोल्डर शामिल होते हैं जो किसी कमिट गेट को अनुपयोगी बना देंगे।
प्रत्येक निष्कर्ष को ऑफ़लाइन प्रमाण द्वारा स्कोर किया जाता है — केवल स्थानीय गणना, कोई नेटवर्क नहीं, जारीकर्ता को कोई कॉल नहीं। एक आकृति मिलान इस प्रश्न का उत्तर देता है कि "क्या यह किसी टोकन जैसा दिखता है?"; ये जाँचें इस प्रश्न का उत्तर देती हैं कि "क्या हम स्थानीय रूप से सिद्ध कर सकते हैं कि यह टोकन है या नहीं?" -m/--min-confidence से फ़िल्टर करें।
verified-offline — एक चेकसम या डिकोडर सिद्ध करता है कि संरचना प्रामाणिक है (GitHub/npm CRC32; वास्तविक निरस्त टोकन के विरुद्ध अनुभवजन्य रूप से सत्यापित)।probable — संरचना के साथ-साथ एक Shannon-एंट्रॉपी बॉडी जो वास्तविक सीक्रेट के अनुरूप है।low — केवल आकृति मिलान; यह प्लेसहोल्डर या सार्वजनिक पहचानकर्ता हो सकता है।rejected — ऑफ़लाइन प्रमाण कहता है कि यह सिद्ध रूप से वास्तविक टोकन नहीं है (जैसे CRC32 बेमेल); आपके पास पहुँचने से पहले हटा दिया जाता है।rejected स्तर ही विभेदक है: एक ghp_/npm_ स्ट्रिंग जिसका प्रीफ़िक्स और लंबाई वैध है लेकिन चेकसम ख़राब है, निश्चितता के साथ हटा दी जाती है, जिससे उच्चतम-मूल्य वाले प्रदाताओं के लिए सबसे बड़ी फ़ॉल्स-पॉज़िटिव श्रेणी समाप्त हो जाती है। ऑफ़लाइन प्रमाण कभी यह दावा नहीं करता कि कोई कुंजी लाइव है — उसके लिए अभी भी जारीकर्ता के API की आवश्यकता होती है।
pip install pytest
pytest # validate every pattern + engine
python build_patterns.py # regenerate patterns.json + README.md
कैटलॉग को सीधे उपभोग करें (कोई इंजन नहीं):
import json, re
pats = json.load(open("patterns.json"))["patterns"]
rx = {p["id"]: re.compile(p["regex"]) for p in pats}
rx["github-pat-classic"].search(text)
build_patterns.py — सत्य का स्रोत (DATA) + सत्यापनकर्ता; patterns.json और README.md को पुनर्निर्मित करता है।patterns.json — जनरेट किया गया कैटलॉग (मशीन-पठनीय)। कभी भी हाथ से संपादित न करें।regextokens/ — इंस्टॉल करने योग्य पैकेज: catalog (लोड), scanner (वॉक/मैच), verify (ऑफ़लाइन प्रमाण), baseline (स्वीकृत निष्कर्ष + अनुमति सूची), report (मानव/JSON/SARIF), cli। patterns.json की सिंक की गई प्रति बंडल करता है।.pre-commit-hooks.yaml / action.yml / .github/workflows/ — वितरण: pre-commit हुक, कंपोजिट GitHub Action, CI + टैग-ट्रिगर PyPI रिलीज़ (विश्वसनीय प्रकाशन)।tests/ — test_patterns.py (प्रत्येक पैटर्न: कंपाइल, मैच, RE2, ReDoS) और test_engine.py (स्कैनर, सत्यापन, रिपोर्ट, CLI, कैटलॉग सिंक)।sniffer-audit.md — अन्य सीक्रेट स्कैनरों का ऑडिट (सत्यापन, पुरानापन)।references.bib / references.md — सीक्रेट-डिटेक्शन साहित्य की ग्रंथसूची।re। कोई लुकबिहाइंड या बैकरेफरेंस नहीं।re.search (एम्बेडेड टेक्स्ट स्कैनिंग) के लिए लिखे गए हैं। सत्यापनकर्ता के रूप में उपयोग करने के लिए ^/$ से लपेटें।\b शब्द सीमाएँ अधिकांश टोकन को ब्रैकेट करती हैं। base64 ब्लॉब्स के अंदर स्कैन करते समय उन्हें हटा दें।prefix = अकेले विश्वसनीय; structure = निश्चित आकार; keyword = पास के कीवर्ड पर गेट; identifier = सार्वजनिक, गुप्त नहीं; encoding = प्रारूप जाँच, गुप्त नहीं।patterns.json में उदाहरण टोकन सिंथेटिक फिलर हैं, लाइव क्रेडेंशियल नहीं।sniffer-audit.md — प्रमुख स्कैनर पैटर्न कैसे बनाते और सत्यापित करते हैं, बेंचमार्क डेटा के साथ।references.bib / references.md — सीक्रेट-डिटेक्शन साहित्य की ग्रंथसूची।Base64 स्ट्रिंग [encoding]
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
प्रारूप सत्यापनकर्ता, कोई रहस्य नहीं। पैडिंग के साथ मानक Base64 वर्णमाला। एंकर किया गया।
src: https://datatracker.ietf.org/doc/html/rfc4648#section-4
JSON Web Token (JWT) [structure]
\bey[A-Za-z0-9_-]{10,}\.ey[A-Za-z0-9/_-]{10,}\.[A-Za-z0-9/_-]{10,}
तीन base64url खंड। हेडर ey से शुरू होता है (अर्थात् {")। निरीक्षण के लिए डिकोड करें; केवल हस्ताक्षर ही रहस्य नहीं है।
src: https://datatracker.ietf.org/doc/html/rfc7519
PEM निजी कुंजी ब्लॉक [prefix]
-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP |ENCRYPTED )?PRIVATE KEY-----
सबसे उच्च-मूल्य वाला एकल संकेतक। किसी भी PEM-एन्कोडेड निजी कुंजी की हेडर पंक्ति से मेल खाता है।
src: https://datatracker.ietf.org/doc/html/rfc7468
age X25519 गुप्त कुंजी [structure]
\bAGE-SECRET-KEY-1[QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L]{58}\b