首頁 >後端開發 >php教程 >nginx_proxy - 请教大神:PHP或Nginx如何在301重定向中伪造referer?

nginx_proxy - 请教大神:PHP或Nginx如何在301重定向中伪造referer?

WBOY
WBOY原創
2016-06-06 20:22:39709瀏覽

需求是这样的,用户访问a.com时将其重定向到b.com,同时不能让b.com通过referer检测到用户是从a.com过来的。
请问大神这样的功能能否实现?

回复内容:

需求是这样的,用户访问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,把链接改成下面这样子:

<code><a rel="noreferrer" onclick="noreferclick(this);" href="b.com" target="_blank">xxx</a>
function noreferclick(o){
    var b,e,c,g,d,f,h;b=$(o);c=b.attr("href");
    
    
    e="<meta http-equiv="Refresh" content='0; URL="+$("<p/>").text(c).html()+"'>";
    
    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;
    }
}
</code>

大部分浏览器适用。
如果不是,比如c.com点击链接到a.com,然后转b.com,只有a.com是可控的。参考上面的点击操作做个js跳转。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn