privacy:javascript
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| privacy:javascript [2026/09/03 22:34] – Re-review fix: the resolvable-model figure moved to 19.4% of 175 after the buckets were restricted to papers that used an LLM rather than compared against one. Authored by Claude karel.kubicek.claude | privacy:javascript [2026/10/08 20:49] (current) – Finish PII leakage collateral: back-links and provenance; Authored by Claude karel.kubicek.claude | ||
|---|---|---|---|
| Line 235: | Line 235: | ||
| | Esprima | 21 | 10.2% | | | Esprima | 21 | 10.2% | | ||
| | OpenWPM | 19 | 9.2% | | | OpenWPM | 19 | 9.2% | | ||
| + | | Project Foxhound (taint tracking)((**9, | ||
| | PageGraph | 8 | 3.9% | | | PageGraph | 8 | 3.9% | | ||
| - | | Project Foxhound (taint tracking) | 8 | 3.9% | | ||
| | VisibleV8 | 8 | 3.9% | | | VisibleV8 | 8 | 3.9% | | ||
| | js-beautify | 7 | 3.4% | | | js-beautify | 7 | 3.4% | | ||
| Line 246: | Line 246: | ||
| | Acorn, AdGraph, Emscripten, JSgraph, JSNice, Khaleesi, Rhino, SpiderMonkey, | | Acorn, AdGraph, Emscripten, JSgraph, JSNice, Khaleesi, Rhino, SpiderMonkey, | ||
| - | Two rows moved enough to matter. **Esprima has overtaken OpenWPM** as the most-named tool, and **Project Foxhound went from 2 papers to 8 and PageGraph from 4 to 8** — the taint-tracking and page-graph instruments the //Methods// table above calls current are the ones the 2025–2026 papers actually picked up. That is the rare case where the corpus confirms a currency judgement instead of only dating it. | + | Two rows moved enough to matter. **Esprima has overtaken OpenWPM** as the most-named tool, and **Project Foxhound went from 2 papers to 9 and PageGraph from 4 to 8** — the taint-tracking and page-graph instruments the //Methods// table above calls current are the ones the 2025–2026 papers actually picked up. That is the rare case where the corpus confirms a currency judgement instead of only dating it. |
| - | **120 of 206 papers (58.3%) name no JavaScript-analysis tool at all** — they wrote their own parser, regexes or instrumentation and did not name it. That is the field' | + | **119 of 206 papers (57.8%) name no JavaScript-analysis tool at all** — they wrote their own parser, regexes or instrumentation and did not name it. That is the field' |
| ==== Maintenance status, because half of these are frozen ==== | ==== Maintenance status, because half of these are frozen ==== | ||
| Line 467: | Line 467: | ||
| // The population itself, with the reasons recorded. | // The population itself, with the reasons recorded. | ||
| // --------------------------------------------------------------------------- | // --------------------------------------------------------------------------- | ||
| + | // `usedOrMentioned == " | ||
| + | // benchmarks its own detector against a prior tool normally RUNS that tool, and | ||
| + | // the extraction files that as `compared`, which drops it out of a " | ||
| + | // using this instrument" | ||
| + | // so it is NOT done in general: this map holds only the papers where a | ||
| + | // published audit has read the sentence and recorded the verdict, and it names | ||
| + | // the audit. Currently one entry, from the Foxhound role audit behind | ||
| + | // [[programming: | ||
| + | // `baseline` role means "ran it as a comparison point" | ||
| + | // | ||
| + | // It adds to `tools` ONLY — not to `strictTools`, | ||
| + | // not to the page's population rule. A hand entry must not be able to pull a | ||
| + | // paper into the 206; this paper is already in it on its detection and | ||
| + | // classification signals. | ||
| + | export const TOOL_ROLE_OVERRIDE = new Map([ | ||
| + | [ | ||
| + | ' | ||
| + | { | ||
| + | tool: ' | ||
| + | audit: ' | ||
| + | quote: | ||
| + | 'We considered the following state-of-the-art detectors as baselines: dynamic taint-tracking [24, 36, 45] using Foxhound [44, 45]', | ||
| + | what: 'ran Foxhound as one of six baseline detectors over 42,288 pages', | ||
| + | }, | ||
| + | ], | ||
| + | ]); | ||
| + | |||
| export function jsSignals(p) { | export function jsSignals(p) { | ||
| const reasons = []; | const reasons = []; | ||
| Line 479: | Line 506: | ||
| const strict = foldJsToolStrict(t.name); | const strict = foldJsToolStrict(t.name); | ||
| if (strict) strictTools.add(strict); | if (strict) strictTools.add(strict); | ||
| + | } | ||
| + | const override = TOOL_ROLE_OVERRIDE.get(paperKey(p)); | ||
| + | if (override) { | ||
| + | // Fail loudly if the tuple the override is about has disappeared or has | ||
| + | // been re-extracted as used/ | ||
| + | // a hand entry that hides a change in the data. | ||
| + | const t = p.tools.find((x) => foldJsTool(x.name) === foldJsTool(override.tool)); | ||
| + | if (!t) | ||
| + | throw new Error( | ||
| + | `TOOL_ROLE_OVERRIDE for ${paperKey(p)} names ${override.tool}, | ||
| + | ); | ||
| + | if (t.usedOrMentioned === ' | ||
| + | throw new Error( | ||
| + | `TOOL_ROLE_OVERRIDE for ${paperKey(p)} is now redundant: ${override.tool} is extracted as " | ||
| + | ); | ||
| + | tools.add(foldJsTool(override.tool)); | ||
| } | } | ||
| if (strictTools.size) reasons.push(' | if (strictTools.size) reasons.push(' | ||
| Line 623: | Line 666: | ||
| * [[Privacy: | * [[Privacy: | ||
| + | * [[Privacy: | ||
| * [[Privacy: | * [[Privacy: | ||
| * [[Privacy: | * [[Privacy: | ||
| Line 629: | Line 673: | ||
| * [[Design: | * [[Design: | ||
| * [[Design: | * [[Design: | ||
| + | * [[Security: | ||
| * [[Practices: | * [[Practices: | ||
privacy/javascript.1788474845.txt.gz · Last modified: by karel.kubicek.claude
