• Super User

    Browser, collegamenti JavaScript e HTTP referer

    Non ho trovato nulla in proposito in rete, perciò provo qui:

    Qualcun altro ha notato una difformità di comportamento da parte dei vari browser nel passare o meno l'HTTP referer quando si clicca su un collegamento JavaScript?

    Provate questo:

    <html>
    <head>
    <title>Referer test</title>
    <script>
    function popURL&#40;destURL&#41;	&#123;
    newWin=window.open&#40;'about:blank',''&#41;;
    with &#40;newWin.document&#41;&#123;
    	writeln&#40;'<html><head><META HTTP-EQUIV="REFRESH" CONTENT="1; URL='+destURL+'"></head><body></body></html>'&#41;;
    	close&#40;&#41;;
    	&#125;
    &#125;
    </script>
    </head>
    <body>
    <h1>Referer test</h1>
    
    * [url="http&#58;//www.ioerror.us/ip/headers"]Link normale
    * [url="javascript&#58;;"]Pop-up JavaScript &#40;<tt>window.open&#40;&#41;</tt>&#41;
    * [url="javascript&#58;;"]Pop-up JavaScript &#40;<tt>popURL&#40;&#41;</tt>&#41;
    
    </body>
    </html>
    

    Salvatelo da qualche parte sul Web (non sul vostro desktop), e provate a cliccare i link con vari browser per vedere quali passano il referer e quali no.

    Io ottengo questi risultati:

    • IE 6.0: link tipo 1 , link tipo 2 no, link tipo 3 no;
    • Firefox 1.5.0.1: link tipo 1 , link tipo 2 , link tipo 3 no;
    • Opera 8.52: link tipo 1 , link tipo 2 , link tipo 3 (!!!).

    Qualcuno è in grado di scrivere una funzione JS per bloccare il passaggio del referer che funzioni con qualsiasi browser?


  • Super User

    Davvero un bel problema... non ci avevo mai fatto caso più di tanto.

    Ho osservato il comportamento di Opera e per il momento non mi è venuto nulla in mente.... 😛

    Se non di usare un altro sito come filtro.

    Cioè ipotizziamo 3 siti: A e B tuoi, C il sito da linkare.

    Tu vuoi evitare referer del sito A sul sito C, allora linki dal sito A il sito B passando come parametro l'url del sito C.

    Sul sito B metti uno script (che dovrà avere particolari caratteristiche, passare un semplice 301 non basta) che si occupi di fare un redirect al sito C.
    Così C non saprà dell'esistenza di A, ma solo di B.

    Vediamo se ci viene qualcos'altro in mente 🙂

    :ciauz:


  • Super User

    Cercavo qualcosa in JavaScript...