在我的网站上,用户可以匿名发布内容。
当他们发布了一些内容时,他们会被重定向到他们的帖子,让我们说:
http://example.com/post/2/title-of-the-anonymous-post
提交帖子的用户和管理员是唯一可以访问该帖子的用户(直到公开为止)。一旦公开,该帖子仍然是匿名的(即人们无法看到谁提交了帖子)。
但是,在该页面上还有一些外部链接。如果用户决定单击外部链接,则目标网站可以记录http引用者(其中包含指向隐藏页面的链接)。这意味着一旦公开,就可以找出谁发布了它。
当用户点击指向其他网站的链接时,有没有办法更改HTTP referer(/ referrer)?
例如,首先将用户重定向到另一个网址,然后将该网页重定向到外部网站:
用户点击:http://example.com/referer-hider?url= {urlencoded(url)}
并让referer-hider将用户重定向到外部页面,以便引用者包含:http://example.com/referer-hider?url={urlencoded(url)}
这会有用吗?或者是否有另一种解决方案(不需要客户端修改)?
答案 0 :(得分:0)
由于引荐来源是由浏览器提供给网络服务器的,因此我只看到两种方法来确保外部网站无法查看此“隐藏”网址。
第一种方法是(如你所说)通过使用header("location: ...");
)的重定向器运行隐藏页面中的外部链接。是的,那会有效。您可能只想使用此功能,以便您可以跟踪网站的退出。
第二种方法是停止隐藏此URL。毕竟,它永远不会永远隐藏起来。谷歌/ Alexa /任何工具栏击中它,然后bam,它被索引。因此,将此隐藏功能构建为基于会话的内容。制作一个脚本,根据会话变量更改其输出,并且只有在人们登录或预览他们的帖子或其他内容时才允许显示隐藏的内容。
第三种(可能是最好的)方法是实现适当的访问控制,以便匿名用户无法访问具有受限内容的页面。如果您希望匿名原创海报能够访问他们自己的帖子,您可以向他们发送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/");
}
等。你可能想要比这更好的保护,但它应该给你一些想法。
答案 1 :(得分:0)
当链接来自HTTPS-> HTTP时,浏览器不会传输HTTP引用程序。因此,一个简单的解决方案是建立https重定向页面:https://yoursite/redirect?url=...
。但是,此页面也容易受到OWASP a10 - Unvalidated Redirects and Forwards的攻击,但这对您来说无关紧要。另一个不会让您暴露于OWASP a10的解决方案是使用free redirect service.
答案 2 :(得分:0)
Adam Barth提出的Meta referrer提案可以帮助您解决问题;简而言之,您可以通过<meta>
标记告诉浏览器,应该在所有传出链接上删除Referer标头。
这不是一个完整的答案,因为它到目前为止只在Webkit中实现,但它是值得关注的东西。