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:

  1. Etap 1 — live: Playwright otwiera URL → jeśli strona odpowiada (HTTP 200–399) → screenshot + HTML
  2. 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

ParametrWartość
Cel5,000–10,000 phishing stron
PriorytetMarki finansowe (PayPal, banki, Revolut, BLIK…) — na przód kolejki
Format screenshot1280×800 PNG, headless Chromium
Timeout12s 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 phishtank

Jakość i filtry

  • Tylko verified=yes AND online=yes z 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…”