Bachelor's Thesis

Improving JShelter as Manifest v3 Browser Extension

Final Thesis 799.14 kB

Author of thesis: Dzianis Pilipenka

Acad. year: 2025/2026

Supervisor: Ing. Libor Polčák, Ph.D.

Reviewer: Ing. Jiří Hynek, Ph.D.

Abstract:

JShelter protects users against browser fingerprinting by wrapping JavaScript APIs and modifying their return values. For it to work in Chromium-based browsers, JShelter requires the user to enable the Allow user scripts toggle. The reason is that the current implementation assembles the injection code at runtime and delivers it to the page through the
chrome.userScripts API, whose availability is bound to that toggle. As a solution, I wrote a Node.js converter that during the extension build generates a static file containing the wrapper implementations. The file is declared in the manifest as a content script and the browser injects it into the main world of every visited page. Measurements on Chromium
showed that the resulting implementation preserves functional equivalence with upstream JShelter in the top-level frame and improves its detection coverage in nested frames nineteenfold. After installation, the extension is ready to use on Chromium without any additional steps from the user.

Keywords:

JShelter, browser fingerprinting, Manifest V3, browser extension, Chromium, content script, main world, JavaScript API wrapping, chrome.userScripts

Date of defence

18.06.2026

Result of the defence

Defended (thesis was successfully defended)

znamkaCznamka

Grading

C

Process of defence

Student nejprve prezentoval výsledky, kterých dosáhl v rámci své práce. Komise se poté seznámila s hodnocením vedoucího a posudkem oponenta práce. Student následně odpověděl na otázky oponenta a na další otázky přítomných. Komise se na základě posudku oponenta, hodnocení vedoucího, přednesené prezentace a odpovědí studenta na položené otázky rozhodla práci hodnotit stupněm C.

Topics for thesis defence

  1. Jaký je reálný výkonnostní dopad vkládání všech 230+ obálek do každé stránky a rámu na rychlost parsování JavaScriptu a odezvu prohlížeče, zejména u slabšího hardwaru?

Language of thesis

Czech

Faculty

Department

Study programme

Information Technology (BIT)

Composition of Committee

prof. Dr. Ing. Jan Černocký (předseda)
doc. Ing. Zdeněk Vašíček, Ph.D. (místopředseda)
Ing. Jiří Hynek, Ph.D. (člen)
RNDr. Marek Rychlý, Ph.D. (člen)
Ing. Vojtěch Havlena, Ph.D. (člen)

Supervisor’s report
Ing. Libor Polčák, Ph.D.

Podle mého názoru pan Pilipenka vypracoval poměrně náročnou práci samostatně a tak prokázal dostatečné znalosti pro obhajobu své práce. Naměřené výsledky ukazují, že by bylo dobré kód co nejdříve přebrat. K dokonalosti však chybí dotažení některých částí, např.:



  • V implementační kapitole není jasné, které části generovaného kódu se přebírají z původního řešení a které se řeší jinak a proč.

  • Práce ignoruje Firefox včetně možného přínosu pro něj, např. z pohledu vyžadovaných výpočetních zdrojů a z pohledu údržby kódu s ohledem na rozdílnou implementaci pro obě rodiny prohlížečů.

  • V podsekci 6.3.1 technické zprávy student argumentuje, že vyhodnocení Workerů nefungovalo v původní verzi testů, ale s ohledem na téma práce by bylo přínosnější, kdyby byly původní testy vylepšeny a vyhodnocení v rámci Workerů proběhlo.

  • Škoda, že se student nezabýval výkonností navrženého řešení.

  • V odevzdaných souborech jsem našel jednotkové testy, které nejsou popsány v technické zprávě.

Evaluation criteria Verbal classification
Informace k zadání

Práce navazuje na předchozí studentské práce a projekty řešené mj. na FIT. Tvorba webových rozšíření má svá specifika a téma samotné práce pokrývá hodně specifickou oblast v rámci tvorby rozšíření. Úplné pochopení zadání práce a souvisejícího zdrojového kódu považuji za poměrně náročné.

Cílem práce bylo, aby rozšíření poskytovalo stejnou funkcionalitu pomocí jiných prostředků. Hlavní cíl práce byl rozhodně splněn. Ale velká část práce vznikala až na poslední chvíli a na některé aspekty práce se nedostalo.

