Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
中文简介正在准备中。当前显示原文说明。
Use when the diff adds or moves a credential, logs or returns data, builds a URL or argv with a token, generates a random value, encrypts, signs, hashes, configures TLS or writes a credential file
中文简介正在准备中。当前显示原文说明。
安装前可以查看交给 AI 代理的指令内容。
A committed secret is leaked the moment the branch is pushed; deleting it in a later commit does not un-leak it. Crypto bugs are the opposite: invisible in behaviour, obvious in the parameters. Both are found by reading values, not flows.
Core principle: secrets live only in the secret store and in memory; crypto parameters are chosen by the library's safe default, never hand-assembled.
Recognisable shapes: AKIA…/ASIA… (AWS), ghp_/github_pat_/gho_ (GitHub), xoxb-/xoxp- (Slack), sk_live_/rk_live_ (Stripe), -----BEGIN … PRIVATE KEY-----, a GCP service-account JSON ("type": "service_account"), a database URL with a password, a JWT signing secret, a committed .env, kubeconfig, .npmrc with _authToken, ~/.docker/config.json.
Decide whether it is live before blocking:
changeme, xxx, <token>), documented test key (sk_test_), or a value the provider marks publishable (pk_live_, Firebase web config) → not a finding.sk_live_51H…).// ❌ token on argv — visible to every local user via ps and /proc
exec.Command("curl", "-H", "Authorization: Bearer "+token, url)
// ✅ the child reads it from its environment or stdin
cmd := exec.Command("curl", "-H", "@-", url); cmd.Stdin = strings.NewReader("Authorization: Bearer " + token)
?token= is not.Referer.NEXT_PUBLIC_*, VITE_*, REACT_APP_* variables and anything in a mobile binary are public. A server secret placed there is leaked by design.// ❌
const token = Math.random().toString(36).slice(2);
// ✅
const token = crypto.randomBytes(32).toString("base64url");
| Stack | ❌ for secrets | ✅ |
|---|---|---|
| Go | math/rand, math/rand/v2 | crypto/rand (rand.Text() in Go 1.24+) |
| Python | random | secrets.token_urlsafe, secrets.token_bytes |
| JVM | java.util.Random, kotlin.random.Random | SecureRandom |
| Node / browser | Math.random | crypto.randomBytes, crypto.randomUUID, crypto.getRandomValues |
| C# | System.Random | RandomNumberGenerator |
Weak randomness is a finding only when the value is a secret: session ids, reset tokens, API keys, nonces, invite codes. Shuffling a UI list is not.
AES/ECB/…, Java's bare Cipher.getInstance("AES") defaults to ECB) → patterns leak.hash(key + msg) → length extension; use HMAC).// ❌ ECB by default, static key
Cipher c = Cipher.getInstance("AES");
// ✅ AEAD with a fresh random 12-byte nonce per message
Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
c.init(Cipher.ENCRYPT_MODE, key, new GCMParameterSpec(128, nonce));
InsecureSkipVerify: true (Go), verify=False (requests/httpx), rejectUnauthorized: false or NODE_TLS_REJECT_UNAUTHORIZED=0 (Node), a trust-all X509TrustManager or HostnameVerifier returning true (JVM), ServerCertificateCustomValidationCallback = (…) => true (.NET), URLSession delegates that accept any challenge (iOS). A finding when it is in a production code path talking to real hosts; a local test harness is excluded.
// ❌ world-readable token file
os.WriteFile(path, token, 0o644)
// ✅
os.WriteFile(path, token, 0o600)
Python: open() respects the umask — use os.open(path, os.O_WRONLY | os.O_CREAT, 0o600). Only a finding on multi-user machines or shared volumes; say which.
Live production secret in code → CRITICAL. Secret in logs or error bodies reachable by other users → HIGH. TLS verification disabled on a production path → HIGH. Weak randomness for session or reset tokens → HIGH. ECB/static IV on data at rest → MEDIUM to HIGH by what it protects.
pk_live_, a Firebase web apiKey, a Sentry DSN or an analytics write key.os.getenv("SECRET", "dev") — excluded unless production demonstrably runs without the variable.verify=False inside a test or a local-only dev script..env, *.pem, *.p12, id_rsa, credentials.json, service-account*.json.Cipher.getInstance("AES"), AES.MODE_ECB, a constant iv = or nonce =.Math.random, math/rand, random. near the words token, secret, code, nonce, session..gitleaks.toml or secret-scanner allowlist widened in the same diff that adds a credential.OWASP Top 10:2025 A04 Cryptographic Failures, A07 Authentication Failures, A09 Security Logging and Alerting Failures · ASVS 5.0 V11 Cryptography, V13 Configuration, V14 Data Protection · CWE-209, 214, 276, 295, 327, 328, 329, 338, 532, 598, 798
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
中文简介正在准备中。当前显示原文说明。
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
中文简介正在准备中。当前显示原文说明。
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
中文简介正在准备中。当前显示原文说明。
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
中文简介正在准备中。当前显示原文说明。
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
中文简介正在准备中。当前显示原文说明。
Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here
中文简介正在准备中。当前显示原文说明。