PhishTank + OpenPhish Live Crawl 2026
Metadane
- Źródło: PhishTank (phishtank.com) + OpenPhish (openphish.com)
- Zbieranie: 2026 (w toku)
- Skrypt:
scripts/phishtank_crawler.py - Status: Do zebrania (skrypt gotowy)
- Licencja: PhishTank CC BY-SA 2.5; OpenPhish: free community feed
- Kategoria: Security / Visual Phishing / Benchmark
Strategia dwuetapowa
Problem: phishing strony żyją średnio 4–8 godzin, feed PhishTanka jest opóźniony → ~70% URL-i już offline przy crawlowaniu.
Rozwiązanie:
- Etap 1 — live: Playwright otwiera URL → jeśli strona odpowiada (HTTP 200–399) → screenshot + HTML
- Etap 2 — Wayback fallback: jeśli offline → zapytanie do Wayback Machine CDX API o archiwum z ostatnich 30 dni → screenshot archiwum
Oczekiwany uzysk: ~25% live + ~45% Wayback = ~70% łącznie (z 5000 prób → ~3500 screenshotów)
Co jest zbierane
Dla każdego URL (verified phishing):
phishtank-crawl-2026/
{md5_12char}/
shot.png # screenshot 1280×800px (po renderowaniu JS, 1.5s wait)
page.html # pełny DOM po renderowaniu przez Chromium
info.txt # URL (format Phishpedia-compatible)
meta.json # {url, brand, timestamp, status_code, load_time_ms, error}
manifest.json # statystyki zbioru
Charakterystyka
| Parametr | Wartość |
|---|---|
| Cel | 5,000–10,000 phishing stron |
| Priorytet | Marki finansowe (PayPal, banki, Revolut, BLIK…) — na przód kolejki |
| Format screenshot | 1280×800 PNG, headless Chromium |
| Timeout | 12s na stronę, 1.5s JS rendering wait |
| Współbieżność | 5 okien równolegle (~1000 stron/h) |
| Czas zbiórki | ~5-10h dla 5000 URL |
Dlaczego własny crawl?
- Ji & Kim 2025 (19,131 stron) może być niedostępny — własny crawl = niezależność
- Świeże phishing 2026 = niemożliwe do memoryzacji przez baseline’y trenowane na starszych danych
- Identyczna metodologia z Ji & Kim 2025 (PhishTank + Playwright) → możliwość cytowania jako replikacja
- Finansowe marki priorytyzowane → lepszy coverage dla naszego zakresu badań
Uruchomienie
# Instalacja zależności
pip install playwright requests tqdm
playwright install chromium
# Zbierz 5000 stron (priorytet: marki finansowe)
python scripts/phishtank_crawler.py \
--limit 5000 \
--concurrency 5 \
--out data/bank-brand-phishing-detection/phishtank-crawl-2026
# Tylko strony finansowe (~500-1000 z dostępnych)
python scripts/phishtank_crawler.py \
--limit 2000 \
--financial-only \
--source phishtankJakość i filtry
- Tylko
verified=yes AND online=yesz PhishTank → minimalizuje nieaktywne strony - Timeout 12s: strony które nie ładują się w 12s → zapisywane z flagą
error(screenshota brak) - Oczekiwany success rate: ~60-70% (phishing strony często szybko wyłączane)
- Typowy uzysk: 3,000-4,000 pełnych screenshotów z 5,000 prób
Użycie w projekcie
EXP-5 (end-to-end benchmark):
Phishing: phishtank-crawl-2026/ (5,000 stron) ← główny benchmark
Benign: Tranco top-10k (crawlowane przez Playwright)
Alternatywnie: Phishpedia 30k (subset 5,000)
Używany w publikacjach
projects/bank-brand-phishing-detection/— EXP-5 alternative benchmark
Notatki
Porównaj z Ji & Kim 2025 (arXiv:2511.09606) — identyczna metodologia (PhishTank + Playwright screenshots). Możliwość napisania: “Following the dataset collection methodology of Ji & Kim (2025), we collected…”