

0 / 2 embers
0 / 3000 xp
click for more info
Complete a lesson to start your streak
click for more info
Still calibrating
click for more info
Not enough gems
Cost: 6 gems
1: Managing Secrets
incomplete
2: Injecting Secrets at Runtime
incomplete
3: Protecting Secrets
incomplete
4: Build Artifacts and Deployment Hygiene
incomplete
5: Limiting Build Context
incomplete
6: Source Code and Config Leaks
incomplete
7: Public File Leaks
incomplete
8: Server-Side Request Forgery
incomplete
9: Defending Against SSRF
incomplete
10: Open Redirects
incomplete
11: Risks of Dependencies
incomplete
12: Auditing Dependencies
incomplete
13: Dependency Maintenance
incomplete
Back
ctrl+,
Next
ctrl+.
This lesson's interactive features are locked, please to keep using them
A secret is any value that grants access, signs data, or proves identity. If an attacker steals one, they don't need to break in... they can just use the credential. Common secrets include:
Configuration isn't automatically secret. A port number, feature flag, or public service URL can live in configuration without needing protection. The real question is what the value lets someone do.
Imagine an app that commits its adminAPIAccess key directly in source code. You might think, "Well, the repo is private, so no one can see it," but now the key spreads through Git history, CI logs, backups, and developer machines. Deleting the line in a later commit doesn't erase those copies! The only safe option is to rotate the key.
If a real secret is ever committed to a repository, treat it as compromised. Revoke or rotate it first, then remove it from the code and investigate where else it spread.