nginx_proxy - 请教大神:PHP或Nginx如何在301重定向中伪造referer?
请问大神这样的功能能否实现?
回复内容:
需求是这样的,用户访问a.com时将其重定向到b.com,同时不能让b.com通过referer检测到用户是从a.com过来的。
请问大神这样的功能能否实现?
思路就不对。
不管你是PHP的重定向,Nginx的重定向,甚至前端JS的重定向。
都无所谓。。。。。。最后都是浏览器执行重定向的操作的。
Referer或者Origin之类的参数,是浏览器加上去的。
要看具体浏览器的具体情景,不同的浏览器表现完全不一样(或者说,基本无法预测和控制)。
Update:
有看到一些其他的思路,不过都有局限,也没什么保证,可以参考
http://segmentfault.com/q/1010000000123441
试试把a.com做成https
重定向的地址归根还是浏览器去执行了,楼主可以做个中转,a.com
重定向到c.com
,再重定向b.com
referer是浏览器发出的,不是nginx和php所能决定的
后台方案:通过proxy,对b.com做一个透明代理。
前台方案:通过js,或者链接
如果你是在某个网站比如A.com,有个链接点击之后进入b.com,然后要消除refer,把链接改成下面这样子:
xxx
function noreferclick(o){
var b,e,c,g,d,f,h;b=$(o);c=b.attr("href");
e="
";
if($.browser.webkit){
b.attr("rel","noreferrer");
return true;
}
var userAgent = navigator.userAgent.toLowerCase();
if(userAgent.indexOf("firefox")!=-1){
if(b.attr("added")){
return true;
}
else{
h="data:text/html;charset=utf-8,"+encodeURIComponent(e);
b.attr("added",1);
b.attr("href",h);
return true;
}
}
else{
var a=b.attr("target")||"_self";
switch(a){
case "_self":
case window.name:
a=window;
break;
default:
a=window.open(null,a);
break;
}
a=a.document;
a.clear();
a.write(e);
a.close();
return false;
}
}
大部分浏览器适用。
如果不是,比如c.com点击链接到a.com,然后转b.com,只有a.com是可控的。参考上面的点击操作做个js跳转。
上一篇: 微博关注用户表的设计
下一篇: smarty 有关问题咨询