Is Safety Redirector Pro safe?
Safety Redirector Pro redirects your active tab on every site visit according to rules fetched over unencrypted HTTP from its own server.
On every page you navigate to, the extension checks the URL against a rule set it downloads from safetyredirector.com and, on a match, sends your tab to a destination specified entirely by that rule data. That rule feed is fetched over plain HTTP with no encryption or integrity check, so anyone in a position to intercept the connection could substitute their own rules and redirect installs to arbitrary destinations. The engine is a generic site-wide redirector, not the malware-specific blocklist its branding implies.
Who publishes itSafety Redirector, LLC. - 6 other listings from the same operator, none carrying a finding
Safety Redirector, LLC. - 6 other listings from the same operator, none carrying a finding
What this publisher told the store about itself, and the other listings that told it the same thing.
Same store account
6 other listings published from this account, 9k+ users between them, none of them carrying a finding.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Extension redirects any page you load per a remotely fetched rule list
Code analysis shows the background worker checks every page you navigate to against a rule list fetched from the vendor's server, and on a host match, redirects your tab to whatever URL that rule specifies, on any site.
What actually happens
You type or click a link to any http:// or https:// site.
The worker matches the host against a remotely supplied rule list and redirects your tab to that rule's target URL instead of the page you requested.
The redirect target, and whether it fires at all, is decided by whatever the vendor's server last returned, not by a fixed known-bad-site list.
The code that does this
The navigation hook and the redirect logic
Registers the navigation hook
js/main.jschrome.webNavigation.onBeforeNavigate.addListener((tab) => { ruleExists(tab, tab.url);});setTimeout(refreshRules, 2 * 86400000); // Refresh rules every 2 daysMatches the rule and redirects
js/main.jsfunction ruleExists(tab, url) { let testURL = prepareUrl(url); chrome.storage.local.get(['rules', 'freq_track'], (result) => { let rules = result.rules || {}; let freqTracks = result.freq_track ? JSON.parse(result.freq_track) : {}; for (const i in rules) { let ruleData = JSON.parse(rules[i]); let from = i.substr(0, i.indexOf('_')); let regx = new RegExp('^' + from.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$'); if (regx.test(testURL)) { let checkRule = true; if (ruleData[3] === 'once' && freqTracks[i] !== undefined) checkRule = false; if (ruleData[3] === 'per24') { let checkDate = new Date(); checkDate.setHours(checkDate.getHours() - 24); if ((new Date(freqTracks[i])) > checkDate) checkRule = false; } if (checkRule) { let newUrl = (/^https?:\/\//.test(ruleData[0]) ? '' : 'http://') + ruleData[0]; chrome.tabs.update(tab.tabId, { url: newUrl }); } break; } } });}What one fetched rule record contains
- Site patterntest.com
The host pattern this rule matches against, turned into a wildcard regex.
- Redirect targethttps://safe-test.com
The full URL your tab is sent to instead of the page you requested.
- Frequencyper24
How often this rule can fire again for the same host: once, or once per 24 hours.
When this fires
Every 2 days
Refetches the rule list from the vendor's server every 2 days, in addition to on every browser startup.
Reproduce it yourself
Recreates the extension's rule-matching logic against a sample rule list so you can see which hosts would trigger a redirect.
- Node.js 18+
// rule-match-demo.js// Recreates ruleExists() from js/main.js so you can test which hosts a// fetched rule list would redirect, without installing the extension.const fs = require('fs');function prepareUrl(url) { return url ? url.replace(/\/$/, '').replace(/^http:\/\/|https:\/\//, '').replace(/^www\./, '') : '';}function matchRule(rules, url) { const testURL = prepareUrl(url); for (const key in rules) { const ruleData = JSON.parse(rules[key]); const from = key.substr(0, key.indexOf('_')); const regx = new RegExp('^' + from.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$'); if (regx.test(testURL)) { const target = (/^https?:\/\//.test(ruleData[0]) ? '' : 'http://') + ruleData[0]; return { matchedPattern: from, frequency: ruleData[3], redirectTo: target }; } } return null;}const rulesPath = process.argv[2];const url = process.argv[3];const rules = JSON.parse(fs.readFileSync(rulesPath, 'utf8'));const result = matchRule(rules, url);console.log(result ? `MATCH: ${JSON.stringify(result)}` : 'No rule matches this URL.');- 1Save as rule-match-demo.js.
- 2Run node rule-match-demo.js rules.json https://example.com.
- 3It prints whether a rule matches and where the tab would be sent.
Observation
Static analysis finding. This behaviour was identified by reading the shipped extension code and has not yet been reproduced in a live run. The trigger conditions and the exact data sent are read from the code, not from an observed capture.
What it can do
Permissions this extension asks for, as declared in version 8.0.2. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to.
Read and change your data on every site you visit
http://*/*
Read and change your data on every secure site you visit
https://*/*
See every page you navigate to, as you navigate to it
webNavigation
Store data in your browser
storage
Show you desktop notifications
notifications
Act on the current tab, but only after you click the extension
activeTab
Where it sends data
Destinations our analysis observed Safety Redirector Pro contacting. Sending data somewhere is not a finding on its own - an extension that syncs your settings has to talk to its own server - but it is where your data can go, and who else it goes to.
- www.rules.safetyredirector.com
Safety Redirector Pro sends data to www.rules.safetyredirector.com. 4 other extensions we have analyzed send data here.
