
소스가 제공된 oauth / api 토큰용 정규식 패턴 목록
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 또는 트리를 지정하여 병합을 게이트하세요. 기본적으로 출력에서 시크릿은 마스킹됩니다.
검토된 발견 사항(테스트 픽스처, 문서 예제)을 수용하여 CI가 새로운 시크릿에서만 실패하도록 합니다:
regextokens scan . --write-baseline .regextokens-baseline.json # snapshot current findings
regextokens scan . --baseline .regextokens-baseline.json # subtract them
베이스라인은 지문(패턴 id + 해시된 시크릿 본문의 sha256)을 저장하며, 시크릿 자체는 절대 저장하지 않으므로 커밋해도 안전합니다. 매칭은 줄에 독립적이므로 — 수용된 발견 항목 위를 편집해도 억제가 해제되지 않습니다 — 하지만 다른 파일에 있는 동일한 토큰은 새로운 노출이며 보고됩니다. 수동으로 편집한 allow 섹션은 정책을 담고 있습니다: fnmatch 경로 글롭과 패턴 id. --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
Bech32(HRP 'AGE-SECRET-KEY-' 사용); 32바이트 키는 '1' 구분자 뒤에 58자로 인코딩됩니다(대문자). 수신자(age1...)는 공개 정보이며 비밀이 아닙니다. 포스트 양자 변형은 HRP AGE-SECRET-KEY-PQ-를 사용합니다.
src: https://github.com/C2SP/C2SP/blob/main/age.md
인증 토큰 (DEPRECATED API) [structure]
\bamzn\.mws\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b
amzn.mws.. MWS는 SP-API(Login with Amazon 토큰, 접두사 Atza|/Atzr|)로 대체되어 폐기되었습니다. 원래 목록 항목은 형식이 잘못되어 있었습니다.
src: https://developer-docs.amazon.com/sp-api/docs/migrating-from-amazon-mws
액세스 키 ID [prefix]
\b(?:A3T[A-Z0-9]|AKIA|ASIA|ABIA|ACCA)[A-Z2-7]{16}\b
20자. AKIA = 장기 IAM 키. ASIA = 임시 STS/세션 키. 본문은 base32(A-Z, 2-7)입니다.
src: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html src: https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html
비밀 액세스 키 (키워드 게이트) [keyword]
(?i)aws[\w.\-= :'\"]{0,25}([A-Za-z0-9/+]{40})
40자 base64 본문은 고정된 접두사가 없고 엔트로피가 낮습니다. 'aws' 키워드로 게이트하지 않으면 거의 모든 40자 토큰과 일치합니다.
src: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html
API 토큰 (키워드 게이트) [keyword]
(?i)cloudflare[\w.\-= :'\"]{0,25}([A-Za-z0-9_-]{40})
40자 토큰, 고정 접두사 없음; 'cloudflare' 키워드로 게이트하거나 40자 문자열과 일치합니다.
src: https://developers.cloudflare.com/fundamentals/api/get-started/create-token/
전역 API 키 (레거시, 키워드 게이트) [keyword]
(?i)cloudflare[\w.\-= :'\"]{0,25}([a-f0-9]{37})
레거시 37-hex 전역 키; 키워드로 제한됨. 범위 지정 API 토큰을 권장합니다.
src: https://developers.cloudflare.com/fundamentals/api/get-started/keys/
Origin CA 키 [prefix]
\bv1\.0-[0-9a-f]{24}-[0-9a-f]{146}\b
고유한 v1.0- 접두사; 정규식으로 안정적으로 식별 가능.
src: https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/
개인 액세스 토큰 [prefix]
\bdop_v1_[0-9a-f]{64}\b
OAuth 토큰 dor_v1_ / 리프레시 dor_v1_은 동일한 형태를 공유합니다.
src: https://docs.digitalocean.com/reference/api/create-personal-access-token/