使用退出页面隐藏确切页面路径的 http 引用头数据

1 php http-referer referer

我正在尝试进行退出页面重定向,主要目的是隐藏确切页面路径的 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在页面上我添加这样的链接:

<a href="/exit.php?url=http%3A%2F%2Fexample.com">Example.com</a>
Run Code Online (Sandbox Code Playgroud)

但是当我使用https://www.whatismyreferer.com/测试它时, 我仍然得到了确切的路径,所以我不确定我在这里做错了什么

代码来源:http : //geekthis.net/post/hide-http-referer-headers/

Meh*_*nya 8

正如我在评论中所说,您无法从服务器端隐藏 Referrer(据我所知),但有一些方法可以做到这一点。

使用元标记

您可以通过添加 meta 元素来告诉浏览器不要发送引荐来源网址,如下所示:

<meta name="referrer" content="no-referrer">
Run Code Online (Sandbox Code Playgroud)

使用 referrerpolicy 属性(实验性)

您可以将该referrerpolicy属性添加到锚点元素(area、img、iframe 和链接),它接受以下值: no-referrer, no-referrer-when-downgrade, origin, origin-when-cross-origin, unsafe-url 更多详细信息在这里

使用 rel 属性

你也可以传递noreferrerrel属性,更多细节在这里

使用 Referrer-Policy HTTP 标头

此 HTTP 标头允许您设置有关发送引荐来源网址、文档here 的策略,您可以在 PHP 中使用它的header()功能如下:

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

或者在你的情况下:

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

文章解释了更多的细节此功能。