uniswaρ.com uses a Greek rho (ρ) instead of a ‘p’. In one attack, 2,400 users connected their wallets before anyone noticed, and $4.7 million was drained in 24 hours. This guide shows you how to protect your users and prevent this kind of attack.
Why dApp Browsers Need Security
URL Protection
Block phishing sites before users connect their wallets
Transaction Preview
Show users what they’re signing before they approve
Contract Verification
Verify the contracts users interact with are safe
- URL phishing detection — Catch lookalike domains, homograph attacks, and known scam sites
- Transaction simulation — Show users exactly what will happen before signing
- Contract verification — Check if the contract is legitimate or malicious
- Real-time risk scoring — Fast enough for inline warnings without blocking navigation
- Multi-chain support — Protect across all major networks
Prerequisites
Before implementing browser security, ensure you have:- A Webacy API key (sign up here)
- Basic familiarity with REST APIs or the Webacy SDK
- Your browser’s navigation and transaction signing flows identified
URL Security
The first line of defense is stopping users from connecting to malicious sites.Phishing Detection
Check URLs when users navigate to new sites or before they connect their wallet.| Field | Type | Description |
|---|---|---|
isPhishing | boolean | Known phishing site |
isMalware | boolean | Known malware distribution |
riskScore | number | 0-100 risk score |
categories | string[] | Risk categories (drainer, scam, etc.) |
Malware Site Blocking
Block sites that attempt to install malware or exploit browser vulnerabilities.Homograph Attack Detection
Common homograph substitutions:| Real | Fake | Unicode |
|---|---|---|
| a | а | Cyrillic U+0430 |
| e | е | Cyrillic U+0435 |
| o | о | Cyrillic U+043E |
| p | р | Cyrillic U+0440 |
| c | с | Cyrillic U+0441 |
| x | х | Cyrillic U+0445 |
Transaction Security
Every transaction request is an opportunity to protect users.Pre-Signing Preview
Simulate transactions before users sign them.| Element | Priority | Description |
|---|---|---|
| Asset changes | High | What tokens/ETH will move |
| Warnings | High | Specific risks detected |
| Risk level | Medium | Overall transaction safety |
| Contract address | Medium | What contract they’re interacting with |
Contract Verification
Check if the contract the user is interacting with is legitimate.Session Protection
Monitor the entire browsing session for threats.Connected dApp Monitoring
Track all dApps the user has connected to and periodically recheck their safety.Risk-Scored Connections
Show users the risk level of their connected dApps.Complete Integration Workflow
Navigation Flow
Wallet Connection Flow
Transaction Request Flow
Full TypeScript Implementation
Complete dApp Browser Security Module
Complete dApp Browser Security Module
Example URLs for Testing
Known Phishing Sites
Test with URLs that mimic legitimate sites but use different domains:uniswap-claim.comopensea-claim.xyzmetamask-support.io
Legitimate Sites (for comparison)
| URL | Expected Result |
|---|---|
https://uniswap.org | Low risk, verified |
https://opensea.io | Low risk, verified |
https://app.aave.com | Low risk, verified |
Test Addresses
| Address | Chain | Description |
|---|---|---|
0xe7d13137923142a0424771e1778865b88752b3c7 | ETH | WalletConnect phishing campaign |
0x84672cc56b6dad30cfa5f9751d9ccae6c39e29cd | ETH | Permit phishing drainer |
0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 | ETH | Vitalik’s wallet (safe baseline) |
API Quick Reference
| Endpoint | Use Case | Response Time |
|---|---|---|
POST /url/check | URL phishing detection | ~200ms |
POST /scan/transaction | Transaction simulation | ~500ms |
GET /addresses/{address} | Contract verification | ~500ms |
GET /addresses/{address}/quick-profile | Fast risk check | ~200ms |
Next Steps
Get Your API Key
Start protecting your browser users
API Reference
Complete endpoint documentation
Phishing Guide
Understand phishing attack patterns
Install the SDK
TypeScript SDK for integration
