Your friendly anti-phishing Chrome extension, real-time threat detection on every link
🚀 Key Features
PhishPal adds a "🔍 Scan" button when you hover over any HTTP/HTTPS link. One click instantly checks the URL's reputation through the secure backend API.
Color-coded results at a glance:
Hover over result markers to see full VirusTotal stats, malicious, suspicious, harmless, and undetected counts from dozens of security engines.
The Railway backend handles API rate limiting, caching, and optimization. No VirusTotal API key needed, everything works out of the box.
🏗️ Architecture
Content & Background Scripts
Express.js API Server
Threat Intelligence
VirusTotal API key is stored on the backend server, never exposed in client-side extension code.
Backend handles API rate limits intelligently and caches results to improve performance and reduce API usage.
Railway deployment ensures high availability and fast response times from anywhere in the world.
Centralized backend means updates and improvements are seamless, no extension update required.
🔧 How It Works
Content script detects when you hover over HTTP/HTTPS links and dynamically creates scan buttons.
Click "🔍 Scan" to initiate URL analysis. Button shows a loading state during the scan.
Background script sends the URL to the secure Railway server, which handles VirusTotal API calls, rate limiting, and caching.
Scan button is replaced with a color-coded result marker and detailed tooltip with engine statistics.
📦 Installation
chrome://extensions// Backend API integration
async function checkUrlWithBackend(url) {
try {
const response = await fetch(
'https://phishpal-backend-production.up.railway.app/api/check-url',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url })
}
);
if (!response.ok) throw new Error(`Backend error: ${response.status}`);
const data = await response.json();
return data.stats;
} catch (error) {
console.error('Backend failed:', error);
return { harmless: 0, malicious: 0, suspicious: 1, undetected: 0 };
}
}
// Message handling for content script communication
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === "scanLink" && request.link) {
checkUrlWithBackend(request.link)
.then(stats => sendResponse({ stats }))
.catch(error => sendResponse({
error: error.message,
stats: { harmless: 0, malicious: 0, suspicious: 1, undetected: 0 }
}));
return true;
}
});
{
"manifest_version": 3,
"name": "Phishing Hover Detector",
"version": "1.1",
"permissions": ["scripting", "tabs", "storage"],
"host_permissions": [
"",
"https://phishpal-backend-production.up.railway.app/*"
],
"background": { "service_worker": "background.js" },
"content_scripts": [{ "matches": [""], "js": ["content.js"] }],
"icons": { "48": "icon48.png", "128": "icon128.png" }
}
🎯 Try It Out
Once installed, PhishPal works on any website. Hover over these example links to see it in action:
Hover over these links after installation to see PhishPal in action!
PhishPal is an MVP (Minimum Viable Product) designed for educational and demonstration purposes. While it provides real threat detection via VirusTotal through a secure backend, users should:
Install PhishPal in seconds and get real-time phishing protection on every link you hover over.