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

by Zdeněk Večeřa 0 Comments

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'), ENT_QUOTES, 'UTF-8') . '">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, ENT_QUOTES, 'UTF-8') . '"></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

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..