Secure coding is the practice of writing software in a way that prevents security vulnerabilities from being introduced in the first place. The CISSP exam tests secure coding concepts at the level of a security manager: understanding the major vulnerability categories, knowing the defensive techniques that prevent them, and recognising where new risks (such as AI-assisted coding) are emerging. Domain 8 is one of the most rapidly evolving areas of the CISSP curriculum.

OWASP Top 10: The Most Critical Web Application Vulnerabilities

The OWASP (Open Web Application Security Project) Top 10 is a regularly updated list of the most critical security risks facing web applications. It is the most widely recognised reference for web application security and is tested on the CISSP exam as a framework for understanding application vulnerability categories.

Injection attacks occur when untrusted data is sent to an interpreter as part of a command or query. SQL injection is the most common form: an attacker submits input containing SQL syntax (for example, ' OR '1'='1) that is incorporated directly into a database query, causing the query to return unauthorised data or modify the database. Other injection types include OS command injection, LDAP injection, and XML/XPath injection. The primary defence is parameterised queries (prepared statements) for database interactions, which ensure that user input is always treated as data, never as SQL syntax.

Broken authentication occurs when authentication mechanisms are implemented incorrectly, allowing attackers to compromise passwords, keys, or session tokens, or to exploit other implementation flaws to assume other users' identities. Examples include weak password policies, predictable session IDs, missing account lockout, and insecure credential storage (storing passwords in plaintext or with weak hashing).

Insecure Direct Object References (IDOR), now categorised under Broken Access Control in the OWASP 2021 update, occur when an application exposes internal implementation objects (database record IDs, file paths) to users who can manipulate them to access unauthorised resources. For example, changing a URL parameter from account_id=12345 to account_id=12346 might expose another user's account data if the application does not verify authorisation for the requested object.