Cross Site Scripting is yesterday's news, isn't it?
Think your framework protects you from XSS? A single call to `innerHTML` can bypass its defenses. Learn how a layered security approach can truly protect your application.
#1about 2 minutes
Demonstrating a persistent cross-site scripting attack
A live demo shows how malicious JavaScript can be injected into an input field and stored in a database, executing on every page load.
#2about 3 minutes
Why built-in framework sanitizers are not enough
Framework sanitizers can be bypassed by using native DOM APIs directly, and the vast majority of application code comes from third-party NPM packages.
#3about 4 minutes
Introducing the Content Security Policy http header
The Content Security Policy (CSP) is an HTTP header that controls which resources can be loaded and executed by the browser using directives for scripts, styles, and API connections.
#4about 4 minutes
Implementing and refining a basic content security policy
A live demo shows how to add a CSP via a meta tag and then iteratively fix broken styles and API calls by adjusting the `style-src` and `connect-src` directives.
#5about 3 minutes
Safely executing inline scripts with hashes and nonces
CSP Level 2 provides hashes and nonces as secure alternatives to `unsafe-inline` for whitelisting specific inline scripts for execution.
#6about 7 minutes
Using CSP nonces with server-side rendering
Nonces must be unique and randomly generated on the server for each request to be secure, and the `strict-dynamic` directive allows trusted scripts to load other scripts.
#7about 3 minutes
Introducing trusted types to secure dangerous dom sinks
Trusted Types is a new CSP directive that locks down dangerous DOM APIs, requiring that any data passed to them must first be sanitized and wrapped in a special trusted object.
#8about 3 minutes
Implementing trusted types with the dompurify library
Instead of writing custom sanitization logic, you can use a library like DOMPurify with its `RETURN_TRUSTED_TYPE` option to easily create secure, trusted HTML objects.
#9about 1 minute
Browser support and final recommendations for trusted types
Trusted Types are currently supported by all Chromium-based browsers, making it a viable defense-in-depth strategy for a significant portion of web users.
Related jobs
Jobs that call for the skills explored in this talk.
Dev Digest 198: 30 years of JS, In-Browser AI, How Attackers Abuse GenAI Inside last week’s Dev Digest 198 .
🎂 30 years of JavaScript
⏰ How long is a JavaScript second
💻 Clean code in Angular
🤦♂️ AI makes different mistakes than humans
👨💻 In-browser and offline AI
🟠 Undocumented Hacker News features
🐋 DeepSeek censored...
Daniel Cranney, Chris Heilmann
Dev Digest 215: Agent Memory, JS2026, Googlebot Analysis & Canvas❤️HTMLInside last week’s Dev Digest 215 .
🗿 Make AI talk like a caveman
🧠 A guide to context engineering for LLMs
🤖 Simon Willison on agentic engineering
🔐 Axios supply chain attack post mortem
🛡️ Designing AI agents to resist prompt injection
🎨 HTML in c...
Daniel Cranney
The Overflow: 5 Security and Privacy Tools for DevelopersWe’re back again with another edition of the Overflow, where we share some of the best tools we’ve found from around the web that we just couldn’t cram into the already jam-packed editions of the Dev Digest.
So let’s take a look at five security and ...
Daniel Cranney
Why Developers are So Excited About PretextPretext is a new JavaScript and TypeScript library from Cheng Lou - previously a React core developer - that crossed 7,000 GitHub stars in three days to get the entire tech world talking recently.
The demos that spread were visually striking: dragon...
From learning to earning
Jobs that call for the skills explored in this talk.