Práce s literaturou

Práce je primárně implementačního charakteru. Přímo tématem práce se vědecké publikace nezabývají. Od momentu, kdy student skutečně pochopil, co se od něj chce pracoval student samostatně a dobrým způsobem.

Aktivita během řešení, konzultace, komunikace

Mám pocit, že student ještě na začátku letního semestru úplně nerozuměl zadání projektu, což mohlo být dáno jazykovou bariérou, náročností zadání, případně tím, že student nevyhledával konzultace dostatečně často. Pak jsme měli několik velmi kvalitních konzultací během, kterých bylo zřejmé, že student nejen problematiku pochopil, ale také, že programová část postupuje rychle a správným směrem.

Aktivita při dokončování

Vzhledem k časové tísni probíhaly implementační práce relativně na poslední chvíli, což mělo i dopad na textovou část práce. Viděl jsem text po kapitolu návrh (včetně). Mé připomínky byly studentem vesměs reflektovány. Další kapitoly jsem neviděl; jsou sice kvalitní, ale daly by se vylepšit.

Publikační činnost, ocenění

Student svou práci nezveřejnil, ale s ohledem na licenci a zadání práce pracuji v době psaní posudku na akceptačním testování. Výsledky práce bude třeba ještě doladit - vychází z několik let staré verze generování kódu, apod.

Points proposed by supervisor: 77

Grade proposed by supervisor: C

Reviewer’s report
Ing. Jiří Hynek, Ph.D.

Student splnil zadání. Vytvořil použitelný nástroj řešící konkrétní problém v ekosystému JShelter. Práce nicméně obsahuje některé výše zmíněné nedostatky. Navrhuji hodnocení stupněm C.

Evaluation criteria Verbal classification Points
Náročnost zadání

Evaluation level: obtížnější zadání

Cílem práce bylo vylepšit nástroj JShelter, který chrání uživatele před otiskováním prohlížeče (browser fingerprinting), tak aby fungoval jako rozšíření prohlížeče Chromium bez nutnosti aktivace přepínače Allow user scripts. Student se musel seznámit s architekturou rozšíření prohlížeče, specifikací Manifest V3, nástrojem JShelter a knihovnou NSCL. Výstupem je Node.js konvertor generující statický soubor s implementací ochranných obálek registrovaných jako content script. Zadání hodnotím jako obtížnější. Považuji ho za splněné.

Prezentační úroveň technické zprávy

Kapitoly na sebe logicky navazují – nejprve je pojednáno o problematice rozšíření prohlížeče a nástroji JShelter, poté o návrhu řešení a nakonec o implementaci a měření výsledků. Mohla být nicméně více rozepsána problematika otiskování prohlížeče a současných přístupů k jeho řešení.

75
Formální úprava technické zprávy

V práci se vyskytují občasné jazykové i typografické nedostatky – například špatné pomlčky nebo nesprávné skloňování anglických termínů. Student v práci zmiňuje použití nástroje Claude.

80
Realizační výstup

Výstupem práce je Node.js konvertor pro statické generování kódu, který odstraňuje nutnost aktivace vývojářského přepínače Allow user scripts a dle dokumentovaných testů zvyšuje detekční pokrytí nástroje JShelter ve vnořených rámcích.

75
Využitelnost výsledků

Výsledky jsou využitelné pro integraci do nástroje JShelter a následné využití v produkčním prostředí.

Rozsah splnění požadavků zadání

Evaluation level: zadání splněno

Rozsah technické zprávy

Evaluation level: je v obvyklém rozmezí

Práce s literaturou

Student se zaměřil převážně na technickou dokumentaci a návody týkající se vývoje rozšíření prohlížeče a nástroje JShelter. Tento přístup je nicméně vzhledem k praktickému zaměření tématu pochopitelný.

75
Topics for thesis defence:
  1. Jaký je reálný výkonnostní dopad vkládání všech 230+ obálek do každé stránky a rámu na rychlost parsování JavaScriptu a odezvu prohlížeče, zejména u slabšího hardwaru?
Points proposed by reviewer: 75

Grade proposed by reviewer: C

Responsibility: Mgr. et Mgr. Hana Odstrčilová