{"id":27003186,"url":"https://github.com/shamel67/probextshield","last_synced_at":"2026-05-14T13:38:44.074Z","repository":{"id":284993368,"uuid":"956734382","full_name":"shamel67/probextshield","owner":"shamel67","description":"A Chrome extension that detects when websites attempt to probe which browser extensions you have installed.","archived":false,"fork":false,"pushed_at":"2025-04-01T20:12:10.000Z","size":744,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-24T01:32:54.012Z","etag":null,"topics":["chrome-extension","network","privacy-protection"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shamel67.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-28T19:08:17.000Z","updated_at":"2025-04-01T20:06:15.000Z","dependencies_parsed_at":"2025-03-28T20:36:01.915Z","dependency_job_id":null,"html_url":"https://github.com/shamel67/probextshield","commit_stats":null,"previous_names":["shamel67/probextshield"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shamel67/probextshield","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamel67%2Fprobextshield","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamel67%2Fprobextshield/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamel67%2Fprobextshield/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamel67%2Fprobextshield/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shamel67","download_url":"https://codeload.github.com/shamel67/probextshield/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamel67%2Fprobextshield/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33027362,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome-extension","network","privacy-protection"],"created_at":"2025-04-04T05:15:39.117Z","updated_at":"2026-05-14T13:38:44.019Z","avatar_url":"https://github.com/shamel67.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛡️ ProbExtShield\n\n**ProbExtShield** is a Chrome extension that detects when websites attempt to probe which browser extensions you have installed.\nInspired by my work on [CleanedIn](https://github.com/shamel67/CleanedIn), this project uses modern, non-intrusive techniques to inform users and collect anonymized analytics.\n\nFor example, LinkedIn is probing for the presence of over 1800 extensions!\n\n---\n\n## 🔍 What It Does\n\n- Detects websites trying to fingerprint installed extensions\n- Displays a warning badge with the number of unique extensions probed\n- Tracks extension probing anonymously using GA4 (opt-in)\n- Cache and deduplicates analytics to avoid flooding\n- Offers an options page to clear cache and control behavior\n\n---\n\n## 🧩 How Extension Probing Works\n\nSome websites use known extension IDs and try to load resources from `chrome-extension://\u003cid\u003e/` paths. If the resource loads successfully, the website knows the extension is installed. ProbExtShield detects this behavior, alerts the user, and can block those requests to protect the user's privacy.\n\n---\n\n## ⚙️ Installation\nWorks in Chrome and Brave (recommended).\n- on Github, click on the \"\u003c\u003e Code\" button and \"Download ZIP\", then unzip in a folder of your choice.\n- or do \"npm install probextshield\" in a folder of your choice.\n\n1. Type chrome://extensions in the Chrome URL bar and press enter.\n1. Enable developer mode using the toggle on the right\n1. Click Load Unpacked on the left side of the screen.\n1. Navigate to the location of the folder you unzipped, and select it.\n\n---\n\n### 🗃️ Caching Behavior\n\nTo avoid redundant analytics:\n- Events are cached in chrome.storage.local\n- Each (hostname|extensionId) entry is stored with a timestamp\n- Only the 1000 most recent entries are retained\n- Entries expire after 28 days\n- The cache is automatically trimmed during usage\n\n---\n\n### ⚙️ Options Page Features\n\nThe options UI provides:\n- A Clear GA Cache button\n- A visual confirmation message (“Cache cleared!”)\n- More settings and controls coming soon\n\n---\n\n## 📡 Analytics \u0026 Privacy\n- Analytics is an opt-in feature controlled in the options dialog\n- Events are sent as page_view events to GA4 using Measurement Protocol\n- No cookies, IP addresses, or user identifiers are sent\n- Events use a spoofed domain structure like: `https://probextshield.ca/{hostname}/{extensionId}`\n\n---\n\n## 🔒 Privacy-First Design\n- Zero fingerprinting or user-level tracking\n- Local-only caching of detection events\n- Deduplication prevents unnecessary reporting\n- Fully open-source and inspectable\n\n---\n\n## 🚧 Roadmap\n- Retrieve extension names\n- Create a public dashboard showing the sites using this technique and which extensions they are probing\n\n---\n\n## 🚫 License \u0026amp; Disclaimer\n\nMIT License. Feel free to fork, contribute, and remix.\n\n---\n\n### Disclaimer\n\nThis project is provided **as-is**, without any warranties or guarantees of any kind, express or implied.\n\nThe code is shared **for educational and experimental purposes only**. Use it at your own risk.\n\n---\n\n## 🙋 Contributing\n\nContributions are welcome under strict terms.\n\nBy submitting a pull request, you agree that:\n- Your code is original\n- You grant the project owner a non-exclusive, worldwide, royalty-free license to use and modify your contribution\n- Your contributions may be used in the CleanedIn project only\n\nSteps to contribute:\n1. Fork the repo\n2. Create a feature branch\n3. Submit a pull request with a clear explanation\n\n👉 [Sponsor this project, buy me a coffee!](ko-fi.com/shamel)\n\n---\n\n## 📫 Contact\n\nQuestions? Licensing inquiries?  \nEmail: `shamel67@gmail.com`\n\n---\n\n**Made with ❤️ in Canada 🇨🇦.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshamel67%2Fprobextshield","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshamel67%2Fprobextshield","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshamel67%2Fprobextshield/lists"}