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/08/06 22:48] – Name the unit and denominator in the opening warning box's own example. Authored by Claude. karel.kubicek.claude | privacy:javascript [2026/09/03 22:34] (current) – 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 | ||
|---|---|---|---|
| Line 57: | Line 57: | ||
| ===== What This Literature Actually Is ===== | ===== What This Literature Actually Is ===== | ||
| - | Everything in this section comes from a structured extraction over **4,322 full-text papers** from CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf and IEEE S&P, 2010–2024, one record per paper with a verbatim evidence quote per claim. The population here is **160 papers that analyse or classify JavaScript running in a browser** — how that population was built, and what it misses, is at [[# | + | Everything in this section comes from a structured extraction over **5,859 full-text papers** from CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf and IEEE S&P, 2010–2026, one record per paper with a verbatim evidence quote per claim. The 2025 and 2026 venue-years are provisional — CCS and IMC 2026 have not been held and two more 2026 venue-years are incompletely selected. The population here is **206 papers that analyse or classify JavaScript running in a browser** — how that population was built, and what it misses, is at [[# |
| ==== Neither obvious search handle finds it ==== | ==== Neither obvious search handle finds it ==== | ||
| Line 64: | Line 64: | ||
| ^ Handle ^ Papers ^ Of which measure the web ^ Share ^ | ^ Handle ^ Papers ^ Of which measure the web ^ Share ^ | ||
| - | | Used or produced a '' | + | | Used or produced a '' |
| - | | '' | + | | '' |
| - | And the program-analysis tools these venues actually use are not JavaScript tools: LLVM (66 papers), Soot (61), IDA Pro (36), FlowDroid (34), angr (28), Ghidra (24), Androguard | + | And the program-analysis tools these venues actually use are not JavaScript tools: LLVM (101 papers), Soot (81), IDA Pro (62), FlowDroid (48), angr (39), Z3 (38), Ghidra (38), CodeQL |
| - | ==== Where the 160 papers are ==== | + | ==== Where the 206 papers are ==== |
| ^ Venue ^ Corpus papers ^ JS-analysis papers ^ Share of venue ^ | ^ Venue ^ Corpus papers ^ JS-analysis papers ^ Share of venue ^ | ||
| - | | USENIX Security | 1,117 | 39 | 3.5% | | + | | USENIX Security | 1,410 | 44 | 3.1% | |
| - | | TheWebConf | 713 | 34 | 4.8% | | + | | TheWebConf | 843 | 41 | 4.9% | |
| - | | CCS | 889 | 29 | 3.3% | | + | | CCS | 990 | 33 | 3.3% | |
| - | | IMC | 559 | 20 | 3.6% | | + | | IMC | 638 | 24 | 3.8% | |
| - | | PETS | 355 | 18 | 5.1% | | + | | IEEE S& |
| - | | NDSS | 419 | 15 | 3.6% | | + | | NDSS | 701 | 21 | 3.0% | |
| - | | IEEE S& | + | | PETS | 510 | 21 | 4.1% | |
| ^ Period ^ Corpus papers ^ JS-analysis papers ^ Per 1,000 corpus papers ^ | ^ Period ^ Corpus papers ^ JS-analysis papers ^ Per 1,000 corpus papers ^ | ||
| - | | 2010–2013 | 468 | 11 | 23.5 | | + | | 2010–2013 | 511 | 14 | 27.4 | |
| - | | 2014–2017 | 711 | 32 | 45.0 | | + | | 2014–2017 | 769 | 34 | 44.2 | |
| - | | 2018–2021 | 1,403 | 58 | 41.3 | | + | | 2018–2021 | 1,439 | 61 | 42.4 | |
| - | | 2022–2024 | 1,740 | 59 | 33.9 | | + | | 2022–2024 | 1,955 | 68 | 34.8 | |
| + | | 2025–2026 // | ||
| - | The field grew sharply into the mid-2010s and has been flat-to-declining as a share of these venues since. That is not a decline in importance — it is the topic being absorbed into tracking, fingerprinting and supply-chain papers that no longer describe themselves as JavaScript analysis. | + | The field grew sharply into the mid-2010s and has been declining as a share of these venues since. That is not a decline in importance — it is the topic being absorbed into tracking, fingerprinting and supply-chain papers that no longer describe themselves as JavaScript analysis. |
| ==== What they are about ==== | ==== What they are about ==== | ||
| Line 92: | Line 93: | ||
| Ranked, not measured: '' | Ranked, not measured: '' | ||
| - | ^ Research family ^ Papers ^ Share of 160 ^ | + | ^ Research family ^ Papers ^ Share of 206 ^ |
| - | | Tracking- and advertising-script classification | 25 | 15.6% | | + | | Tracking- and advertising-script classification | 29 | 14.1% | |
| - | | Malicious-script and cloaking detection | 21 | 13.1% | | + | | Fingerprinting-script detection | 24 | 11.7% | |
| - | | Third-party libraries, inclusion and supply chain((The oldest strand of this family and still the most-cited entry point: Lauinger et al. {[lauinger2017_thou]} found **87.7% of Alexa top-75K sites and 46.5% of .com sites** using at least one of 72 catalogued JavaScript libraries, and **37.8% of Alexa sites running at least one version with a known vulnerability** (9.7% two or more).)) | 20 | 12.5% | | + | | Malicious-script and cloaking detection | 24 | 11.7% | |
| - | | Fingerprinting-script detection | 19 | 11.9% | | + | | Third-party libraries, inclusion and supply chain((The oldest strand of this family and still the most-cited entry point: Lauinger et al. {[lauinger2017_thou]} found **87.7% of Alexa top-75K sites and 46.5% of .com sites** using at least one of 72 catalogued JavaScript libraries, and **37.8% of Alexa sites running at least one version with a known vulnerability** (9.7% two or more).)) | 24 | 11.7% | |
| - | | Web-API usage measurement | 16 | 10.0% | | + | | Web-API usage measurement | 22 | 10.7% | |
| - | | Client-side vulnerabilities (XSS, CSP, taint flows) | 12 | 7.5% | | + | | Client-side vulnerabilities (XSS, CSP, taint flows) | 18 | 8.7% | |
| - | | Browser-extension scripts | 7 | 4.4% | | + | | Browser-extension scripts | 8 | 3.9% | |
| - | | Data leakage by scripts | 6 | 3.8% | | + | | Data leakage by scripts | 8 | 3.9% | |
| - | | Script change and identity over time | 6 | 3.8% | | + | | Script performance, |
| - | | Cryptojacking | 5 | 3.1% | | + | | Script change and identity over time | 7 | 3.4% | |
| - | | WebAssembly (non-mining) | 4 | 2.5% | | + | | Cryptojacking | 5 | 2.4% | |
| - | | Script performance, | + | | WebAssembly (non-mining) | 5 | 2.4% | |
| - | 45 detection tuples did not fold into any family and are printed by the report script rather than dropped. | + | 65 detection tuples did not fold into any family and are printed by the report script rather than dropped |
| - | The shape to notice: **the privacy reader' | + | The shape to notice: **the privacy reader' |
| ==== Anchor papers to read first ==== | ==== Anchor papers to read first ==== | ||
| Line 119: | Line 120: | ||
| <WRAP important> | <WRAP important> | ||
| - | This corpus | + | This corpus |
| </ | </ | ||
| Line 146: | Line 147: | ||
| ==== What the corpus cannot tell you, and what we found instead ==== | ==== What the corpus cannot tell you, and what we found instead ==== | ||
| - | **LLM-based classification of web scripts is, as of 2026-08-06, essentially | + | **LLM-based classification of web scripts is, as of 2026-09-03, still absent from the peer-reviewed literature |
| - | <wrap todo> | + | **Read that against the corpus-wide curve before concluding the field is not interested.** LLM classification went from 2 papers in 2023 to 71 in the partial 2026 (17.1% of that year), at all seven venues, so the zero above is specific to this target rather than a statement about the method. The per-target table on [[design: |
| + | |||
| + | **The nearest peer-reviewed work is one layer down, at the request.** TGNN {[xiong2026_tgnn]} (TheWebConf 2026) uses Qwen3 to label HTTP request/ | ||
| + | |||
| + | <WRAP todo> | ||
| ==== Two 2025 results that change how you design a crawl ==== | ==== Two 2025 results that change how you design a crawl ==== | ||
| Line 157: | Line 162: | ||
| ===== Ground Truth, Which Is This Field' | ===== Ground Truth, Which Is This Field' | ||
| - | Of the 160 papers, **153 record at least one classification task**. What they classify //with//: | + | Of the 206 papers, **198 record at least one classification task**. What they classify //with//: |
| + | |||
| + | ^ '' | ||
| + | | heuristic-rules | 108 | 54.5% | | ||
| + | | manual-labelling | 70 | 35.4% | | ||
| + | | third-party-service | 53 | 26.8% | | ||
| + | | blocklist | 52 | 26.3% | | ||
| + | | curated-database | 40 | 20.2% | | ||
| + | | dynamic-analysis | 33 | 16.7% | | ||
| + | | supervised-ml | 31 | 15.7% | | ||
| + | | regex-or-signature | 27 | 13.6% | | ||
| + | | static-analysis | 25 | 12.6% | | ||
| + | | graph-analysis | 13 | 6.6% | | ||
| + | | other | 11 | 5.6% | | ||
| + | | unsupervised-ml | 11 | 5.6% | | ||
| + | | **llm** | **2** | **1.0%** | | ||
| - | ^ '' | + | **The '' |
| - | | heuristic-rules | 80 | 52.3% | | + | |
| - | | manual-labelling | 54 | 35.3% | | + | |
| - | | third-party-service | 47 | 30.7% | | + | |
| - | | blocklist | 38 | 24.8% | | + | |
| - | | curated-database | 31 | 20.3% | | + | |
| - | | supervised-ml | 26 | 17.0% | | + | |
| - | | regex-or-signature | 24 | 15.7% | | + | |
| - | | dynamic-analysis | 21 | 13.7% | | + | |
| - | | static-analysis | 16 | 10.5% | | + | |
| - | | unsupervised-ml | 11 | 7.2% | | + | |
| - | | graph-analysis | 9 | 5.9% | | + | |
| - | | other | 9 | 5.9% | | + | |
| - | And what they treat as truth. These 153 papers produce **278 distinct free-text ground-truth strings**, folded here into families; | + | And what they treat as truth. These 198 papers produce **351 distinct free-text ground-truth strings**, folded here into families; |
| - | ^ Ground-truth family ^ Papers ^ Share of 153 ^ | + | ^ Ground-truth family ^ Papers ^ Share of 198 ^ |
| - | | **Authors' | + | | **Authors' |
| - | | Filter list or tracker database | 36 | 23.5% | | + | | Filter list or tracker database | 44 | 22.2% | |
| - | | Malware / phishing blacklist service | 11 | 7.2% | | + | | Malware / phishing blacklist service | 13 | 6.6% | |
| - | | Vulnerability database | 7 | 4.6% | | + | | Synthetic or seeded ground truth | 9 | 4.5% | |
| - | | Synthetic | + | | Vulnerability database | 9 | 4.5% | |
| - | | Prior published dataset or labels | 4 | 2.6% | | + | | Spec or documentation |
| - | | Spec or documentation | 3 | 2.0% | | + | | Prior published dataset or labels | 4 | 2.0% | |
| - | | Library signature catalogue | 1 | 0.7% | | + | | Library signature catalogue | 1 | 0.5% | |
| - | | Recruited or external annotators | 1 | 0.7% | | + | | Recruited or external annotators | 1 | 0.5% | |
| <WRAP important> | <WRAP important> | ||
| - | **The most common ground truth for "is this script a tracker" | + | **The most common ground truth for "is this script a tracker" |
| </ | </ | ||
| - | Validation, counted per paper rather than per tuple: **115 of 153 (75.2%) report some validation** for at least one classification, | + | Validation, counted per paper rather than per tuple: **146 of 198 (73.7%) report some validation** for at least one classification, |
| ==== If you use a filter list as ground truth ==== | ==== If you use a filter list as ground truth ==== | ||
| Line 222: | Line 230: | ||
| | Static AST / bytecode | what the code //could// do, on code you never executed | what it actually did, and anything behind '' | | Static AST / bytecode | what the code //could// do, on code you never executed | what it actually did, and anything behind '' | ||
| - | Which of these the 160 papers actually name: | + | Which of these the 206 papers actually name: |
| - | ^ Tool family ^ Papers ^ Share of 160 ^ | + | ^ Tool family ^ Papers ^ Share of 206 ^ |
| - | | OpenWPM | + | | Esprima |
| - | | Esprima | + | | OpenWPM |
| - | | VisibleV8 | 8 | 5.0% | | + | | PageGraph | 8 | 3.9% | |
| - | | js-beautify | 7 | 4.4% | | + | | Project Foxhound (taint tracking) | 8 | 3.9% | |
| - | | V8 (as an analysis substrate) | 5 | 3.1% | | + | | VisibleV8 | 8 | 3.9% | |
| - | | Closure Compiler | 4 | 2.5% | | + | | js-beautify | 7 | 3.4% | |
| - | | FP-Inspector | 4 | 2.5% | | + | | V8 (as an analysis substrate) | 7 | 3.4% | |
| - | | PageGraph | 4 | 2.5% | | + | | Closure Compiler | 5 | 2.4% | |
| - | | WABT | 3 | 1.9% | | + | | Babel, |
| - | | Babel, | + | | JStap | 3 | 1.5% | |
| - | | Acorn, AdGraph, Emscripten, Jalangi, JSgraph, JSNice, Khaleesi, Rhino, SpiderMonkey, | + | | jsdom | 2 | 1.0% | |
| + | | Acorn, AdGraph, Emscripten, JSgraph, JSNice, Khaleesi, Rhino, SpiderMonkey, | ||
| - | **91 of 160 papers (56.9%) name no JavaScript-analysis tool at all** — they wrote their own parser, regexes or instrumentation and did not name it. That is the field' | + | 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. |
| + | |||
| + | **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' | ||
| ==== Maintenance status, because half of these are frozen ==== | ==== Maintenance status, because half of these are frozen ==== | ||
| Line 270: | Line 281: | ||
| ===== Crawl Methodology, | ===== Crawl Methodology, | ||
| - | Of the 160 papers, | + | Of the 206 papers, |
| - | ^ '' | + | ^ '' |
| - | | Statefulness | 36 | 28.6% | 19.9% | | + | | Statefulness | 45 | 27.6% | 20.3% | |
| - | | Interaction depth | 112 | 88.9% | 78.6% | | + | | Interaction depth | 147 | 90.2% | 77.9% | |
| - | | Consent action | 65 | 51.6% | 32.6% | | + | | Consent action | 79 | 48.5% | 32.3% | |
| - | | Headless or headful | 28 | 22.2% | 13.4% | | + | | Headless or headful | 31 | 19.0% | 13.0% | |
| - | | Authentication | 104 | 82.5% | 71.5% | | + | | Authentication | 134 | 82.2% | 72.1% | |
| - | | Browser named | 101 | 80.2% | 47.6% | | + | | Browser named | 132 | 81.0% | 49.0% | |
| <WRAP important> | <WRAP important> | ||
| - | **22.2% state headless-or-headful, | + | **19.0% state headless-or-headful, |
| * Jueckstock et al. {[jueckstock2021_realistic]} found about **10% of script families show consistent browser-configuration bias**, and traced one concretely: Crazyegg' | * Jueckstock et al. {[jueckstock2021_realistic]} found about **10% of script families show consistent browser-configuration bias**, and traced one concretely: Crazyegg' | ||
| Line 291: | Line 302: | ||
| **The consent row deserves its own sentence.** On EU-facing sites a large part of the advertising and analytics stack is loaded by the consent management platform //after// a consent click, so a crawl that never interacts with the banner measures a different script population from one that accepts — and a third one from one that rejects. Half these papers do not say which they did. Decide deliberately, | **The consent row deserves its own sentence.** On EU-facing sites a large part of the advertising and analytics stack is loaded by the consent management platform //after// a consent click, so a crawl that never interacts with the banner measures a different script population from one that accepts — and a third one from one that rejects. Half these papers do not say which they did. Decide deliberately, | ||
| - | Artifact release is a bright spot: **46 of the 59 papers from 2022–2024 (78.0%) released an artifact link, against | + | Artifact release is a bright spot: **53 of the 68 papers from 2022–2024 (77.9%) released an artifact link, against |
| ===== What to Report ===== | ===== What to Report ===== | ||
| Line 303: | Line 314: | ||
| - **The crawl.** Browser and version, headless or headful, stateful or stateless, consent action, interaction depth, vantage point, and — because of the results above — whether you checked for divergent behaviour under a stealth or headful configuration. | - **The crawl.** Browser and version, headless or headful, stateful or stateless, consent action, interaction depth, vantage point, and — because of the results above — whether you checked for divergent behaviour under a stealth or headful configuration. | ||
| - **Handling of what you could not analyse.** Inline scripts, '' | - **Handling of what you could not analyse.** Inline scripts, '' | ||
| - | - **Reproducibility.** The script corpus if licensing allows, the feature extractor, and the trained model. This subfield is good at this — 78% since 2022 — so a paper without it stands out. | + | - **Reproducibility.** The script corpus if licensing allows, the feature extractor, and the trained model. This subfield is good at this — 78% for 2022–2024 and higher since — so a paper without it stands out. |
| ===== Reproducing These Figures ===== | ===== Reproducing These Figures ===== | ||
| Line 315: | Line 326: | ||
| Three families are in the tool table but deliberately excluded from the // | Three families are in the tool table but deliberately excluded from the // | ||
| - | ^ Signal combination ^ Papers ^ Share of 160 ^ | + | ^ Signal combination ^ Papers ^ Share of 206 ^ |
| - | | classification only | 43 | 26.9% | | + | | classification only | 57 | 27.7% | |
| - | | detection only | 42 | 26.3% | | + | | detection only | 53 | 25.7% | |
| - | | detection + classification | 23 | 14.4% | | + | | detection + classification | 30 | 14.6% | |
| - | | tool only | 21 | 13.1% | | + | | tool only | 26 | 12.6% | |
| - | | tool + detection + classification | 12 | 7.5% | | + | | tool + detection + classification | 19 | 9.2% | |
| - | | tool + detection | 11 | 6.9% | | + | | tool + detection | 13 | 6.3% | |
| - | | tool + classification | 8 | 5.0% | | + | | tool + classification | 8 | 3.9% | |
| - | The whole rule, including every fold and the reason for each hand exclusion, is below. It needs only '' | + | The whole rule, including every fold and the reason for each hand exclusion, is below. It needs only '' |
| <file javascript js_fold.mjs> | <file javascript js_fold.mjs> | ||
| Line 332: | Line 343: | ||
| // JavaScript a page runs". Neither of the obvious schema handles answers it: | // JavaScript a page runs". Neither of the obvious schema handles answers it: | ||
| // | // | ||
| - | // * `tools[].category == " | + | // * `tools[].category == " |
| // | // | ||
| - | // | + | // |
| - | // | + | // |
| - | // * `studyTypes` includes `code-or-binary-analysis` on 1,063 papers, same | + | // * `studyTypes` includes `code-or-binary-analysis` on 1,484 papers, same |
| // | // | ||
| // | // | ||
| Line 566: | Line 577: | ||
| // --------------------------------------------------------------------------- | // --------------------------------------------------------------------------- | ||
| - | // Ground-truth sources for a script-classification task. 278 distinct strings | + | // Ground-truth sources for a script-classification task. 351 distinct strings |
| // across the population, so again a RANKING. Ordered; first match wins, with | // across the population, so again a RANKING. Ordered; first match wins, with | ||
| // the named external resources ahead of the generic " | // the named external resources ahead of the generic " | ||
| Line 592: | Line 603: | ||
| ==== Methodology and limitations of these figures ==== | ==== Methodology and limitations of these figures ==== | ||
| - | * **Seven venues only.** CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf, IEEE S&P, 2010–2024. IEEE S&P is only 43% retrieved, and **EuroS& | + | * **Seven venues only**, 2010–2026, with 2025 and 2026 provisional. Which venues, which years, what each stage of the selection funnel costs and which venue-years |
| - | * **160 is a floor, and it has a false-positive tail.** Papers whose extraction never names a script as the object of detection are missing; conversely a handful of papers in the population (an e-voting client audit, a router-attack paper, a PHP injection-sink study) analyse JavaScript incidentally. The report script prints the full list so you can judge. | + | * **206 is a floor, and it has a false-positive tail.** Papers whose extraction never names a script as the object of detection are missing; conversely a handful of papers in the population (an e-voting client audit, a router-attack paper, a PHP injection-sink study) analyse JavaScript incidentally. The report script prints the full list so you can judge. |
| * **Not every field can carry a percentage.** '' | * **Not every field can carry a percentage.** '' | ||
| * **Silence is not absence.** "Does not state whether it ran headless" | * **Silence is not absence.** "Does not state whether it ran headless" | ||
| - | * **Every quoted figure was checked against the paper' | + | * **Every quoted figure was checked against the paper' |
| + | * **Every query behind this section, the report script and its unedited output** are on [[provenance: | ||
| ===== Open Questions ===== | ===== Open Questions ===== | ||
| - | * <wrap todo> | + | <WRAP todo> |
| - | * <wrap todo>**LLM-based script classification is unmeasured.** | + | * **No public, hand-labelled corpus of tracking scripts exists.** Every current method builds its own labels from filter lists plus manual inspection, which is why cross-paper comparison is impossible. A shared benchmark would do for this field what EasyList did for request blocking. |
| - | * <wrap todo>**Nobody has measured how much a headless or containerised crawler under-counts //script// classification specifically.** {[jueckstock2021_realistic]} and {[annamalai2024_fpfed]} show the gap exists for API traces and fingerprinting scripts; its size for tracking-script prevalence at scale is unknown.</ | + | * **LLM-based script classification is unmeasured.** |
| - | * <wrap todo>**Function-granularity blocking has no successor paper.** NoT.js {[amjad2024_notjs]} and ByteDefender {[bahrami2025_bytedefender]} both stop at detection plus surrogate generation; nobody has measured what happens when either is deployed to real users at scale, or whether trackers adapt.</ | + | * **Nobody has measured how much a headless or containerised crawler under-counts //script// classification specifically.** {[jueckstock2021_realistic]} and {[annamalai2024_fpfed]} show the gap exists for API traces and fingerprinting scripts; its size for tracking-script prevalence at scale is unknown. |
| - | * <wrap todo>**Cross-platform divergence is a confound in every older result.** If 20.6% of scripts execute differently by platform {[zafar2025_samescript]}, | + | * **Function-granularity blocking has no successor paper.** NoT.js {[amjad2024_notjs]} and ByteDefender {[bahrami2025_bytedefender]} both stop at detection plus surrogate generation; nobody has measured what happens when either is deployed to real users at scale, or whether trackers adapt. |
| + | * **Cross-platform divergence is a confound in every older result.** If 20.6% of scripts execute differently by platform {[zafar2025_samescript]}, | ||
| + | </WRAP> | ||
| ===== Related Pages ===== | ===== Related Pages ===== | ||
| Line 610: | Line 624: | ||
| * [[Privacy: | * [[Privacy: | ||
| * [[Privacy: | * [[Privacy: | ||
| - | * [[Privacy: | + | * [[Privacy: |
| - | * [[Programming: | + | * [[Programming: |
| - | * [[Programming: | + | * [[Programming: |
| * [[Design: | * [[Design: | ||
| * [[Design: | * [[Design: | ||
privacy/javascript.1786056536.txt.gz · Last modified: by karel.kubicek.claude
