<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Pierre Giusti</title><link>https://piergst.github.io/posts/</link><description>Recent content in Posts on Pierre Giusti</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 24 Apr 2026 11:11:59 +0200</lastBuildDate><atom:link href="https://piergst.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Diving into HTML parsing through a PortSwigger lab</title><link>https://piergst.github.io/posts/portswigger-lab-html-parsing-dive/</link><pubDate>Fri, 24 Apr 2026 11:11:59 +0200</pubDate><guid>https://piergst.github.io/posts/portswigger-lab-html-parsing-dive/</guid><description>A PortSwigger lab on dangling markup injection got me wondering what actually happens between the raw HTML a server sends and what a browser displays. This article traces that journey, from a /login that vanished from the DOM to the HTML tokenizer state machine, tree construction, and DOMPurify sanitization. Less of a write-up, more of an exploration of HTML parsing mechanics.</description></item></channel></rss>