Validation
Check type, length, format, range, allowed values, and business rules at the appropriate trust boundary.
Explain insecure behaviour at the code and design level, connect it to an observable risk, propose a safe remediation, and show how the corrected behaviour can be verified.
A useful code review does more than name SQL injection, XSS, or weak authentication. It explains where untrusted data enters, what security decision is missing, how the issue affects the application, and which defensive pattern addresses the root cause.
Start by identifying inputs: form fields, API parameters, headers, files, database values, message queues, environment variables, and third-party responses. Then follow how the value is parsed, validated, transformed, stored, and used.
Many vulnerabilities occur at a sensitive sink: a database query, HTML output, operating-system command, path operation, deserialization function, authorization decision, or security-sensitive configuration. A clear assignment explains the path from input to sink instead of simply pointing at a line of code.
Where the language or framework already provides a safe API, explain why using that abstraction reduces risk. Prepared statements, framework output encoding, allow-list validation, and well-tested authentication libraries are stronger than hand-built string filtering.
Check type, length, format, range, allowed values, and business rules at the appropriate trust boundary.
Enforce permission on the server for the requested object or action rather than trusting a hidden field or client role.
Use context-aware encoding and safe APIs rather than building executable queries, HTML, paths, or commands from raw input.
Security defects are not limited to user input. Look at password handling, session lifecycle, token verification, account recovery, secret storage, cryptographic key use, logging, and exception handling.
A report should explain both the weakness and the intended invariant. For example, “only the server should decide whether the current identity owns this record” is clearer than simply labelling a function “broken access control.”
When discussing cryptography, avoid designing custom algorithms. Prefer established libraries and describe the key-management and configuration choices that matter to the assignment.
Do not place credentials or keys in source code, screenshots, repositories, or client-side bundles.
Return useful but non-sensitive messages to users while recording enough context in protected logs for investigation.
Distinguish a vulnerable package version from an exploitable application path and document upgrade or mitigation choices.
SAST tools can highlight suspicious flows, but the report still needs human reasoning. Confirm whether the source is attacker-controlled, whether sanitization is appropriate for the sink, whether the vulnerable path is reachable, and whether framework behaviour changes the result.
After remediation, explain how the fix was tested. A secure change should preserve required functionality while preventing the unsafe behaviour. Unit tests, integration tests, code review, or a repeat scan can provide evidence depending on the brief.
For broader application design issues, see application security. For service interfaces and token-based access control, see API security.
For each issue record the location, insecure behaviour, evidence, security impact, relevant principle or category, recommended fix, and validation step. Keep code excerpts short enough to highlight the decision point.
Finish with systemic improvements such as secure coding standards, code review, dependency management, automated checks, secrets scanning, and developer education. These show how the organization can prevent a class of defect rather than only patch one line.
The report identifies the missing security property, not just the vulnerability name.
The remediation uses the language or framework correctly and avoids fragile custom filtering.
The submission explains how the corrected behaviour was checked after the change.
Yes. Common topics include injection, cross-site scripting, access control, authentication, insecure design, secrets, logging, dependency risk, and secure error handling.
Yes. Share the relevant code and rubric. Guidance can identify the security concern, explain the reasoning, and suggest a defensive pattern in the language or framework used by the course.
Yes. We can help separate true issues from weak signals, explain data flow and sink/source reasoning, and document how a fix should be validated.
Yes. Validation, authorization, token handling, output encoding, secrets, and logging often apply directly to API implementations.