> Nerozumím tomu, jaký je podle vás rozdíl mezi „serverem“ a „stránkou“.
Server posílá prohlížeči stránku.
> Referrer posílá prohlížeč automaticky, pokud tomu chce nějaký web zabránit, musí všechny externí odkazy přesměrovat přes server, který je anonymizuje.
Ano (a lze to i skrze nějaký meta tag), podstatné je, že tady o tom rozhoduje držitel citlivé informace – server, který URL tak jako tak zná. Cílovému serveru pak referer nemusí být vůbec dostupný a ani nemusí mít možnost se k němu dostat.
> Hash naopak prohlížeč nikam neposílá, a pokud jej chce webová aplikace využít, musí ho naopak pomocí JavaScriptu aktivně přečíst.
Z hlediska bezpečnosti není moc podstatné, že se tak nestane defaultně. Podstatné je, že server má možnost location.hash zjistit a standardně (se zapnutým JS atd.) tomu nezabráníme.
> neuvidí ani doménový název v té komunikaci
Uvidí minimálně certifikát (i kdyby neviděl DNS), a z něj lze doménové jméno obvykle vyčíst nebo odhadnout. Ano, wildcard a multidomain certifikáty to kompolikují.
> A pak se na té stránce spustí skript, který celou adresu i obsah stránky někam pošle po HTTP.
To už je trošku jiný druh hrozby – někdo, komu jsem tu komunikaci vědomě (přímo či nepřímo) svěřil, ji nepohlídal dostatečně. Do toho spadá i leaknutý serverový klíč.
Pokud ale budeme předpokládat, že location.hash se na server neposílá, může nás překvapit, že se k tomu může server dostat. Tzn. někdo, komu jsme informaci svěřit nechtěli, se ji dozví přímo od nás.