{"id":2983,"date":"2024-08-28T15:28:39","date_gmt":"2024-08-28T14:28:39","guid":{"rendered":"https:\/\/contentlabstudy.com\/soft\/?p=2983"},"modified":"2026-09-24T21:16:36","modified_gmt":"2026-09-24T20:16:36","slug":"owasp-top-ten","status":"publish","type":"post","link":"https:\/\/contentlabstudy.com\/soft\/owasp-top-ten\/","title":{"rendered":"OWASP Top Ten"},"content":{"rendered":"<p>The <strong>OWASP Top 10:2025<\/strong> is the current awareness list of critical web application risks (2021 is superseded). It is not a full standard and not a 2024 list \u2014 there was no official \u201cTop 10 2024.\u201d Use it as a checklist of failure classes, then map each to how <em>your<\/em> app actually authenticates, queries, and ships.<\/p>\n<h2>The 2025 ten<\/h2>\n<ol>\n<li><strong>A01 Broken Access Control<\/strong> \u2014 missing or wrong authorization. IDOR, privilege climb, CORS gone wide. <strong>SSRF is folded into A01<\/strong> in 2025 (it was A10 in 2021). Fail closed; check <em>this<\/em> object, not just \u201cis logged in.\u201d CSRF (a forged browser call that rides an automatic cookie) is in this category in 2025 too. The object check is in <a href=\"\/soft\/rest-minimal-api-with-authentication\/\">API authentication<\/a>.<\/li>\n<li><strong>A02 Security Misconfiguration<\/strong> \u2014 moved up. Default creds, directory listing, verbose errors, cloud buckets public, missing security headers, debug left on.<\/li>\n<li><strong>A03 Software Supply Chain Failures<\/strong> \u2014 replaces 2021\u2019s vulnerable and outdated components, and widens it to the build and the distribution. Compromised dependencies, unsigned artifacts, \u201cwe pip installed yesterday.\u201d Pin, verify, and watch build identity \u2014 not only \u201cnpm audit once.\u201d<\/li>\n<li><strong>A04 Cryptographic Failures<\/strong> \u2014 weak or missing crypto, custom crypto, secrets in repos, HTTP for sensitive data, bad key handling.<\/li>\n<li><strong>A05 Injection<\/strong> \u2014 SQL, OS, LDAP, template. Parameterize. XSS sits here as injection into HTML\/JS as well.<\/li>\n<li><strong>A06 Insecure Design<\/strong> \u2014 no threat model: \u201cwe never thought an attacker would call this endpoint.\u201d Patterns and reviews, not a library you install.<\/li>\n<li><strong>A07 Authentication Failures<\/strong> \u2014 stuffing, session fixation, missing MFA where it matters, home-grown JWT.<\/li>\n<li><strong>A08 Software or Data Integrity Failures<\/strong> \u2014 unsigned updates, insecure CI, deserialization of untrusted data, CI that publishes with a stolen token.<\/li>\n<li><strong>A09 Security Logging and Alerting Failures<\/strong> \u2014 you cannot detect the breach; logs have no user id, or they have passwords. Alerting is in the name now: a log nobody pages on is a diary.<\/li>\n<li><strong>A10 Mishandling of Exceptional Conditions<\/strong> \u2014 new. Crashes, catch-all handlers that return 200, resource leaks, error paths that skip authz. The unhappy path is still a path. This category also covers a stack trace sent to the client, and a check that fails open. See <a href=\"\/soft\/defensive-programming\/\">defensive programming<\/a>.<\/li>\n<\/ol>\n<h2>How to use this as a refresher<\/h2>\n<p>For each item: \u201cwhere could this happen in our app, and what test or control would catch it?\u201d A01 and A05 still pay the most in typical CRUD apps. A03 is the one teams skip because it lives in the pipeline, not the controller. Prompt injection is not this list; OWASP tracks it on the LLM Top 10.<\/p>\n<h2>Example<\/h2>\n<p>The id is a parameter. The provider binds <code>$1<\/code>. The command text does not change shape when the id changes.<\/p>\n<pre><code>static void Bind(DbCommand cmd, string id)\n{\n    cmd.CommandText = \"SELECT id, total FROM orders WHERE id = $1\";\n    var parameter = cmd.CreateParameter();\n    parameter.Value = id;\n    cmd.Parameters.Add(parameter); \/\/ the provider binds $1 to this parameter\n}<\/code><\/pre>\n<h2>What breaks it<\/h2>\n<p>The id is concatenated into the command text. Use the parameter above.<\/p>\n<pre><code>static void Concatenate(DbCommand cmd, string id)\n{\n    cmd.CommandText = \"SELECT id, total FROM orders WHERE id = '\" + id + \"'\";\n}<\/code><\/pre>\n<h2>Pitfalls<\/h2>\n<ul>\n<li>Memorizing the 2021 order and calling it current.<\/li>\n<li>WAF as the only control (it is not access control).<\/li>\n<li>Logging tokens \u201cfor support.\u201d<\/li>\n<\/ul>\n<p>Official list: OWASP Top 10:2025. Related: <a href=\"\/soft\/defensive-programming\/\">defensive programming<\/a>, <a href=\"\/soft\/rest-minimal-api-with-authentication\/\">API authentication<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The OWASP Top 10:2025 is the current awareness list of critical web application risks (2021 is superseded). It is not [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2983","post","type-post","status-publish","format-standard","hentry","category-software-design"],"_links":{"self":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/comments?post=2983"}],"version-history":[{"count":4,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2983\/revisions"}],"predecessor-version":[{"id":3253,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2983\/revisions\/3253"}],"wp:attachment":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/media?parent=2983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/categories?post=2983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/tags?post=2983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}