Technology

XSS Attack Explained: Types, Examples & Prevention Guide (2026)

A
Avijit Ghosh
Updated
12 min read
Cross-Site Scripting (XSS) attack injecting malicious JavaScript into a vulnerable web application

XSS Attack Explained: Types, Examples & Prevention Guide (2026)

Cross-Site Scripting (XSS) remains one of the most common web application security vulnerabilities, allowing attackers to inject malicious JavaScript into trusted websites and compromise user sessions, steal sensitive data, or manipulate web pages. In this guide, you'll learn how XSS attacks work, the differences between Stored, Reflected, and DOM-based XSS, explore real-world attack scenarios, and discover practical techniques developers can use to prevent these vulnerabilities in modern web applications.

Takeaways
  • 1Cross-Site Scripting (XSS) is a web security vulnerability that allows attackers to inject malicious JavaScript into trusted websites.
  • 2The three primary types of XSS are Stored XSS, Reflected XSS, and DOM-based XSS, each exploiting applications in different ways.
  • 3Successful XSS attacks can lead to session hijacking, cookie theft, account takeover, phishing, website defacement, and unauthorized actions on behalf of users.
  • 4Developers can significantly reduce XSS risks by validating user input, encoding output, implementing Content Security Policy (CSP), sanitizing HTML, and using secure frameworks.
  • 5Understanding how XSS works is essential for developers, security professionals, and anyone building or maintaining modern web applications."

Introduction

Imagine logging into your favorite website, only for an attacker to silently steal your session or inject fake content without you noticing. This is exactly the kind of threat posed by Cross-Site Scripting (XSS), one of the most common and dangerous vulnerabilities in web applications. Despite modern frameworks and security tools, XSS continues to appear in thousands of websites every year because it often stems from simple mistakes in handling user input.

An XSS attack occurs when an application allows malicious JavaScript to be injected into web pages viewed by other users. Instead of running on the attacker's machine, the script executes inside the victim's browser, where it inherits the trust of the legitimate website. This enables attackers to steal session cookies, capture sensitive information, manipulate page content, redirect users to phishing websites, or even perform actions on behalf of authenticated users.

Cross-Site Scripting is more than just a technical vulnerability—it directly impacts user trust, business reputation, and application security. A single vulnerable input field, search parameter, or comment section can become an entry point for attackers if user-generated content is not properly validated and encoded. As web applications become increasingly interactive and rely heavily on client-side JavaScript, understanding XSS is no longer optional for developers and security professionals.

In this guide, you'll learn how XSS attacks work, explore the three main types of XSS, examine real-world examples, understand their potential impact, and discover practical techniques to prevent them in modern web applications. Whether you're a beginner learning web security or an experienced developer looking to strengthen your applications, this guide will provide the knowledge you need to identify and defend against Cross-Site Scripting vulnerabilities.

Step-by-Step Guide

Step 1: The Attacker Finds a Vulnerable Input Field

An attacker begins by identifying a part of a web application that accepts user input but doesn't properly validate or sanitize it. Common targets include search bars, comment sections, contact forms, profile fields, URL parameters, and feedback forms. If the application displays this input without escaping special characters, it may become vulnerable to Cross-Site Scripting (XSS).

Step 2: Malicious JavaScript is Injected

Instead of entering normal text, the attacker submits a malicious JavaScript payload. If the application stores or reflects this input without proper encoding, the script becomes part of the webpage. When another user visits the affected page, their browser treats the injected code as trusted and executes it.

<script>alert('XSS Attack')</script>

This simple payload demonstrates code execution. Real-world attackers typically use more sophisticated scripts to steal cookies, session tokens, or sensitive information.

Step 3: The Victim Opens the Web Page

An unsuspecting user visits the compromised page. Because the malicious script is delivered by the legitimate website, the victim's browser assumes it is safe and executes it automatically. The user usually has no indication that anything unusual has happened.

Step 4: The Browser Executes the Script

he injected JavaScript now runs with the same permissions as the legitimate website. Depending on the attacker's objective, it can read page content, manipulate the Document Object Model (DOM), capture user input, make unauthorized requests, or steal session cookies if they are accessible through JavaScript.

Step 5: Sensitive Information is Stolen or Actions are Performed

Once executed, the attacker can send stolen information to a remote server or perform actions on behalf of the authenticated user. This may include session hijacking, account takeover, credential theft, phishing attacks, or modifying the appearance and functionality of the website to deceive visitors.

Step 6: XSS Attack Flow

The attack lifecycle can be summarized as:

Attacker → Vulnerable Input → Malicious Script Stored/Reflected → Victim Visits Website → Browser Executes Script → Sensitive Data Stolen or Unauthorized Actions Performed


Understanding this flow is essential because every XSS vulnerability follows the same core principle: untrusted input is executed as trusted code inside the user's browser.

The Three Main Types of XSS Attacks

âś“
Stored XSS (Persistent XSS)

Stored XSS occurs when malicious JavaScript is permanently saved on the target application's server, such as in a database, comment section, user profile, forum post, or chat message. Whenever another user visits the affected page, the stored script is automatically delivered and executed by their browser. Since the payload is stored on the server, every visitor to the compromised page can become a victim. This makes Stored XSS one of the most dangerous forms of Cross-Site Scripting because it doesn't require the attacker to trick each victim individually. Example: An attacker posts a malicious script in a public blog comment. Every visitor reading that comment unknowingly executes the script in their browser.

âś“
Reflected XSS (Non-Persistent XSS)

