security - 防止其他网站看到 'correct'引用者

标签 security privacy http-referer

在我的网站上,用户可以匿名发布内容。

当他们发布内容后,他们将被重定向到他们的帖子,比方说:

http://example.com/post/2/title-of-the-anonymous-post

提交帖子的用户和管理员是唯一有权访问该帖子的人(直到公开)。一旦公开,该帖子仍将是匿名的(即人们无法看到谁提交了该帖子)。

但是,该页面上还有一些外部链接。如果用户决定单击外部链接,则目标网站能够记录 http 引用站点(其中包含指向隐藏页面的链接)。这意味着一旦公开,就可以查出是谁发布的。

当用户点击另一个网站的链接时,是否可以更改 HTTP 引用地址 (/referrer)?

例如,首先将用户重定向到另一个网址,然后让该页面重定向到外部网站:

用户点击:http://example.com/referer-hider?url= {urlencoded(url)}

并让referer-hider将用户重定向到外部页面,以便referer将包含:http://example.com/referer-hider?url={urlencoded(url)}

这行得通吗?或者是否有另一种解决方案(不需要客户端修改)?

最佳答案

由于引荐来源网址是由浏览器提供给网络服务器的,因此我只看到两种方法来确保外部网站无法查看此“隐藏”URL。

第一种方法是(正如您所说)通过使用 header("location: ...");) 的重定向器运行外部链接,从而从隐藏页面中删除外部链接。是的,那会起作用的。您可能只想在一般情况下使用此功能,以便可以跟踪网站的退出情况。

第二种方法是停止隐藏此 URL。毕竟,它不会永远隐藏起来。 Google/Alexa/任何工具栏点击它,然后,它就被索引了。因此,相反,将这个隐藏的功能构建到基于 session 的东西中。制作一个脚本,根据 session 变量更改其输出,并且仅当人们登录或预览其帖子或其他内容时才允许显示隐藏内容。

第三种(可能也是最好的)方法是实现适当的访问控制,以便匿名用户无法访问包含受限内容的页面。如果您希望匿名原始发布者能够访问他们自己的帖子,您可以向他们发送一个 cookie,然后在访问未经批准的帖子时验证 cookie。

例如,提交审批后:

setcookie('postkey', mysql_insert_id());

然后:

$pieces=explode($_SERVER['PHP_SELF']);
$postid=$pieces[2]; // or whatever
if (!isset($_COOKIE['postkey'])) {
  header("Location: http://example.org/");
} else if ($_COOKIE['postkey'] != $postid) {
  header("Location: http://example.org/");
}

等等。您可能想要比这更好的保护,但它应该给您一些想法。

关于security - 防止其他网站看到 'correct'引用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8465233/

相关文章:

iphone - SecItemCopyMatching 内存泄漏

c# - .net 成员(member)提供商使用什么加密算法?

python - 安全地从目录中的 GET 请求获取文件

git - honeSTLy 设置 Git 的 user.name 和 user.email 值对隐私有(private)何影响?

php - 如何在 Zend Framework 中获取 HTTP_REFERER

go - 引用解析器 Golang : Production setting instead of using placeholder value?

javascript - 如何保护 ajax 调用(JS 到 PHP)

c++ - 如何使 C++ 类以 const 方式访问所有另一个类的私有(private)成员(只读不写)

facebook - 你们可以存储 Facebook 用户的数据吗?可以存储多长时间?

android - HTTP 引荐来源网址是否适用于移动应用程序?