{"id":8838,"date":"2026-08-20T14:30:00","date_gmt":"2026-08-20T12:30:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=8838"},"modified":"2026-10-24T01:52:29","modified_gmt":"2026-10-23T23:52:29","slug":"zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/","title":{"rendered":"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript"},"content":{"rendered":"<p>Ein lokales Browserwerkzeug kann Eingaben hashen, auswerten oder umformen, ohne diese Inhalte an einen Anwendungsserver zu \u00fcbertragen. Der Vorteil ist ein kleinerer Datenfluss: Ein Verarbeitungsendpunkt ben\u00f6tigt die sensiblen Inhalte nicht. Die Seite selbst kann weiterhin aus dem Netz geladen werden; dabei fallen beim Hostingserver Anfragemetadaten an. Die Aussage \u201elokal verarbeitet\u201c braucht deshalb einen klaren Geltungsbereich.<\/p>\n<h2>Lokale Verarbeitung hat eine Vertrauensgrenze<\/h2>\n<p>Die Browser-Sandbox trennt Webinhalte von Teilen des Betriebssystems. Code auf derselben Seite kann trotzdem Eingabefelder lesen. Ein kompromittiertes Skript, unsicher eingef\u00fcgtes HTML oder eine Browsererweiterung mit passenden Rechten kann die Vertraulichkeit beeintr\u00e4chtigen. Vanilla JavaScript bezeichnet Code ohne Framework und ist keine Sicherheitsgarantie.<\/p>\n<p>Wenige Abh\u00e4ngigkeiten, HTTPS-Auslieferung, gepr\u00fcfter Quellcode und der Verzicht auf Analytics oder Sitzungsaufzeichnungen im Eingabebereich verringern Risiken. Eingaben geh\u00f6ren nicht in URLs, Anwendungsprotokolle oder Fehlertelemetrie. Beliebiger Text wird \u00fcber <code>textContent<\/code> oder das <code>value<\/code> eines Eingabefeldes ausgegeben, nicht \u00fcber <code>innerHTML<\/code>.<\/p>\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" decoding=\"async\" alt=\"Lokale Textverarbeitung mit Web Crypto. CSP begrenzt bestimmte \u00dcbertragungswege und erg\u00e4nzt die Codepr\u00fcfung.\" height=\"710\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/quality-8838-20261024.png\" width=\"1120\"\/><figcaption>Lokale Textverarbeitung mit Web Crypto. CSP begrenzt bestimmte \u00dcbertragungswege und erg\u00e4nzt die Codepr\u00fcfung.<\/figcaption><\/figure>\n<h2>Die vorgesehenen Bytes hashen<\/h2>\n<p><code>TextEncoder<\/code> kodiert JavaScript-Text als UTF-8-Bytes. <code>TextDecoder<\/code> wandelt Bytes einer ausgew\u00e4hlten Kodierung zur\u00fcck in Text. Auch diese Vorg\u00e4nge ben\u00f6tigen Speicher und Rechenzeit. <code>crypto.subtle.digest()<\/code> liefert ein Promise; vorbereitende Textumwandlungen und Schleifen k\u00f6nnen den Hauptthread trotzdem besch\u00e4ftigen. Hardwarebeschleunigung und fehlende Latenz sind nicht garantiert.<\/p>\n<p>Das Beispiel berechnet SHA-256 \u00fcber die UTF-8-Darstellung, ohne Leerzeichen zu entfernen oder Gro\u00dfbuchstaben zu ver\u00e4ndern. Die Grenze von einer Million UTF-16-Codeeinheiten ist eine beispielhafte Anwendungsgrenze, keine Browsergarantie und keine Byte-Grenze. Eine aufrufende Oberfl\u00e4che muss abgelehnte Eingaben und Fehler verst\u00e4ndlich anzeigen.<\/p>\n<pre class=\"wp-block-code-beautifier-block-code\"><code>async function sha256Text(text) {\n  if (typeof text !== 'string') throw new TypeError('Expected text');\n  if (text.length &gt; 1_000_000) throw new RangeError('Input too large');\n  if (!globalThis.isSecureContext || !globalThis.crypto?.subtle) {\n    throw new Error('Web Crypto requires a supported secure context');\n  }\n  const bytes = new TextEncoder().encode(text);\n  const digest = await crypto.subtle.digest('SHA-256', bytes);\n  return Array.from(new Uint8Array(digest),\n    byte =&gt; byte.toString(16).padStart(2, '0')).join('');\n}\n<\/code><\/pre>\n<p>F\u00fcr eine Dateipr\u00fcfsumme sind die urspr\u00fcnglichen Datei-Bytes ma\u00dfgeblich, nicht erneut dekodierter und kodierter Text. <code>digest()<\/code> ben\u00f6tigt die vollst\u00e4ndige Eingabe im Speicher und unterst\u00fctzt kein schrittweises Streaming. Sehr gro\u00dfe Dateien erfordern eine andere gepr\u00fcfte Implementierung und gemessene Ressourcengrenzen. SHA-256 allein ist weder Verschl\u00fcsselung noch ein geeignetes Verfahren zur Passwortspeicherung. Vorhersagbare personenbezogene Angaben werden durch einen Hash nicht automatisch anonym.<\/p>\n<h2>CSP begrenzt bestimmte \u00dcbertragungswege<\/h2>\n<p><code>connect-src 'self'<\/code> erlaubt Skriptverbindungen zur eigenen Origin. <code>connect-src 'none'<\/code> blockiert die von dieser Direktive erfassten Verbindungs-APIs, etwa fetch, WebSocket und Beacons. F\u00fcr Bilder, Formulare, Frames und Skriptdateien gelten eigene Regeln. Die Richtlinie eines lokalen Werkzeugs muss auch diese Wege ber\u00fccksichtigen und ausf\u00fchrbaren Code eng begrenzen.<\/p>\n<p>CSP wird im Browser durchgesetzt und bietet eine zus\u00e4tzliche Schutzschicht, ist aber keine allgemeine Netzwerk-Firewall und kein mathematischer Ausschluss von Datenabfluss. Navigation und erlaubte Ressourcenabrufe ben\u00f6tigen eine eigene Betrachtung. Auch selbst gehostete Skripte k\u00f6nnen kompromittiert sein. Eine durchgesetzte Richtlinie muss gepr\u00fcft werden; Report-Only meldet Verst\u00f6\u00dfe, blockiert aber nicht.<\/p>\n<h2>Workers verbessern die Reaktionsf\u00e4higkeit, nicht die Geheimhaltung<\/h2>\n<p>Ein Web Worker kann aufwendige Berechnungen vom UI-Thread trennen. Direkter DOM-Zugriff fehlt im Worker, doch die Seite \u00fcbergibt Eingabe und empf\u00e4ngt Ergebnis. Sch\u00e4dlicher Seitencode kann deshalb an beiden \u00dcbergabepunkten mitlesen. Auch Workers k\u00f6nnen Netzwerkanfragen ausf\u00fchren.<\/p>\n<p>Eine getrennte Workerdatei ben\u00f6tigt den passenden CSP-Antwortheader f\u00fcr den eigenen Ausf\u00fchrungskontext. <code>worker-src<\/code> der Seite steuert das Laden des Workers, nicht automatisch dessen sp\u00e4tere Verbindungen. Blob-Workers erben die Richtlinie des Erzeugers und ben\u00f6tigen eine passende Ladefreigabe. Eine separate Datei erleichtert die Pr\u00fcfung; eine Pr\u00fcfsumme allein belegt jedoch kein netzwerkfreies Verhalten.<\/p>\n<h2>Nachweise und verbleibende Grenzen<\/h2>\n<p>Eine sinnvolle Pr\u00fcfung umfasst Laden, Eingabe, Verarbeitung, Kopieren oder Download, Fehlerf\u00e4lle und Leeren. Zur Netzwerkpr\u00fcfung geh\u00f6ren Workers und gegebenenfalls aktive Service Workers. Ein Offline-Durchlauf nach dem Laden belegt den gepr\u00fcften Stand und Ablauf, nicht jede sp\u00e4tere Version. Testumgebungen mit gesperrtem Netzwerk liefern einen zus\u00e4tzlichen Nachweis.<\/p>\n<p>Leere Felder und verworfene Referenzen verringern versehentliche Wiederverwendung. JavaScript kann aber keine forensische L\u00f6schung s\u00e4mtlicher Kopien im Browser- oder Betriebssystemspeicher zusichern. Zwischenablage, Downloads und absichtlich gespeicherte Daten k\u00f6nnen einen Tab \u00fcberdauern. Unn\u00f6tige Speicherung zu vermeiden ist belastbarer als vollst\u00e4ndige L\u00f6schung beim Schlie\u00dfen zu versprechen.<\/p>\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n<h3>Gilt der sichere Kontext auch bei lokaler Entwicklung?<\/h3>\n<p><code>crypto.subtle<\/code> ben\u00f6tigt einen unterst\u00fctzten sicheren Kontext. HTTPS und normale Entwicklung \u00fcber localhost sind geeignet. Eine einfache HTTP-Adresse im privaten LAN gilt normalerweise nicht als sicherer Kontext. Das Beispiel pr\u00fcft sowohl den Kontext als auch die Verf\u00fcgbarkeit der API und meldet fehlende Unterst\u00fctzung.<\/p>\n<h3>Beweist ein leerer Netzwerk-Reiter die Vertraulichkeit?<\/h3>\n<p>Nur der beobachtete Ablauf ist damit dokumentiert. Ein erg\u00e4nzender Offline-Test, eine gepr\u00fcfte durchgesetzte CSP und Kontrolle der ausgelieferten Abh\u00e4ngigkeiten st\u00e4rken den Nachweis. Ein einzelner Test ersetzt keine Pr\u00fcfung sp\u00e4terer \u00c4nderungen.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\" rel=\"noopener noreferrer\" target=\"_blank\">MDN Web Docs<\/a><\/li>\n<li><a href=\"https:\/\/owasp.org\/www-project-top-ten\/\" rel=\"noopener noreferrer\" target=\"_blank\">OWASP Top 10<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/SubtleCrypto\/digest\">Web Crypto digest: secure context, Promise, no streaming<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TextEncoder\">TextEncoder: UTF-8 encoding<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/TextDecoder\">TextDecoder: byte decoding<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Web_Workers_API\/Using_web_workers\">Workers: communication and CSP<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Headers\/Content-Security-Policy\/connect-src\">CSP connect-src scope<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Security\/Defenses\/Secure_Contexts\">Secure contexts and localhost<\/a><\/li>\n<li><a href=\"https:\/\/www.w3.org\/TR\/CSP3\/\">Content Security Policy Level 3<\/a><\/li>\n<li><a href=\"https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/DOM_based_XSS_Prevention_Cheat_Sheet.html\">OWASP: safe DOM output<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Guide\/Memory_management\">JavaScript memory management<\/a><\/li>\n<li><a href=\"https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Password_Storage_Cheat_Sheet.html\">OWASP: password hashing<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Architektonische Analyse serverseitig ungebundener Web-Tools mit Vanilla JavaScript, TextEncoder, TextDecoder und nativer Web Crypto API zur Vermeidung von PII-Lecks.<\/p>\n","protected":false},"author":1,"featured_media":14098,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[150],"tags":[92265,92268,92154,92071],"class_list":["post-8838","post","type-post","status-publish","format-standard","hentry","category-web-entwicklung","tag-prywatnosc-danych-pl-de","tag-javascript-de","tag-pii-protection-de","tag-web-security-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Browser-Werkzeuge ohne Backend entwickeln: Vanilla JavaScript, TextEncoder, TextDecoder und Web Crypto f\u00fcr lokale Verarbeitung.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Browser-Werkzeuge ohne Backend entwickeln: Vanilla JavaScript, TextEncoder, TextDecoder und Web Crypto f\u00fcr lokale Verarbeitung.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-20T12:30:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-23T23:52:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8838-zero-server-side-browser-tools-vanil-g.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript\",\"datePublished\":\"2026-08-20T12:30:00+00:00\",\"dateModified\":\"2026-10-23T23:52:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/\"},\"wordCount\":781,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8838-zero-server-side-browser-tools-vanil-g.png\",\"keywords\":[\"Data Privacy\",\"JavaScript\",\"PII Protection\",\"Web Security\"],\"articleSection\":[\"Web Entwicklung\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/\",\"name\":\"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8838-zero-server-side-browser-tools-vanil-g.png\",\"datePublished\":\"2026-08-20T12:30:00+00:00\",\"dateModified\":\"2026-10-23T23:52:29+00:00\",\"description\":\"Browser-Werkzeuge ohne Backend entwickeln: Vanilla JavaScript, TextEncoder, TextDecoder und Web Crypto f\u00fcr lokale Verarbeitung.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8838-zero-server-side-browser-tools-vanil-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8838-zero-server-side-browser-tools-vanil-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript | Lukas Wojcik","description":"Browser-Werkzeuge ohne Backend entwickeln: Vanilla JavaScript, TextEncoder, TextDecoder und Web Crypto f\u00fcr lokale Verarbeitung.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/","og_locale":"en_US","og_type":"article","og_title":"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript | Lukas Wojcik","og_description":"Browser-Werkzeuge ohne Backend entwickeln: Vanilla JavaScript, TextEncoder, TextDecoder und Web Crypto f\u00fcr lokale Verarbeitung.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-20T12:30:00+00:00","article_modified_time":"2026-10-23T23:52:29+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8838-zero-server-side-browser-tools-vanil-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript","datePublished":"2026-08-20T12:30:00+00:00","dateModified":"2026-10-23T23:52:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/"},"wordCount":781,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8838-zero-server-side-browser-tools-vanil-g.png","keywords":["Data Privacy","JavaScript","PII Protection","Web Security"],"articleSection":["Web Entwicklung"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/","name":"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8838-zero-server-side-browser-tools-vanil-g.png","datePublished":"2026-08-20T12:30:00+00:00","dateModified":"2026-10-23T23:52:29+00:00","description":"Browser-Werkzeuge ohne Backend entwickeln: Vanilla JavaScript, TextEncoder, TextDecoder und Web Crypto f\u00fcr lokale Verarbeitung.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8838-zero-server-side-browser-tools-vanil-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8838-zero-server-side-browser-tools-vanil-g.png","width":1200,"height":630,"caption":"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/zero-server-side-browser-tools-entwicklung-sicherer-werkzeuge-mit-vanilla\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Zero-Server-Side-Browser-Tools: Entwicklung sicherer Werkzeuge mit Vanilla JavaScript"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8838","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=8838"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8838\/revisions"}],"predecessor-version":[{"id":23085,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8838\/revisions\/23085"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/14098"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=8838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=8838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=8838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}