Скрытие данных заголовков http-реферера точного пути к странице с помощью страницы выхода

Я пытаюсь выполнить перенаправление страницы выхода, основная цель - скрыть данные http-реферера точного пути к странице,

Я использовал этот код как страницу exit.php:

<?php

/*
 * Sets the HTTP headers to redirect the user to a different page
 * along with settings the HTTP status code to 307 Temporary Redirect
 */
function redirect($url) {
    header("Location: {$url}", true, 307);
}

/*
 * Checks if the URL is valid and uses the HTTP or HTTPS scheme.
 */
function valid_url($url) {
    if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED|FILTER_FLAG_HOST_REQUIRED) === false) {
        return false;
    }

    $scheme = parse_url($url, PHP_URL_SCHEME);
    if($scheme !== "http" && $scheme !== "https") {
        return false;
    }

    return true;
}


if(!isset($_GET['url'])) {
    // Missing required argument. What should we do?
    redirect("/");
    exit;
}else{
    $url = $_GET['url'];
    if(valid_url($url)) {
        redirect($url);
        exit;
    }else{
        // Invalid URL. What should we do?
        redirect("/");
        exit;
    }
}

а затем на странице я добавляю ссылку следующим образом:

<a href="/exit.php?url=http%3A%2F%2Fexample.com">Example.com</a>

Но когда я тестирую его с помощью https://www.whatismyreferer.com/, я все равно получаю точный путь, так что я не уверен, что я делаю неправильно здесь

источник кода: http://geekthis.net/post/hide-http-referer-headers/


person N4d    schedule 14.01.2018    source источник
comment
заголовок referrer отправляется браузером, я не думаю, что вы можете контролировать это со стороны сервера, попробуйте вместо этого использовать <meta name="referrer" content="no-referrer">   -  person Spoody    schedule 15.01.2018


Ответы (1)


Как я сказал в комментарии, вы не можете скрыть Referrer со стороны сервера (насколько я знаю), но есть способы сделать это.

Использование метатега

Вы можете указать браузеру не отправлять реферер, добавив метаэлемент следующим образом:

<meta name="referrer" content="no-referrer">

Использование атрибута referrerpolicy (экспериментальный вариант)

Вы можете добавить атрибут referrerpolicy к якорному элементу (области, img, iframe и ссылке), он принимает следующее значение: no-referrer, no-referrer-when-downgrade, origin, origin-when-cross-origin, unsafe-url подробнее здесь.

Использование атрибута rel

Вы также можете передать noreferrer в атрибут rel, подробнее здесь

Использование HTTP-заголовка Referrer-Policy

Этот HTTP-заголовок позволяет установить политику отправки реферера, документация здесь вы можете использовать его в PHP с функцией header() следующим образом:

header("Referrer-Policy: no-referrer");

Или в вашем случае:

function redirect($url) {
    header("Referrer-Policy: no-referrer");
    header("Location: {$url}", true, 307);
}

Эта статья объясняет эту функцию более подробно.

person Spoody    schedule 15.01.2018
comment
Привет, спасибо за ответ, если да, то мне интересно, как это делает Google или Facebook? - person N4d; 15.01.2018
comment
Вы имеете в виду не отправлять реферера? они просто говорят браузеру не отправлять реферер одним из упомянутых мной методов (может быть, одним из них, может быть, обоими или, может быть, что-то, о чем я не знаю) - person Spoody; 15.01.2018
comment
Я только что попробовал это, используя whatismyreferer.com, он полностью скрывает реферер, скрывает ли это его для всех браузеров? ? - person N4d; 15.01.2018
comment
Это зависит от браузера, Chrome и Firefox поддерживают его, Opera поддерживает некоторые политики Safari, Edge и IE из MDN, но не - person Spoody; 15.01.2018
comment
@N4d N4d Я обновил свой ответ, указав методы для достижения того, чего вы хотите, со ссылками на полезную документацию. - person Spoody; 15.01.2018
comment
^^ это было лучшее решение, так как разработчик иногда использует незащищенные скрипты и не хочу выставлять свои ссылки на другие сайты. - person Salem; 08.08.2018