Requirements
Identify users, trust boundaries, sensitive data, authentication needs and security-relevant failure cases before implementation.
Security works best when it is part of software design, implementation, verification and operation—not a final checkbox added after development is finished.
This is practical engineering guidance, not a certification, penetration test, formal compliance framework or guarantee that a system is secure.
Identify users, trust boundaries, sensitive data, authentication needs and security-relevant failure cases before implementation.
Keep components and privileges proportionate; define where secrets, data, sessions and external integrations are handled.
Validate inputs, protect secrets, use least privilege, handle errors carefully and avoid exposing internal details.
Track third-party packages, services and external APIs so updates and vulnerabilities do not become invisible operational debt.
Test authorization, abuse cases, failure paths and deployment configuration in addition to normal functional behavior.
Plan logging, backups, updates, credential rotation, incident response and ownership after the software is deployed.
Separate authentication from authorization and check access at the point where protected data or actions are reached.
Keep credentials out of source code and logs, reduce privilege, and make environment-specific configuration explicit.
Treat external input as untrusted, encode output for its destination and avoid leaking stack traces or sensitive internal state.
Record useful security events without collecting unnecessary personal data, and decide who reviews alerts or suspicious behavior.
Share the architecture, users, integrations and security-sensitive areas so the software and cybersecurity scope can be planned together.