点击隐藏推荐人

时间:2011-06-21 16:29:25

标签: php javascript html http redirect

当我点击网站上的链接时,我想隐藏推荐人。要更好地了解我想要做什么:当有人点击我网站上的链接时,我不希望其他网站所有者知道访问者来自哪里。

我不在乎它是用PHP,HTML还是Javascript完成的。​​

我试过HTML刷新,javascript window.location,javascript弹出窗口,PHP标头重定向,但没有任何效果。

8 个答案:

答案 0 :(得分:11)

截至2015年,您可以阻止发送Referer标头:

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

只需将其添加到网页的head部分即可。适用于链接和Ajax请求。

答案 1 :(得分:9)

这是一种傻瓜式的方法。我在一个应用程序中使用此脚本,该应用程序有时会链接到第三方网站,这些网站的网址需要保密。

<?php
session_start();

/**
  Setp 1. Get the query string variable and set it in a session, then remove it from the URL.
*/
if (isset($_GET['to']) && !isset($_SESSION['to'])) {
    $_SESSION['to'] = urldecode($_GET['to']);
    header('Location: http://yoursite.com/path/to/this-script.php');// Must be THIS script
    exit();
}


/**
  Step 2. The page has now been reloaded, replacing the original referer with  what ever this script is called.
  Make sure the session variable is set and the query string has been removed, then redirect to the intended location.
*/
if (!isset($_GET['to']) && isset($_SESSION['to'])) {
    $output = '<!DOCTYPE html>
<html>
<head>
<meta name="robots" content="none">
<title>Referral Mask</title>
</head>
<body>
<h3>Redirecting...</h3>
<script>window.location.href="'.$_SESSION['to'].'"</script>
<a href="'.$_SESSION['to'].'">Here is your link</a>
</body>
</html>' . "\n";
    unset($_SESSION['to']);
    echo $output;
    exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta name="robots" content="none">
<title>Referral Mask</title>
</head>
<body>
<h1>Referral Mask</h1>
<p>This resource is used to change the HTTP Referral header of a link clicked from within our secure pages.</p>
</body>
</html>

此脚本使用PHP和JavaScript从标头中可靠地删除原始引荐来源。

答案 2 :(得分:2)

解决方法,而不是解决方案:

通过tinyurl.com或类似服务生成所有此类链接。

将您要重定向到的<url>转换为raw-url-encode。生成一些10-15个字符的随机字符串(以确保它的可用性),以免称之为<alias>

然后拨打http://tinyurl.com/create.php?alias=<alias>&url=<url>

E.g。 http://tinyurl.com/create.php?alias=ahdiwabdoubiadasd&url=http%3A%2F%2Fwww.whatismyreferer.com%2F

现在,您可以验证http://tinyurl.com/ahdiwabdoubiadasd导致www.whatismyreferer.com带有伪装的推荐人

答案 3 :(得分:2)

在HTML 5中,链接应支持rel="noreferrer"用于此目的。

答案 4 :(得分:1)

除了jimps的回答,我创建了一个文件.php解决方案,可以同时使用HTTPS和HTTP。它使用两个步骤(因此它将两次调用anonym.php)。首先是javascript重定向,第二个是php头位置重定向。我个人需要这个来测试管理区域内发布的网址。享受!

<?php
  // anonym.php

  if ($_SERVER['QUERY_STRING']) {

    if (stripos($_SERVER['QUERY_STRING'], 'anonym2=') === FALSE) {
      echo '<script>document.location.replace("anonym.php?anonym2=' .$_SERVER['QUERY_STRING']. '");</script>';
    } else {
      header('Location: ' . str_replace('anonym2=', '', $_SERVER['QUERY_STRING']));
    }

    exit();

  }

?>

加入

答案 5 :(得分:0)

您可以让所有链接通过代理重定向或链接缩短服务(例如bit.ly或goo.gl),但这可能会引起用户的注意。

您也可以(再次,不建议)将超链接替换为触发服务器端回发的超链接,并在发送请求之前以编程方式“构造”标题。

在我看来,有点矫枉过正。

答案 6 :(得分:0)

更新代码:

此代码仅是概念证明。取消远离父页面的导航,并将目标URL发送到iframe。 iframe加载一个dara url,它被视为“null”原始文档。当帧接收到消息时,它会使用“null”引用来将用户重定向到目标URL。由于帧具有空原点,因此无法直接进行消息传递。因此,另一个网页可能会通过他们自己的匿名iframe拦截该消息。在生产中,您仍应在链接上使用rel =“noreferrer”,以防您的用户禁用了javascript,或者您的网页上出现了javascript错误。对于禁用JS的旧浏览器,仍可以公开引用者。此示例只能在网页正文后加载,因此脚本可能无法处理页面完全加载前的任何点击。

(function($) {

  var frame = $('<iframe sandbox="allow-scripts allow-top-navigation" src="data:text/html;charset=utf-8,<scr\ipt>window.addEventListener(\'message\', function(event){ if(event.origin == \'' + window.origin + '\') top.window.location = event.data; });</scr\ipt>" style="displayyyy: none !important;">').appendTo('body');

  $('a').click(function(event) {

    frame[0].contentWindow.postMessage( event.target.href, '*' );
    return false;

  });

})(jQuery);

原帖:

这是我尝试使用空白iframe的后备解决方案。我没有得到它的工作,但我分享它,万一其他人想要摆弄它。从技术上讲,框架是交叉原点,因此您不能只单击框架中的链接。我的想法是使用postMessage使框架单击。

https://jsfiddle.net/skibulk/0oebphet/39/

(function($){

  var frame = $('<iframe src="about:blank" style="displayyyy: none !important;">').appendTo('body');

  $('a[rel~=noreferrer]').click(function(event){

    var win = frame[0].contentWindow;
    win.$ = $;

    frame
    .contents()
    .find('body')
    .append(event.target.outerHTML)
    .append( "<scr\ipt> window.addEventListener('message', function(event){ document.append(event.data); $('a').click(); }); </scr\ipt>" );

    win.postMessage('Hi','*');
    return false;

  });

})(jQuery);

答案 7 :(得分:-4)

我们使用内部开发的内部任务系统的简单脚本。我们也不希望传递引用者信息!当我看到我们管理的其他网站时,在使用脚本时我看不到任何与请求一起传递的引用者信息,但没有我做的脚本。

<?php
// anonym.to.php
// Redirect URLs so the referrer information is dropped. Ideally, this script would be 
// invoked by prefixing all external links like this: "/anonym.to.php?URL"

// If a query string is given, then assume it is a website
// and anonymously redirect to it.
        if ($_SERVER['QUERY_STRING'])
        {
                header('Location: '.$_SERVER['QUERY_STRING']);
                exit(0);
        }
?>