From e90ff542b08979968a04a61c1650bf72598a084c Mon Sep 17 00:00:00 2001 From: libroot Date: Sun, 28 Sep 2025 06:09:19 +0000 Subject: [PATCH] Initial commit --- README | 7 +++++ background.js | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ blocked.html | 40 ++++++++++++++++++++++++++++ blocked.js | 21 +++++++++++++++ icons/icon.png | Bin 0 -> 24305 bytes manifest.json | 28 ++++++++++++++++++++ popup.html | 53 +++++++++++++++++++++++++++++++++++++ popup.js | 32 +++++++++++++++++++++++ 8 files changed, 250 insertions(+) create mode 100644 README create mode 100644 background.js create mode 100644 blocked.html create mode 100644 blocked.js create mode 100644 icons/icon.png create mode 100644 manifest.json create mode 100644 popup.html create mode 100644 popup.js diff --git a/README b/README new file mode 100644 index 0000000..ac1cadf --- /dev/null +++ b/README @@ -0,0 +1,7 @@ +# Cloudflare Blocker extension + +* Detects Cloudflare-related headers in outgoing requests. +* Blocks the request if Cloudflare is present. +* Toggle the blocker on/off via the extension popup. + +Available from Mozilla Add-ons: [https://addons.mozilla.org/en-US/firefox/addon/cloudflare-blocker/](https://addons.mozilla.org/en-US/firefox/addon/cloudflare-blocker/) diff --git a/background.js b/background.js new file mode 100644 index 0000000..52a55b7 --- /dev/null +++ b/background.js @@ -0,0 +1,69 @@ +let blockingEnabled = true; + +chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + if (message.action === 'toggleBlocking') { + blockingEnabled = message.enabled; + } + + if (message.action === 'getBlockingState') { + sendResponse({ action: 'setBlockingState', enabled: blockingEnabled }); + } +}); + +chrome.webRequest.onHeadersReceived.addListener( + function(details) { + if (!blockingEnabled) { + return { cancel: false }; + } + + // These are Cloudflare's headers, taken from here: + // https://developers.cloudflare.com/fundamentals/reference/http-headers/ + const cloudflare_headers = [ + 'cf-connecting-ip', + 'cf-connecting-ipv6', + 'cf-ew-via', + 'cf-Pseudo-ipv4', + 'cf-ray', + 'cf-ipcountry', + 'cf-visitor', + 'cf-worker' + ]; + // You might want capture all headers prefixed with "cf-": + // const cf_header = details.responseHeaders.find(header => + // header.name.toLowerCase().startsWith('cf-') + // ); + + const cf_header = details.responseHeaders.find(header => + cloudflare_headers.includes(header.name.toLowerCase()) + ); + + if (cf_header) { + console.log('Cloudflare header found:', cf_header); + + const query_params = new URLSearchParams({ + name: cf_header.name, + value: cf_header.value, + url: details.url + }).toString(); + + /* + * It would be cool to pass the tab URL in the query params, but how? + * When accessing chrome.tabs here, the active tab URL is "about:newtab". + * Because we block the request immediately and the tab URL state doesn't + * never update to the URL we tried to access. I'd like to pass the URL + * to the web.archive.org/tab_url_here in blocked.html. + * Email contact@libroot.org if you know a solution! + */ + + // Redirect to our custom blocked.html page + const url = chrome.runtime.getURL('blocked.html') + '?' + query_params; + console.log('Redirecting to blocked page:', url); + chrome.tabs.update(details.tabId, { url: url }); + + // Block the request, reject Cloudflare! + return { cancel: true }; + } + }, + { urls: [''] }, + ['blocking', 'responseHeaders'] +); diff --git a/blocked.html b/blocked.html new file mode 100644 index 0000000..0489208 --- /dev/null +++ b/blocked.html @@ -0,0 +1,40 @@ + + + + + + Cloudflare page blocked + + + +

This page has been blocked by the Cloudflare Blocker extension due to a Cloudflare header.

+ +

+ Blocked Header: +

Loading...
+

+ +

+ Blocked response URL: +

Loading...
+

+ +
+

You can probably view the page on the Wayback Machine.

+ + + + diff --git a/blocked.js b/blocked.js new file mode 100644 index 0000000..b31eead --- /dev/null +++ b/blocked.js @@ -0,0 +1,21 @@ +function getUrlParams() { + const urlParams = new URLSearchParams(window.location.search); + return { + name: urlParams.get('name'), + value: urlParams.get('value'), + url: urlParams.get('url') + }; +} + +document.addEventListener('DOMContentLoaded', function() { + const params = getUrlParams(); + + if (params.name && params.value) { + const header_info = `Name: ${params.name}\nValue: ${params.value}`; + document.getElementById('header_info').textContent = header_info; + } + + if (params.url) { + document.getElementById('url').textContent = params.url; + } +}); diff --git a/icons/icon.png b/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..59b79277094339cf1c6ae4fb03ec22f4642599f1 GIT binary patch literal 24305 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 W-n%U^Jo`TXD<&(cC{ZnD81#RZ%~i_) literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..35ee1c9 --- /dev/null +++ b/manifest.json @@ -0,0 +1,28 @@ +{ + "name": "Cloudflare Blocker", + "version": "1.0.0", + "author": "libroot.org", + "developer": { + "name": "libroot", + "url": "https://libroot.org/posts/Cloudflare-Blocker-Firefox-extension" + }, + "description": "Blocks requests if they have Cloudflare's headers, and shows a blocked page.", + "manifest_version": 2, + "permissions": [ + "webRequest", + "webRequestBlocking", + "tabs", + "" + ], + "background": { + "scripts": ["background.js"], + "persistent": false + }, + "browser_action": { + "default_popup": "popup.html", + "default_icon": "icons/icon.png" + }, + "web_accessible_resources": [ + "blocked.html" + ] +} diff --git a/popup.html b/popup.html new file mode 100644 index 0000000..5b31137 --- /dev/null +++ b/popup.html @@ -0,0 +1,53 @@ + + + + + + Cloudflare Blocker + + + + +

Cloudflare Blocker

+
+
+
+

Blocking is ON

+ + + + diff --git a/popup.js b/popup.js new file mode 100644 index 0000000..0bf0c0c --- /dev/null +++ b/popup.js @@ -0,0 +1,32 @@ +const toggle = document.getElementById('toggle'); +const status = document.getElementById('status'); + +chrome.runtime.sendMessage({ action: 'getBlockingState' }, (response) => { + if (response && response.enabled !== undefined) { + const blockingEnabled = response.enabled; + + if (blockingEnabled) { + toggle.classList.add('active'); + status.textContent = 'Blocking is ON'; + } else { + toggle.classList.remove('active'); + status.textContent = 'Blocking is OFF'; + } + } +}); + +toggle.addEventListener('click', function () { + const isActive = toggle.classList.toggle('active'); + + if (isActive) { + status.textContent = 'Blocking is ON'; + } else { + status.textContent = 'Blocking is OFF'; + } + + chrome.runtime.sendMessage({ + action: 'toggleBlocking', + enabled: isActive + }); +}); +