<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:webfeeds="http://webfeeds.org/rss/1.0">
  <channel>
    <title>Vojtech Ruzicka&#39;s Programming Blog</title>
    <link>https://www.vojtechruzicka.com/</link>
    <atom:link href="https://www.vojtechruzicka.com/feed.xml" rel="self" type="application/rss+xml" />
    <description>Blog about Full-stack Software Development. Clean code, Design patterns, Java, Spring, Javascript, Angular, React and more.</description>
    <language>en</language>
    <generator>Eleventy</generator>
    <lastBuildDate>Wed, 15 Jul 2026 00:00:00 GMT</lastBuildDate>
    <image>
      <url>https://www.vojtechruzicka.com/favicon.png</url>
      <title>Vojtech Ruzicka&#39;s Programming Blog</title>
      <link>https://www.vojtechruzicka.com/</link>
    </image>
    <webfeeds:icon>https://www.vojtechruzicka.com/apple-touch-icon.png</webfeeds:icon>
    <webfeeds:accentColor>f59e0b</webfeeds:accentColor>

        <item>
          <title>OWASP Top 10 2025</title>
          <link>https://www.vojtechruzicka.com/owasp-top-10-2025/</link>
          <guid isPermaLink="true">https://www.vojtechruzicka.com/owasp-top-10-2025/</guid>
          <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
          <dc:creator>Vojtech Ruzicka</dc:creator>
          <category>Security</category>

          <description><![CDATA[OWASP released the 2025 edition of the Top 10 Web Application Security Risks. What are the changes since 2021, and is your application vulnerable?]]></description>
          <content:encoded><![CDATA[<p>At the end of 2025, OWASP released a new edition of its Top 10 Web Application Security Risks. It has been four years since
the previous edition, and a lot has changed. There are some notable changes in the order of the items as well as new,
merged or renamed categories. We'll cover what OWASP is and how the list is created, walk through the 2025 top ten
security risks, and then compare what actually changed since 2021 - and what it means for your applications.</p>
<h2 id="what-is-owasp%3F" tabindex="-1"><a class="header-anchor" href="#what-is-owasp%3F" aria-hidden="true"></a> What is OWASP?</h2>
<p><a href="https://owasp.org/">OWASP</a> is an acronym for <strong>O</strong>pen <strong>W</strong>eb <strong>A</strong>pplication <strong>S</strong>ecurity <strong>P</strong>roject.
It is an open-source non-profit organization, which focuses on improving software security.
OWASP aims to raise awareness of security issues and provides free tools and resources to mitigate them.</p>
<p>It covers a broad range of tools, resources, and activities. They <a href="https://owasp.org/events/">organize various events</a>
including their own AppSec conference. OWASP consists of numerous projects with different focus
including <a href="https://owasp.org/www-project-application-security-verification-standard/">Application Security Verification Standard</a>,
<a href="https://genai.owasp.org/">GenAI Security Project</a>,
<a href="https://owasp.org/www-project-web-security-testing-guide/">Web Security Testing Guide</a>,
<a href="https://owasp.org/www-project-cheat-sheets/">various cheat sheets,</a> and <a href="https://owasp.org/projects/">others</a>.</p>
<h2 id="owasp-top-ten" tabindex="-1"><a class="header-anchor" href="#owasp-top-ten" aria-hidden="true"></a> OWASP Top Ten</h2>
<p>Even though OWASP consists of many projects, one of them is particularly
popular - <a href="https://owasp.org/www-project-top-ten/">OWASP Top Ten Web Application Security Risks</a>, usually referred
to as OWASP Top 10 for short.</p>
<p>It is an ordered list of top ten security risks, which is released periodically every couple of years since 2003.
The most recent one was released at the end of 2025, with 2021 and 2017 before that. The document is very brief
and barely goes into any detail.</p>
<p>You could argue that reducing security risks to just 10 items on a couple of pages is very reductive
and that web app security is a much broader issue. But the point of the list is not to be an exhaustive guide
on security risks, but rather to increase awareness of the broad public audience.
With just a short list it is easy to keep track of what is happening in the security area,
how it evolves, and what to keep an eye on. Then you can dive deeper into individual items with other OWASP resources.</p>
<h2 id="methodology" tabindex="-1"><a class="header-anchor" href="#methodology" aria-hidden="true"></a> Methodology</h2>
<h3 id="data-sources" tabindex="-1"><a class="header-anchor" href="#data-sources" aria-hidden="true"></a> Data sources</h3>
<p>The methodology of determining the top ten security risks has matured significantly over the years and is now
very transparent. It is calculated based on vast amounts of data gathered from various sources such as security
tooling vendors, vulnerability databases, bug bounties, and more.</p>
<p>Vulnerability data from applications is, however, a backward-looking metric and is only able to cover well documented
vulnerabilities which are already properly supported by security analysis tooling. It does not reflect
the latest trends, emerging threats, or how the situation will develop in the future. Some vulnerabilities are also
at a higher level, such as architecture, or are hard to cover by automated analysis.</p>
<p>To address both historical and future trends, the methodology chooses 8 out of 10 risks based only on the data
and the remaining two items are based on a community survey of security experts.</p>
<h3 id="risk-categorization" tabindex="-1"><a class="header-anchor" href="#risk-categorization" aria-hidden="true"></a> Risk categorization</h3>
<p>Historically, the top ten used to contain some very specific weaknesses such as Cross-Site Scripting (XSS)
or Cross-Site Request Forgery (CSRF). Over the years, the categories became much broader, such as Broken Access Control
or Insecure Design.</p>
<p>But the source data consists of specific reported weaknesses, such as SQL Injection.
These are known as <a href="https://cwe.mitre.org/index.html">Common Weakness Enumeration (CWE)</a> and are well-documented and categorized.
An example of such a weakness is <a href="https://cwe.mitre.org/data/definitions/614.html">CWE-614: Sensitive Cookie in HTTPS Session Without 'Secure' Attribute</a>.</p>
<p>All the reported CWEs are then categorized by OWASP into groups such as Injection or Authentication Failures - these
are the items later included in the top ten.</p>
<h3 id="risk-score-calculation" tabindex="-1"><a class="header-anchor" href="#risk-score-calculation" aria-hidden="true"></a> Risk score calculation</h3>
<p>Now when all the reported weaknesses are sorted into risk groups, the order needs to be determined.
That is based on the <a href="https://owasp.org/Top10/2025/0x02_2025-What_are_Application_Security_Risks/">Risk Score</a> formula.
There are multiple factors affecting the final score.</p>
<p>Simply put, the main factors are:</p>
<ol>
<li>How prevalent is the weakness</li>
<li>How severe is the technical impact</li>
<li>How easy is it to exploit</li>
</ol>
<p>The prevalence is the major factor with exploitability and impact being secondary.</p>
<p>Prevalence is based on the data gathered by OWASP, but how do you quantify technical impact and exploitability?</p>
<p>A CWE is a definition of a weakness, such as SQL Injection, but the impact and exploitability can differ in each
application. This is where CVE (Common Vulnerabilities and Exposures) comes into play - a specific instance of a CWE
in a particular product.</p>
<blockquote>
<p><a href="https://cwe.mitre.org/data/definitions/149.html">CWE-149 Improper Neutralization of Quoting Syntax</a></p>
<p>Generic definition of the weakness</p>
<p><a href="https://nvd.nist.gov/vuln/detail/cve-2025-1094">CVE-2025-1094</a></p>
<p>Specific SQL Injection vulnerability in specific PostgreSQL versions</p>
</blockquote>
<p>Those CVEs already have impact and exploitability scores defined and can be used for risk score calculation.</p>
<p>What is important to understand is that the impact is technical and not business. The same vulnerability can have the same
technical impact but drastically different business impact based on the company. The same SQL injection vulnerability can
lead to leaking unimportant read-only data in one company and exposing sensitive data or dropping the entire DB in
another.</p>
<p>An important part of secure design is therefore considering how technical vulnerabilities translate into business risks
and how to mitigate them.</p>
<p>The whole methodology can be summarized like this:</p>
<p><em>Diagram: How the OWASP Top 10 is compiled. Data from security tooling vendors, bug bounties and vulnerability databases is mapped to CWEs, grouped into risk categories and ranked by risk score. Eight categories come from the data, two from the community survey.</em></p>
<h2 id="top-ten-2025" tabindex="-1"><a class="header-anchor" href="#top-ten-2025" aria-hidden="true"></a> Top Ten 2025</h2>
<table>
<thead>
<tr>
<th>Item</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>1. Broken Access Control</td>
<td>Gain access to restricted information or actions by bypassing auth checks, impersonating users, missing access controls.</td>
</tr>
<tr>
<td>2. Security Misconfiguration</td>
<td>Incorrect setup using default settings, enabling unused features, verbose errors with sensitive information.</td>
</tr>
<tr>
<td>3. Software Supply Chain Failures <span class="badge badge--community">Community Survey</span></td>
<td>Outdated vulnerable components, untrusted dependencies, build pipeline with weak security.</td>
</tr>
<tr>
<td>4. Cryptographic Failures</td>
<td>Weak or missing cryptography for data in transit or at rest, leaked security keys.</td>
</tr>
<tr>
<td>5. Injection</td>
<td>User supplied data not sanitized when used as part of dynamic command or query - malicious code execution such as SQL injection, Cross-Site Scripting.</td>
</tr>
<tr>
<td>6. Insecure Design</td>
<td>Architecture and design flaws, unexpected states in business logic, lack of secure development lifecycle and threat modelling.</td>
</tr>
<tr>
<td>7. Authentication Failures</td>
<td>Vulnerability to automated and brute force attacks, weak passwords, lacking multi-factor auth, vulnerable account recovery, incorrect session and token invalidation.</td>
</tr>
<tr>
<td>8. Software or Data Integrity Failures</td>
<td>Lack of validation of code and data coming from external sources can lead to malicious code execution or unexpected states. Software auto update, insecure deserialization, unexpected source change.</td>
</tr>
<tr>
<td>9. Security Logging and Alerting Failures <span class="badge badge--community">Community Survey</span></td>
<td>Insufficient logging and monitoring results in attacks being detected late or never. Log tampering, sensitive data leakage through logs and alerts.</td>
</tr>
<tr>
<td>10. Mishandling of Exceptional Conditions</td>
<td>Not reacting to unexpected conditions, detecting them or preventing them. This can lead to many other vulnerabilities including crashing the system or complete takeover.</td>
</tr>
</tbody>
</table>
<h3 id="2021-vs-2025-comparison" tabindex="-1"><a class="header-anchor" href="#2021-vs-2025-comparison" aria-hidden="true"></a> 2021 vs 2025 comparison</h3>
<p>Looking at the current ten items tells you only part of the story. What's interesting is to compare how
the list changed since the last one to see how the risks are developing and where security is heading.</p>
<table>
<thead>
<tr>
<th>2021</th>
<th>2025</th>
</tr>
</thead>
<tbody>
<tr>
<td>1. Broken Access Control</td>
<td>1. Broken Access Control</td>
</tr>
<tr>
<td>2. Cryptographic Failures</td>
<td>2. Security Misconfiguration <span class="badge badge--up">↑ 3</span></td>
</tr>
<tr>
<td>3. Injection</td>
<td>3. Software Supply Chain Failures <span class="badge badge--up">↑ 3</span> <span class="badge badge--extended">Extended</span> <span class="badge badge--community">Community Survey</span></td>
</tr>
<tr>
<td>4. Insecure Design</td>
<td>4. Cryptographic Failures <span class="badge badge--down">↓ 2</span></td>
</tr>
<tr>
<td>5. Security Misconfiguration</td>
<td>5. Injection <span class="badge badge--down">↓ 2</span></td>
</tr>
<tr>
<td>6. Vulnerable and Outdated Components</td>
<td>6. Insecure Design <span class="badge badge--down">↓ 2</span></td>
</tr>
<tr>
<td>7. Identification and Authentication Failures</td>
<td>7. Authentication Failures <span class="badge badge--renamed">Renamed</span></td>
</tr>
<tr>
<td>8. Software and Data Integrity Failures</td>
<td>8. Software or Data Integrity Failures <span class="badge badge--renamed">Renamed</span></td>
</tr>
<tr>
<td>9. Security Logging and Monitoring Failures</td>
<td>9. Security Logging and Alerting Failures <span class="badge badge--renamed">Renamed</span> <span class="badge badge--community">Community Survey</span></td>
</tr>
<tr>
<td>10. Server Side Request Forgery (SSRF) <span class="badge badge--merged">Merged</span></td>
<td>10. Mishandling of Exceptional Conditions <span class="badge badge--new">New</span></td>
</tr>
</tbody>
</table>
<p>If you'd like to compare with an even older version, you can check my article on OWASP Top 10 2017.</p>
<p><em>Related article: </em><a href="https://www.vojtechruzicka.com/owasp-top-ten-2017/">OWASP Top Ten 2017</a></p>
<h2 id="what-changed-since-2021" tabindex="-1"><a class="header-anchor" href="#what-changed-since-2021" aria-hidden="true"></a> What changed since 2021</h2>
<h3 id="broken-access-control-still-on-top" tabindex="-1"><a class="header-anchor" href="#broken-access-control-still-on-top" aria-hidden="true"></a> Broken Access Control still on top</h3>
<p>This item ranked as #1 both in 2021 and 2025, while being #5 in 2017.
Despite being in top positions since the very beginning in 2003 and being a well-documented and known risk,
it still stays on top. Every application from OWASP's dataset had some sort of access-control-related
vulnerability. Every single one! This area is complex and contains a high number of weaknesses,
which results in high prevalence. The potential impact of access-related attacks can be very severe, including loss
of data, exposure of sensitive information or even complete system takeover.</p>
<p>Access-control-related issues result in user action outside of their permissions and boundaries.
This includes weaknesses such as Cross-Site Request Forgery,
<a href="https://www.vojtechruzicka.com/protect-http-cookies/">misconfiguration of sensitive cookies</a>, Path Traversal, Insecure Storage of
Sensitive Data and missing or incorrect authorization.</p>
<aside class="callout callout--success">
  <p class="callout-title">How to prevent it</p>
  <div class="callout-body">
    <ul>
<li>Least privilege possible. Deny by default.</li>
<li>Short-lived sessions and tokens. Properly invalidate after logout.</li>
<li>Rate limits to minimize automated attacks.</li>
<li>Prefer established authentication and authorization tooling. Prefer declarative over imperative.</li>
<li>Make access control part of your testing workflow.</li>
</ul>
  </div>
</aside>
<h3 id="merged%3A-server-side-request-forgery" tabindex="-1"><a class="header-anchor" href="#merged%3A-server-side-request-forgery" aria-hidden="true"></a> Merged: Server Side Request Forgery</h3>
<p>In the previous version, Server Side Request Forgery (SSRF) was added as a new item in the 10th position.
In 2025, it was merged into Broken Access Control as it is fundamentally an Access Control issue. This better reflects
item granularity and unifies categorization. The reason why it was separate in 2021 was that it was ranked
as #1 in the community survey, and explicitly having it as an item helps to raise awareness.
But even back then it was considered for later addition to a broader category. Even though it is no longer a
standalone item, it is still good to keep SSRF in mind when considering access control.</p>
<p>SSRF vulnerabilities allow attackers to trick a server-side application into making a request to an unintended location.
This allows attackers to reach resources inaccessible from the outside. It can lead to accessing internal-only services,
leaking sensitive data, or mapping internal networks for further exploitation.</p>
<aside class="callout callout--success">
  <p class="callout-title">How to prevent it</p>
  <div class="callout-body">
    <ul>
<li>Avoid depending on client-provided data to determine the target location of network calls.</li>
<li>Deny access by default, whitelisting only exceptions instead of using blacklists.</li>
<li>Do not directly send responses received from external calls to the client.</li>
<li>Internal network segmentation.</li>
<li>Monitoring even internal traffic and alerting on unusual behavior.</li>
</ul>
  </div>
</aside>
<h3 id="rising-threats" tabindex="-1"><a class="header-anchor" href="#rising-threats" aria-hidden="true"></a> Rising threats</h3>
<p>Only two items moved up, both by 3 positions. These are definitely worth watching, and looking at the reasons
can give us a better understanding of how the security situation will evolve.</p>
<h4 id="security-misconfiguration" tabindex="-1"><a class="header-anchor" href="#security-misconfiguration" aria-hidden="true"></a> Security Misconfiguration</h4>
<p>Security Misconfiguration now sits in
second place, after Broken Access Control. This area includes all the configuration settings which are incorrect
from the security perspective, creating vulnerabilities. It is very broad, and with systems getting more and more
complex and more configurable, it is easy to miss an item or two in your configuration. In fact, as with
access control issues, every single tested application has some sort of security misconfiguration.</p>
<p>Common examples of config issues include relying on an external unsafe configuration source,
<a href="https://www.vojtechruzicka.com/preventing-clickjacking/">missing security headers</a>, a permissive cross-origin policy, or enabling unnecessary
features that widen the potential attack surface.</p>
<aside class="callout callout--success">
  <p class="callout-title">How to prevent it</p>
  <div class="callout-body">
    <ul>
<li>Make sure you review your configurations regularly.</li>
<li>Keep configuration centralised.</li>
<li>Enable only necessary features.</li>
<li>Automate as much as possible.</li>
<li>Regularly scan for misplaced secrets.</li>
<li>Keep as much configuration as possible the same across environments.</li>
</ul>
  </div>
</aside>
<h4 id="software-supply-chain-failures" tabindex="-1"><a class="header-anchor" href="#software-supply-chain-failures" aria-hidden="true"></a> Software Supply Chain Failures</h4>
<p>The second item rising from the sixth to the third place is <strong>Software Supply Chain Failures</strong>.
It was originally introduced almost at the end of the list in 2013 under the name
<strong>Using Components with Known Vulnerabilities</strong>, later expanded and renamed to <strong>Vulnerable and Outdated Components</strong>.
The area has grown in importance over the years and this year was broadened to contain all the supply-chain-related
issues, not only vulnerable dependencies. It is getting more and more common that a reliable vendor gets
compromised and a malicious package that your application depends on is released. It does not even have to be
a direct dependency - you can get such a package as part of your transitive dependencies
(dependencies of your dependencies). Your application can get compromised at any point in its
lifecycle - from a malicious IDE plugin or an outdated dependency to the CI/CD process or a code/artifact repository.
This area is getting more and more attention - it is one of two items added based on a community survey
(the other being <strong>Security Logging and Alerting Failures</strong>) - reaching number 1 in the result list, with half of
respondents ranking it #1.</p>
<p><em>Diagram: Evolution of the Software Supply Chain Failures category. The category started in 2013 as Using Components with Known Vulnerabilities in position 9, kept the same name in 2017, was renamed to Vulnerable and Outdated Components in position 6 in 2021, and became Software Supply Chain Failures in position 3 in 2025.</em></p>
<p>These days there are powerful tools to detect vulnerable dependencies, such as
<a href="https://www.vojtechruzicka.com/snyk-detecting-dependencies-with-known-vulnerabilities/">Snyk</a>,
<a href="https://www.vojtechruzicka.com/detecting-dependencies-known-vulnerabilities/">OWASP dependency check</a> or even
<a href="https://www.vojtechruzicka.com/idea-snyk-plugin/">your IDE</a>. But be careful as detecting the vulnerability is one thing and upgrading another.
New versions may break compatibility or require a newer runtime - or the component may be long abandoned
and unmaintained.</p>
<aside class="callout callout--success">
  <p class="callout-title">How to prevent it</p>
  <div class="callout-body">
    <ul>
<li>Maintain a list of your dependencies (such as Software Bill of Materials).</li>
<li>Actively scan for vulnerable and outdated component versions, including transitive dependencies, unmaintained and
end-of-life components.</li>
<li>Be mindful about upgrading and do it for a reason - getting a new version needlessly may result
in new vulnerabilities or a compromised package.</li>
<li>Obtain only components from trusted sources, signed if possible
to avoid tampering.</li>
<li>Remove anything unused to reduce attack surface.</li>
</ul>
  </div>
</aside>
<h3 id="traditional-risks-moving-down" tabindex="-1"><a class="header-anchor" href="#traditional-risks-moving-down" aria-hidden="true"></a> Traditional risks moving down</h3>
<p>Three items that were in the top 4 in 2021 have all moved down by two positions:</p>
<ul>
<li><strong>Cryptographic Failures</strong>: #2 → #4</li>
<li><strong>Injection</strong> #3 → #5</li>
<li><strong>Insecure Design</strong> #4 → #6</li>
</ul>
<p>As you can see, all of them moved by 2 places, while preserving their relative positions. This suggests that their
importance has not dropped significantly, but they were rather pushed by two major categories moving up, which we
discussed above. With systems getting more and more config-driven, <strong>Security Misconfiguration</strong> risk has risen
significantly. <strong>Software Supply Chain Failures</strong> had major support in the community survey and since the category
was significantly broadened, it now contains more weaknesses.</p>
<p>Still, over time items in the OWASP top ten tend to gradually go down as awareness increases and tooling gets
better at identifying these issues. For example, injection used to be #1 for a long time, but eventually ended up
in fifth place. It is still very much relevant, though - as are cryptographic failures and insecure design - and should
not be taken lightly.</p>
<h3 id="new%3A-mishandling-of-exceptional-conditions" tabindex="-1"><a class="header-anchor" href="#new%3A-mishandling-of-exceptional-conditions" aria-hidden="true"></a> New: Mishandling of Exceptional Conditions</h3>
<p>This is the only entirely new category in 2025, sitting in last place. Many issues covered by this category were previously
considered as part of bad code quality and design. But given the importance of this area,
it deserved its own new category.</p>
<p>It covers errors and unexpected states. Applications often fail to predict and prevent these situations. If such
a situation happens, it is important to identify it and react properly. Exceptional states are not necessarily
only technical issues, but also logical flaws or bad design of domain logic and business processes.
This makes it very important to keep in mind these issues early in the design and development process as they are
much more difficult and expensive to fix later on.</p>
<p>These weaknesses are serious on their own and can lead to various security issues, such as denial of service, data
corruption, or even complete system compromise. For example, a multi-step process can crash on invalid input, leaving
the system in an inconsistent state. Malformed input combined with improper error handling can take the service down.
However, such vulnerabilities are also often used as a bridge to more efficient and targeted attacks. For example,
sending detailed error information can expose important details about your system which is then used for other exploits.
Exposing which frameworks, libraries, and versions are used can lead to exploiting their known vulnerabilities.
Leaking database internals can lead to better targeted SQL injection.</p>
<aside class="callout callout--success">
  <p class="callout-title">How to prevent it</p>
  <div class="callout-body">
    <ul>
<li>Proper error handling, logging, and alerting. Do not expose sensitive information in error messages and logs.</li>
<li>Input validation and sanitization. Also prevents injection attacks.</li>
<li>Limit resource utilization. Rate limiting, throttling, resource quotas.</li>
<li>Centralised error handling.</li>
</ul>
  </div>
</aside>
<h3 id="renames-and-minor-adjustments" tabindex="-1"><a class="header-anchor" href="#renames-and-minor-adjustments" aria-hidden="true"></a> Renames and minor adjustments</h3>
<p>Three items were renamed to better reflect their scope and focus:</p>
<ul>
<li><strong>Identification and Authentication Failures</strong> → <strong>Authentication Failures</strong>.
The name better represents CWEs assigned to this category and is not misleading.</li>
<li><strong>Software and Data Integrity Failures</strong> → <strong>Software or Data Integrity Failures</strong>.
This reflects that those are two independent categories and weakness in just one of them is enough to
cause a security issue, not both at once.</li>
<li><strong>Security Logging and Monitoring Failures</strong> → <strong>Security Logging and Alerting Failures</strong>.
This change aims to emphasize that logging alone is not enough. It is crucial to have proper alerting in place so you
can quickly know about security incidents and react in time. Unnoticed incidents give an attacker an opportunity to
cause more damage and try different attack vectors.</li>
</ul>
<h2 id="key-takeaways" tabindex="-1"><a class="header-anchor" href="#key-takeaways" aria-hidden="true"></a> Key takeaways</h2>
<p>OWASP Top 10 is a great place to start if you want to become more familiar with web application security.
It is not an exhaustive guide, but rather a quick reference to the areas that are currently the most important to keep
in mind when thinking about application security.</p>
<p>Keeping track of how the list evolves from one version to the next can give you an idea of how the security landscape
is changing and what emerging threats to look out for. Traditional threats become better understood over time and are
pushed down by broader and more complex categories. It is no longer just about sanitizing your inputs, but about secure
design and architecture as a whole. It's not just about your code or your application anymore - there are threats
lurking in every phase of the development pipeline. With increasing reliance on external services, configuration,
cloud infrastructure, and a complex software supply chain, the attack surface extends far beyond your application.</p>
<p>The Top 10 is not a security checklist, and you should not worry about memorizing all the categories,
let alone the underlying CWEs. Many mitigations apply to multiple weaknesses, so it is more valuable to start
building a security mindset. When building or reviewing a feature, you can start by asking yourself:</p>
<ul>
<li>Do I trust my dependencies too much?</li>
<li>Did I validate and sanitize external input?</li>
<li>How do I react if something unexpected happens?</li>
<li>How will I know about and be notified of malicious activity?</li>
</ul>
<p>Building this mindset will help you harden your application far more than memorizing a list of CWEs. But ultimately,
remember that security is by no means a one-time activity. It should be a continuous process throughout the entire
application lifecycle.</p>
<h2 id="beyond-the-top-ten" tabindex="-1"><a class="header-anchor" href="#beyond-the-top-ten" aria-hidden="true"></a> Beyond the Top Ten</h2>
<p>Now that you're familiar with the top ten security risks of web applications, you'll be more vigilant and aware of
potential issues. However, as I mentioned, the top ten is an awareness document rather
than a detailed guide. It covers just the tip of the iceberg and very briefly. You should definitely not stop
your security education at the top ten. You can use the list to identify where to focus your efforts first and then
gradually expand with more detailed resources. The next step is to get to know these risks in more detail
and learn about others.</p>
<p>Another useful resource is <a href="https://cwe.mitre.org/top25/">MITRE CWE Top 25</a>, which instead of broad categories
focuses on ranking much more specific weaknesses - at the CWE level. That means classic weaknesses such as
Cross-Site Scripting, SQL Injection or out-of-bounds reads and writes.
It is good to keep in mind both lists - OWASP Top 10 for realizing broader risk areas
and MITRE CWE list for specific, lower-level weaknesses.</p>
<p>More OWASP Resources:</p>
<ul>
<li><a href="https://owasp.org/www-project-application-security-verification-standard/">OWASP Application Security Verification Standard</a>
: Detailed list of security requirements for designing, developing, and testing web applications.</li>
<li><a href="https://owasp.org/www-project-web-security-testing-guide/latest/">OWASP Web Security Testing Guide</a>:
Comprehensive guide on how to test security of web apps.</li>
<li><a href="https://cheatsheetseries.owasp.org/">OWASP Cheat Sheets</a>:
Collection of very condensed guides on various topics as a quick reference.</li>
<li><a href="https://owasp.org/www-project-api-security/">OWASP API Security</a>:
Top ten focused on API security.</li>
<li><a href="https://genai.owasp.org/">OWASP Gen AI Security Project</a>: Guidance and resources focused on generative AI security.</li>
</ul>
<hr><p><a href="https://www.vojtechruzicka.com/owasp-top-10-2025/#comments">Discuss this article</a> · <a href="https://www.vojtechruzicka.com/owasp-top-10-2025/">Read it on vojtechruzicka.com</a></p>]]></content:encoded>
        </item>
  </channel>
</rss>