Reflected XSS happens when malicious input is immediately reflected back in the server's response without proper validation or output encoding. Unlike Stored XSS, the payload is not saved on the server. Instead, the attacker typically sends the victim a specially crafted URL containing malicious JavaScript. When the victim clicks the link, the vulnerable application reflects the malicious code back into the webpage, causing the browser to execute it. Reflected XSS attacks are commonly used in phishing campaigns because they rely on convincing users to open a malicious link. Example: A vulnerable search page displays the search query directly on the page without escaping HTML, allowing attackers to inject executable JavaScript through the URL.

âś“

DOM-Based XSS occurs entirely within the user's browser. Instead of the server generating the vulnerable response, client-side JavaScript modifies the Document Object Model (DOM) using untrusted data from sources like the URL, hash fragments, cookies, or local storage. If the application's JavaScript inserts this data into the page without proper sanitization, malicious scripts can execute without ever reaching the server. This makes DOM-based XSS more difficult to detect because traditional server-side security mechanisms may not see the attack. Example: A web application reads the value after # in the URL and inserts it into the page using innerHTML. An attacker can manipulate the URL to inject malicious JavaScript that executes in the victim's browser.

Comparison Table

TypeStored XSSReflected XSSDOM-Based XSS
Payload Stored on Server✅❌❌
Requires Victim to Click Link❌✅Usually ✅
Executed in Browserâś…âś…âś…
Server Response Modified✅✅❌
Common TargetsComments, Forums, ProfilesSearch Pages, Error MessagesSingle Page Applications (SPAs)
SeverityHighMediumHigh

Real-world Case Study

Case Study Guide1M+ MySpace accounts infected in under 24 hours during the Samy Worm attack

Real-World XSS Attacks That Changed Web Security

When a Small Vulnerability Leads to Massive Consequences

Cross-Site Scripting (XSS) is often underestimated because many demonstrations simply display an alert box. In reality, XSS has been responsible for compromising millions of user accounts, spreading self-replicating worms, and exposing sensitive data on some of the world's largest online platforms. These incidents highlight why even a single unsanitized input field can become a serious security risk.

1. The Samy Worm (MySpace, 2005)

One of the most famous XSS attacks in history was the Samy Worm, created by security researcher Samy Kamkar. By exploiting a Stored XSS vulnerability in MySpace profiles, the worm automatically added Samy as a friend and copied itself to every visitor's profile. Within 24 hours, more than one million users were infected, forcing MySpace to temporarily shut down parts of its platform while engineers removed the malicious code.

2. eBay Cross-Site Scripting Vulnerabilities

Over the years, researchers discovered multiple XSS vulnerabilities on eBay that allowed attackers to inject malicious scripts into product listings. Victims viewing these listings could be redirected to convincing phishing pages designed to steal login credentials and payment information. These incidents demonstrated how XSS can directly impact customer trust and online transactions.

3. Twitter 'OnMouseOver' Worm (2010)

In 2010, a DOM-based XSS vulnerability on Twitter enabled attackers to create tweets that executed JavaScript when users simply moved their mouse over them. The malicious tweets spread rapidly across the platform before Twitter disabled the vulnerable functionality and patched the issue.

4. Government and Enterprise Portals

Security researchers regularly report Reflected and Stored XSS vulnerabilities in government websites, educational portals, healthcare platforms, and enterprise applications. Even when no large-scale breach occurs, these vulnerabilities can expose sensitive user information, enable session hijacking, or become an entry point for more sophisticated attacks.

These examples demonstrate that XSS is far more than a theoretical vulnerability. Whether targeting a global social media platform or a small business website, attackers exploit the same fundamental weakness—executing untrusted JavaScript in a victim's browser. This is why secure input validation, output encoding, and modern browser security mechanisms are essential for every web application.

Checklist

âś“
Validate and sanitize all user inputs before processing them on the server.
âś“
Encode output based on the rendering context (HTML, JavaScript, URL, or CSS) before displaying user-generated content.
âś“
Avoid inserting untrusted data directly into the DOM using functions like innerHTML, outerHTML, or document.write().
âś“
Use safer alternatives such as textContent or createElement() when updating page content dynamically.
âś“
Implement a strong Content Security Policy (CSP) to restrict where scripts can be loaded from.
âś“
Enable HttpOnly and Secure flags on authentication cookies to reduce the impact of cookie theft.
âś“
Use modern frontend frameworks like React, Angular, or Vue, which automatically escape most dynamic content.
âś“
Sanitize rich HTML content using trusted libraries such as DOMPurify before rendering it to users.
âś“
Keep third-party packages, JavaScript libraries, and frameworks updated to receive the latest security patches.
âś“
Perform regular security testing using SAST, DAST, penetration testing, and vulnerability scanners to identify XSS issues before deployment.

FAQs

Conclusion

Cross-Site Scripting (XSS) is more than just a common web vulnerability—it's a reminder of how small security oversights can lead to significant consequences. Whether it's stealing user sessions, manipulating website content, or enabling phishing attacks, XSS demonstrates why secure coding practices must be part of every stage of software development.

Fortunately, XSS vulnerabilities are preventable. By validating user input, encoding output correctly, implementing Content Security Policy (CSP), using secure frameworks, and performing regular security testing, developers can dramatically reduce the risk of exploitation. Security should never be treated as an afterthought; it should be built into every feature from the very beginning.

As web technologies continue to evolve, so do attack techniques. Staying informed about vulnerabilities like XSS helps developers build safer applications, protect user data, and create software that users can trust. Continuous learning, secure development practices, and regular testing remain the strongest defense against modern web threats.

Continue Your Cybersecurity Journey

Cybersecurity is a constantly evolving field, and understanding vulnerabilities is the first step toward building resilient applications. Explore our collection of developer-friendly guides covering OWASP Top 10 vulnerabilities, secure coding practices, penetration testing, authentication, API security, and modern web application defense strategies.