Přesměrování stránky bez zachování hlavičky Referer (PHP)

Někdy můžete chtít ze své stránky odkázat na jiný web tak, aby cílová stránka nezjistila, odkud uživatel přišel (URL). Běžně se to lze dozvědět z hlavičky Referer, pokud ji uživatel neblokuje (například firewallem).

Pro tento případ je proto vhodné připravit mezistránku (například soubor /r.php), které předáte cílovou URL. Stránka odstraní Referer a přesměruje na cílovou, která se tak nedozví původní URL.

Odkaz vygenerujte třeba takto:

echo ‘<a href=”/r.php?u=’ . htmlspecialchars(urlencode(‘http://blog.zdenekvecera.cz/item/category/php’)) . ‘”>odkaz</a>’;

V HTML uvidíte:

<a href=”/r.php?u=http%3A%2F%2Fblog.zdenekvecera.cz%2Fitem%2Fcategory%2Fphp”>odkaz</a>

Do obsahu souboru /r.php můžete dát buď HTML tag nebo poslat hlavičku Refresh (+ hlavičky pro zákaz cachování, znaková sada atd.).

Na začátku tedy nejprve zpracujte vstupní parametr s cílovou URL:

if (isset($_GET[‘u’])) {
$u = urldecode($_GET[‘u’]);
} else {
// Chybová hláška – neexistuje URL pro přesměrování
die;
}

// Možno doplnit validaci URL, logování… 

A pro samotné přesměrování zvolte jednu z následujících metod (doporučuji první):

Metoda 1: Hlavička Refresh

header(‘Refresh: 0; URL=’ . $u);
die;

Metoda 2: HTML tag

echo ‘<html><head><meta http-equiv=”refresh” content=”0; url=’ . htmlspecialchars($u) . ‘”></head><body></body></html>’;

Nepoužívejte hlavičku Location

V žádném případě pro tento účel nepoužívejte hlavičku Location, protože přenáší Referer na cílovou stránku – což je přesně to, co nechceme.

header(‘Location: ‘ . $u);




Leave a Reply