Skip to content
Back to skills

Browser Security And Privacy

ASecurity

Use when reasoning about browser security or privacy behaviour: the same-origin policy, the mitigation alphabet (CORS, CSP, COOP/COEP, CORB/ORB, SameSite, Trusted Types), XSS still, never trusting the renderer, memory safety (Rust, MiraclePtr), Spectre and the transient-execution problem, the third-party cookie saga and what browsers actually do now (tracking protection, storage partitioning, the fate of Privacy Sandbox), and fingerprinting — randomize or uniformize.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 19, 2026
ai-agentstypescriptrustgoc++apisecurityperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add the-vibey-project/vibey --skill browser-security-and-privacy --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Browser Security And Privacy?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Browser Security And Privacy
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/the-vibey-project-browser-security-and-privacy/badge)](https://www.skillsdirectory.com/skills/the-vibey-project-browser-security-and-privacy)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: browser-security-and-privacy
description: "Use when reasoning about browser security or privacy behaviour: the same-origin policy, the mitigation alphabet (CORS, CSP, COOP/COEP, CORB/ORB, SameSite, Trusted Types), XSS still, never trusting the renderer, memory safety (Rust, MiraclePtr), Spectre and the transient-execution problem, the third-party cookie saga and what browsers actually do now (tracking protection, storage partitioning, the fate of Privacy Sandbox), and fingerprinting — randomize or uniformize."
---

# Browser Development: The Security Model and Privacy and Anti-Tracking

> **Part 3 of 5** of the *Web Browser Development* reference (plugin `web-browser-development`), covering §8–§9. Sibling skills: `browser-engine-architecture-and-networking` (§0–§3), `browser-rendering-pipeline` (§4–§7), `browser-extensions-platform-and-standards` (§10–§14), `browser-development-reference` (§15–§20). Section numbers are shared across the set; a reference written as §N → `skill` points into that sibling skill.
>
> **Currency:** Verified August 2026. See §17 → `browser-development-reference` for the currency snapshot and what goes stale first.

> **How to read this.** Reference, not tutorial. Sections are independent. Three markers:
> - **[DURABLE]** — architecture, algorithms, or a constraint every engine has
>   independently arrived at. Does not expire.
> - **[ENGINE]** — specific to Blink/Chromium, Gecko, WebKit, or Servo/Ladybird. Verify
>   against that project's source or docs.
> - **[CONTESTED]** — the vendors genuinely disagree, often because their business models
>   differ. Both cases given, including the commercial motive where it's load-bearing.
>
> **⚠️ GOTCHA** boxes mark the mistakes that produce security holes, jank, or
> compatibility breakage that can never be undone.
>
> **The two framings that organize everything below:**
> 1. **A browser is a hostile-input execution environment that must never say no.** It
>    runs untrusted code from anyone, on documents that are frequently malformed, and it
>    is not permitted to refuse or crash. Every architectural decision — the multi-process
>    model, the error-tolerant parser, the sandbox — descends from that.
> 2. **The web's compatibility constraint is stronger than any other platform's.** You
>    cannot break existing sites. Not the well-written ones, not the abandoned ones. This
>    is why the platform accretes and rarely subtracts, and why "just fix it properly"
>    is almost never available.

---

## §8. The Security Model

### 8.1 Same-origin policy

**[DURABLE] The foundational rule: an origin is the (scheme, host, port) triple, and code
from one origin cannot read data from another.** Everything else in web security is an
exception to, or a reinforcement of, this.

The historically-permitted cross-origin operations are the source of most web
vulnerabilities: you may **embed** cross-origin (images, scripts, iframes, styles) and you
may **send** cross-origin requests (forms) — you just can't *read* the results. CSRF exists
because sending is allowed with ambient credentials; XSSI and side-channel leaks exist
because embedding is allowed.

### 8.2 The mitigation alphabet

| Mechanism | Does what |
|---|---|
| **CORS** | Server opt-in to cross-origin *reads*. Simple vs. preflighted requests; `Access-Control-Allow-*` |
| **CSP** | Author-declared allow-list of sources and behaviours. **Nonce/hash-based CSP with `strict-dynamic`** is the modern form; host allow-lists are widely bypassable |
| **Trusted Types** | Prevents DOM XSS structurally by requiring typed objects rather than strings at injection sinks. **Reached Baseline in February 2026** |
| **SameSite cookies** | CSRF defence; `Lax` by default in most engines |
| **`__Host-`/`__Secure-` prefixes** | Cookie integrity guarantees |
| **HSTS**, **CT**, **CAA** | Transport and PKI integrity |
| **Subresource Integrity** | Hash-pinned third-party scripts |
| **COOP / COEP / CORP / CORB-ORB** | Cross-origin isolation and read blocking (§8.6) |
| **Permissions Policy** | Delegating or denying powerful features per-frame |
| **Sandbox attribute / `sandbox` CSP** | Capability reduction for embedded content |
| **Secure contexts** | Powerful APIs restricted to HTTPS |

### 8.3 XSS, still

**[DURABLE] XSS remains the dominant web vulnerability class, and the browser's role is
to make it structurally impossible rather than to filter it.** The history is
instructive: engines shipped XSS *auditors* (Chrome's XSS Auditor, IE's XSS Filter), and
**all of them were removed** — they were bypassable, they introduced their own
vulnerabilities, and they caused false positives that broke sites. The lesson generalizes:
**a filter that must guess intent on a Turing-complete input is not a security boundary.**
Trusted Types and CSP are the structural replacements.

### 8.4 Never trust the renderer

**[DURABLE] The single most important implementation rule in browser security.** A
compromised renderer will lie about its origin, its URL, its permissions, and the contents
of any structure it hands you. Every privileged operation must be re-derived and
re-validated in the browser process from state the browser process owns.

**Chromium is now moving this enforcement into Rust**: the security team has been
**migrating `ChildProcessSecurityPolicy` to Rust** with a live Canary experiment, both for
memory safety and to strengthen the security-relevant invariants that Site Isolation
depends on — and has an initial **Rust Mojo client** enabling services to be implemented
fully in Rust.

### 8.5 Memory safety

**[VERSIONED — the most active area of browser security engineering.]** Roughly 70% of
serious browser vulnerabilities have historically been memory-safety bugs. The 2026 state
of the art, using Chrome as the documented example:
- **MiraclePtr / BackupRefPtr** — reference-counted raw pointers that neutralize
  use-after-free by keeping the allocation quarantined. Already credited with a major UAF
  reduction; **being expanded to Skia, ANGLE, Dawn, C++ iterators, and `std::` containers**.
- **MiracleObject** — being deployed on the **GPU main thread**, targeting up to **90%** of
  UAFs there, explicitly trading local runtime performance for temporal safety.
- **PartitionAlloc** — a hardened allocator; now enabled in Skia.
- **"Spanification"** — a systematic effort to eliminate out-of-bounds bugs by replacing
  raw pointer+length pairs with bounds-checked spans.
- **UBSan `-fsanitize=return` enabled by default in release builds**, with plans to expand.
- **Rust** — a centralized Rust SDK, new modular components written in Rust, and the
  `ChildProcessSecurityPolicy` migration above. The stated architectural payoff is
  significant: *writing new components in Rust lets complex features run inside
  high-privilege processes without the performance penalty of sandboxing* — i.e. **memory
  safety buys back architectural freedom that process isolation was spending.**
- Google has also stated it is **exploring implementing the browser's top-level UI in
  HTML/CSS/TypeScript** to reduce dependence on C++ frameworks.
- **AI-assisted vulnerability finding is now real**: Google built an agent harness in early
  2026 that found a sandbox escape — a compromised renderer tricking the browser into
  reading local files — that **had survived in the codebase for more than 13 years**.

**Engine comparison [ENGINE]:** Gecko relies on Rust for newer components (Stylo,
WebRender) but older C++ doesn't benefit from a BackupRefPtr equivalent, and mozjemalloc
is less hardened than PartitionAlloc. WebKit leans on OS integration — **pointer
authentication on ARM64**, strict code signing on iOS — and mostly uses system allocators.

### 8.6 Spectre and the transient-execution problem

**[DURABLE, and the reason the architecture looks like it does.]** Spectre showed that
**any** high-resolution timer plus speculative execution lets attacker JS read arbitrary
memory *in its own process*. There is no software fix for the CPU behaviour. So the
browsers' response was architectural: **if the secret isn't in the process, it can't be
read.** That is Site Isolation's origin story.

The supporting mitigations: reduced timer resolution and jitter, disabling
`SharedArrayBuffer` unless **cross-origin isolated** (COOP+COEP), **CORB/ORB** to stop
sensitive cross-origin responses from ever entering a renderer, and per-site process locks.

---

## §9. Privacy and Anti-Tracking

### 9.1 The third-party cookie saga — what actually happened

**[VERSIONED, and the folklore is badly out of date. This is worth getting exactly right.]**

Timeline:
- **January 2020** — Google announces intent to phase out third-party cookies in Chrome
  "within two years," alongside the **Privacy Sandbox** initiative. Deadlines slip from
  2022 → 2023 → 2024 → 2025.
- **22 July 2024** — Google announces it will **not** phase out third-party cookies,
  proposing a user-choice prompt instead. UK **CMA** competition concerns and **ICO**
  disappointment are both part of the record; the CMA had been formally engaged since 2022.
- **22 April 2025** — Google confirms it is **maintaining the current approach** and will
  **not roll out a standalone opt-out prompt**. Default behaviour — third-party cookies
  allowed — unchanged.
- **17 October 2025** — Google **retires most Privacy Sandbox APIs**, citing low adoption:
  Topics, Protected Audience, Attribution Reporting, Private Aggregation, IP Protection,
  Related Website Sets and others. Deprecation lands in **Chrome 144 (January 2026)** with
  full removal targeted for **Chrome 150 (July 2026)**. Google's stated continuing focus is
  privacy-preserving measurement plus **FedCM** and **CHIPS**.

**[DURABLE] The lesson for an engine implementer is not about advertising.** It's that
**a browser vendor whose revenue depends on advertising faces a structural conflict when
changing tracking defaults**, and that regulators now treat browser defaults as competition
policy. Note also the asymmetry that remains: **Safari, Firefox, and Brave still block
third-party cookies by default**, so roughly 17–20% of global traffic is "cookieless"
regardless of Chrome — the fragmentation didn't go away, it just stopped being Chrome-led.

### 9.2 What browsers actually do now

- **Third-party cookie blocking** (Safari ITP since 2020, Firefox ETP, Brave) vs.
  Chrome's user-choice model.
- **State partitioning / "total cookie protection"** — partitioning *all* storage
  (cookies, localStorage, IndexedDB, cache, service workers) by top-level site, so a
  third party gets a separate jar per embedding site. **This is the most important
  anti-tracking mechanism actually deployed**, because it defeats cross-site state without
  breaking same-site embedding. **CHIPS** (`Partitioned` cookies) is the opt-in
  standardized form.
- **Cache partitioning** — closing the shared-cache timing side channel.
- **Referrer trimming**, **`Referrer-Policy`** defaults.
- **Fingerprinting defences** — the hard problem (§9.3).
- **Bounce-tracking mitigation**, link decoration stripping, **Global Privacy Control**.

### 9.3 Fingerprinting

**[CONTESTED, and genuinely unresolved.]** Canvas, WebGL, fonts, audio, screen metrics,
timing, hardware concurrency, and the sheer combination of exposed APIs form an identifier
without any storage at all.

Two philosophies:
- **Randomization** (Brave): add per-session, per-site noise so the fingerprint is unstable.
- **Uniformity** (Tor Browser): make every user look identical, at real functionality cost.
- Chrome's position historically leaned on "privacy budget"-style ideas that have not
  broadly shipped.

**The honest assessment: nobody has solved this.** Every new capability API adds entropy,
which is why capability APIs (§11 → `browser-extensions-platform-and-standards`) are permanently in tension with privacy, and why "just
ship the feature" is never the whole answer.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…