HTML5 Security Cheatsheet

September 9, 2026 ยท View on GitHub

This is the home of the H5SC or HTML5 Security Cheatsheet. Here you will find three things:

  • A collection of HTML5 related XSS attack vectors
  • A set of useful files for XSS testing
  • A set of formerly hidden features useful for XSS testing

Project status

The H5SC is an archive, kept online and readable on purpose. The 149 vectors were collected and verified between 2010 and 2016, with the last additions in 2022. They document how browsers behaved in that period, and that is the value of the collection: a large share of what sanitizers, filters and browsers do today exists because of what is catalogued here.

What this means in practice:

  • The browsers field of each vector describes the engines of its day. "latest" means "latest as of when the vector was verified", not "current". Internet Explorer, Presto-era Opera, E4X, XBL, behavior: and VML entries describe engines that no longer ship, but still turn up in mail clients, embedded webviews and legacy sanitizer code.
  • Vectors are not re-verified against current browsers and there are no plans to re-verify them. Entries are not removed either. A vector that stopped working is still a record of a parser behaviour that once existed and may exist again elsewhere.
  • New vectors are accepted when they are of the same kind as the collection: a single markup snippet that executes script in a named engine, with a reporter credit.

For a living, engine-verified list of XSS payloads see PortSwigger's Cross-Site Scripting cheat sheet. For the reasoning behind attack classes rather than individual payloads, see the DOMPurify wiki page Attack Classes & Bypass History. For markup that causes requests rather than script execution, see HTTPLeaks.

The XSS Vectors

The collection of XSS vectors can be found here: https://html5sec.org/

The data lives in this repository as plain JavaScript modules and can be used without the site:

  • items.js - the 149 vectors with name, payload, description, fix advice, browser matrix, tags and reporter, in seven languages (en, ja, ru, cs, de, tr, zh; not every entry has every translation).
  • payloads.js - the %js_alert%-style placeholders the vectors are written against, so the same vector can be rendered with an alert, a confirm, or your own probe.
  • categories.js - the category labels.
  • vectors.txt - all vectors in one text file for easy copy and paste.

lib/index.js exposes all three as a CommonJS module.

Useful Files

We published a list of files useful for XSS testing in various situations. They are served from https://html5sec.org/ and stored in the /attachments sub-folder of this repository:

Pull requests welcome.

Hidden Features

The H5SC has a few "hidden" features on https://html5sec.org/:

Contributing

If you have a vector that belongs here, open a pull request against items.js. Copy the shape of an existing entry, use the next free id, fill in at least the en strings, list the engines and versions you verified it in, and credit the reporter. Translations of existing entries are welcome too; the de strings in particular are mostly empty.

License

Mozilla Public License 2.0, see LICENSE.