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/08/21 14:50] (current) – Boxes: <wrap> renders a span, use uppercase <WRAP>; one box per list, not per bullet 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 148: | Line 149: | ||
| **LLM-based classification of web scripts is, as of 2026-08-06, essentially absent from the peer-reviewed literature.** A targeted search across PETS 2025/2026, USENIX Security 2025, NDSS 2025/2026, IMC 2025, TheWebConf 2025/2026, CCS 2025 and arXiv found no paper that classifies web scripts as trackers with a language model, or that uses one to summarise a script' | **LLM-based classification of web scripts is, as of 2026-08-06, essentially absent from the peer-reviewed literature.** A targeted search across PETS 2025/2026, USENIX Security 2025, NDSS 2025/2026, IMC 2025, TheWebConf 2025/2026, CCS 2025 and arXiv found no paper that classifies web scripts as trackers with a language model, or that uses one to summarise a script' | ||
| - | <wrap todo> | + | <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 158: | ||
| ===== 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 | 80 | 52.3% | | + | | heuristic-rules | 108 | 54.5% | |
| - | | manual-labelling | 54 | 35.3% | | + | | manual-labelling | 70 | 35.4% | |
| - | | third-party-service | 47 | 30.7% | | + | | third-party-service | 53 | 26.8% | |
| - | | blocklist | 38 | 24.8% | | + | | blocklist | 52 | 26.3% | |
| - | | curated-database | 31 | 20.3% | | + | | curated-database | 40 | 20.2% | |
| - | | supervised-ml | 26 | 17.0% | | + | | dynamic-analysis | 33 | 16.7% | |
| - | | regex-or-signature | 24 | 15.7% | | + | | supervised-ml | 31 | 15.7% | |
| - | | dynamic-analysis | 21 | 13.7% | | + | | regex-or-signature | 27 | 13.6% | |
| - | | static-analysis | 16 | 10.5% | | + | | static-analysis | 25 | 12.6% | |
| - | | unsupervised-ml | + | | graph-analysis | 13 | 6.6% | |
| - | | graph-analysis | + | | other | 11 | 5.6% | |
| - | | other | 9 | 5.9% | | + | | unsupervised-ml | 11 | 5.6% | |
| + | | **llm** | ||
| - | And what they treat as truth. These 153 papers produce **278 distinct free-text ground-truth strings**, folded here into families; 52 tuples did not fold and are printed by the report script. | + | The '' |
| - | ^ Ground-truth family ^ Papers ^ Share of 153 ^ | + | And what they treat as truth. These 198 papers produce **351 distinct free-text ground-truth strings**, folded here into families; 80 tuples did not fold and are printed by the report script. |
| - | | **Authors' | + | |
| - | | Filter list or tracker database | 36 | 23.5% | | + | ^ Ground-truth family ^ Papers ^ Share of 198 ^ |
| - | | Malware / phishing blacklist service | 11 | 7.2% | | + | | **Authors' |
| - | | Vulnerability database | 7 | 4.6% | | + | | Filter list or tracker database | 44 | 22.2% | |
| - | | Synthetic | + | | Malware / phishing blacklist service | 13 | 6.6% | |
| - | | Prior published dataset or labels | 4 | 2.6% | | + | | Synthetic or seeded ground truth | 9 | 4.5% | |
| - | | Spec or documentation | 3 | 2.0% | | + | | Vulnerability database | 9 | 4.5% | |
| - | | Library signature catalogue | 1 | 0.7% | | + | | Spec or documentation |
| - | | Recruited or external annotators | 1 | 0.7% | | + | | Prior published dataset or labels | 4 | 2.0% | |
| + | | Library signature catalogue | 1 | 0.5% | | ||
| + | | 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 226: | ||
| | 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 206 ^ | ||
| + | | Esprima | 21 | 10.2% | | ||
| + | | OpenWPM | 19 | 9.2% | | ||
| + | | PageGraph | 8 | 3.9% | | ||
| + | | Project Foxhound (taint tracking) | 8 | 3.9% | | ||
| + | | VisibleV8 | 8 | 3.9% | | ||
| + | | js-beautify | 7 | 3.4% | | ||
| + | | V8 (as an analysis substrate) | 7 | 3.4% | | ||
| + | | Closure Compiler | 5 | 2.4% | | ||
| + | | Babel, FP-Inspector, | ||
| + | | JStap | 3 | 1.5% | | ||
| + | | jsdom | 2 | 1.0% | | ||
| + | | Acorn, AdGraph, Emscripten, JSgraph, JSNice, Khaleesi, Rhino, SpiderMonkey, | ||
| - | ^ Tool family ^ Papers ^ Share of 160 ^ | + | Two rows moved enough to matter. **Esprima |
| - | | OpenWPM | 17 | 10.6% | | + | |
| - | | Esprima | + | |
| - | | VisibleV8 | 8 | 5.0% | | + | |
| - | | js-beautify | 7 | 4.4% | | + | |
| - | | V8 (as an analysis substrate) | 5 | 3.1% | | + | |
| - | | Closure Compiler | 4 | 2.5% | | + | |
| - | | FP-Inspector | 4 | 2.5% | | + | |
| - | | PageGraph | 4 | 2.5% | | + | |
| - | | WABT | 3 | 1.9% | | + | |
| - | | Babel, jsdom, JStap, Project Foxhound | + | |
| - | | Acorn, AdGraph, Emscripten, Jalangi, 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' | + | **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 277: | ||
| ===== 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 298: | ||
| **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 310: | ||
| - **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 322: | ||
| 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 339: | ||
| // 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 573: | ||
| // --------------------------------------------------------------------------- | // --------------------------------------------------------------------------- | ||
| - | // 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 599: | ||
| ==== 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 peer-reviewed paper found as of 2026-08-06. The obvious study — LLM against WebGraph, AdFlush and NoT.js on a fixed script corpus, reporting cost and version drift as well as F1 — has no baseline yet.</ | + | * **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.** No peer-reviewed paper found as of 2026-08-06. The obvious study — LLM against WebGraph, AdFlush and NoT.js on a fixed script corpus, reporting cost and version drift as well as F1 — has no baseline yet. |
| - | * <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 620: | ||
| * [[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
