Software Securityhome
Fix a findingSearch
Guides

Guides and resources

Every guide, fix card, workflow, learning path, lab, project, tool and glossary term on the site. Filter by topic, type, stack or platform and standard.

600 items

Recipes 3

Weaknesses with fix cards 30

Show all 30 weaknesses with fix cards
AppSec · CWE-79 · Node.js · Python · Java · C# · Next.js · Django · Go · Rails · Laravel

Cross-site scripting (XSS)

Cross-site scripting happens when request or stored data is written into a page without encoding for the exact spot it lands in, so the browser runs it as markup or script instead of showing it as text.

AppSec · CWE-89 · Node.js · Python · Java · C# · Next.js · FastAPI · Django · Go · Rails · Laravel

SQL injection

SQL injection happens when request data is pasted into the text of a SQL statement, so a crafted value can end a string literal and change what the query does: return other customers' rows, drop a filter or read columns the API never returns.

AppSec · CWE-352 · Node.js · Python · Java · C# · Django · Rails · Laravel

Cross-site request forgery (CSRF)

Cross-site request forgery happens when a server accepts a state-changing request because it carries the user's session cookie.

AppSec · CWE-862 · CWE-639 · CWE-863 · Node.js · Python · Java · C# · Next.js · FastAPI · Django · Go · Rails · Laravel

Missing object-level authorization (IDOR and BOLA)

Missing object-level authorization (IDOR, called BOLA in the OWASP API list) happens when an API checks that a caller is signed in and then loads whatever invoice, order or file the request names, so changing an ID in the URL, the query string or a bulk export returns someone else's data.

AppSec · CWE-22 · CWE-23 · CWE-36 · CWE-59 · Node.js · Python · Java · C# · Next.js · FastAPI · Django · Go · Rails · Laravel

Path traversal

Path traversal happens when a file name or path from a request is joined to a base directory and opened without checking where the result lands.

AppSec · CWE-78 · CWE-88 · Node.js · Python · Java · C# · Next.js · Go

OS command and argument injection

Command injection happens when request data is pasted into a command line that a shell then parses, so a crafted value can start a second command (OS command injection, CWE-78) or add an unintended option to the one you meant to run (argument injection, CWE-88).

AppSec · Design and code review

Abuse case library: tests and controls by feature

Recurring abuse cases for sign-up and login, password reset, MFA enrolment, invites, file upload, payments and coupons, webhooks, search, export, admin and AI chat or agents: the attacker goal, preconditions, a concrete test and the control, each linked to CWE and CAPEC.

AppSec · Design and code review

Threat pattern library for threat modeling

Thirty-two recurring threat patterns grouped by identity, authorization, parsers, concurrency, integrations, data exposure, supply chain, availability and AI agents, each with where it shows up on a data-flow diagram, mitigations, a verification step and STRIDE, CWE and CAPEC links, plus a YAML catalog and a script that lists patterns per diagram element.

AppSec · Design and code review

Secure design patterns: a catalogue for insecure-design (A06)

A catalogue of reusable secure-design patterns, grouped by concern, each with when to use it, a short example and the failure it prevents: choke-point authorization, capability tokens, parse-don't-validate, safe-by-default APIs, tenant scoping, fail-closed, idempotency, and more.

Identity & crypto · Encryption, keys and secrets

Choose cryptographic algorithms and parameters by job

A sourced quick reference for October 2026: which algorithm and parameters to use for encryption, hashing, passwords, MACs, signatures, key agreement, key derivation, randomness and TLS, the matching APIs in Node.js, Python, Java, Go and .NET, and where post-quantum migration stands.

Identity & crypto · Historical failures

ECB mode: why it leaks patterns and what to use instead

Derive exactly what ECB reveals and why a longer key cannot fix it, find where ECB enters real code, and replace it with an authenticated mode.

Identity & crypto · Historical failures

Padding oracle attacks

Use a byte-level CBC example to see how a tiny validity signal becomes plaintext information, then design verification that checks more than the error message.

AppSec · Secure coding

Case study: Spring4Shell (CVE-2022-22965)

How Spring's data binding let request parameters reach the class loader on JDK 9 and later in 2022, why the denylist workaround leaked, and what it teaches about framework-level mass assignment.

AppSec · Access control

Case study: First American's EaglePro document exposure (2019)

How sequential IDs in unauthenticated links exposed First American's title documents in 2019, after its own penetration test found the flaw and a clerical error let it go unfixed.

AppSec · Mobile, desktop, embedded and smart contracts

Case study: CrowdStrike Channel File 291 (July 2024)

How a CrowdStrike content update crashed Windows hosts in July 2024: a field-count mismatch hidden by wildcard tests, a missing bounds check, and no staged rollout.

AppSec · Vulnerability response

Case study: Log4Shell (CVE-2021-44228)

How a JNDI lookup in Apache Log4j became internet-wide remote code execution, why transitive and shaded dependencies made it so hard to patch, which mitigations held, and what it teaches about dependency inventory and SBOMs.

AppSec · Vulnerability response

Case study: MOVEit Transfer mass exploitation (CVE-2023-34362)

How one unauthenticated SQL injection in an internet-facing file transfer product let the Cl0p group steal data from thousands of organizations in days in 2023, how defenders found the web shell, and the vendor and customer controls that would have limited it.

AppSec · Vulnerability response

Case study: Citrix Bleed (CVE-2023-4966)

How a NetScaler memory over-read leaked session cookies that bypassed passwords and MFA in 2023, why patching did not end hijacked sessions, and how the pattern returned in 2025.

Workflows 6

AppSec · Foundation · 20–30 min · Runs in your browser

CSRF lab: Protect an account change from a forged request

An account settings handler trusts the session cookie even when another site causes the request. Repair the request policy and preserve legitimate settings updates.

AppSec · Practitioner · 25–40 min · Runs in your browser

Path traversal lab: Keep archive entries inside their extraction directory

An import job writes archive entry names directly beneath its work directory. An entry containing ../ can escape. Repair the entry-name policy before any file is created.

AppSec · Practitioner · 25–40 min · Runs in your browser

Race condition lab: Repair a balance check that races

Two simultaneous purchases both see the same balance and spend more credit than the account owns. Replace the read-then-write sequence with the supplied atomic debit.

AppSec · Foundation · 20–30 min · Runs in your browser

IDOR lab: Repair an invoice authorization bug

Bob can retrieve Alice’s invoice by changing the URL. You own the endpoint’s permission check. Reproduce the leak, patch the function below, and prove that Alice can still read her invoice.

AppSec · Advanced · 30–45 min · Runs in your browser

Webhook signature and replay lab: Repair a webhook handler that pays twice

Your handler rejects some genuine deliveries and records replayed payments twice. Fix the function below, then test valid, changed, replayed, and concurrent deliveries.

AppSec · Advanced · 30–45 min · Runs in your browser

SSRF lab: Guard an outbound fetch against SSRF

A webhook sender fetches whatever URL the user gives it, and follows redirects. An attacker can point it at the cloud metadata service or an internal admin page, directly or through a redirect. Repair the guard so it resolves each host and refuses private addresses, in literals, encodings and redirects alike.

Glossary terms 271

Show all 271 glossary terms

Download the guide catalog

Every guide with the platforms it applies to and its practice, as data: JSON or CSV. The coverage map shows which security outcomes the guides, labs and projects cover, and the gaps.

Find your next answer

Type to search. Search runs in your browser.

Searches run in your browser, but the host can infer them from the index files they load. The address shows your search so you can bookmark or share it.