Jak mogę przekazać nagłówek strony odsyłającej z mojej domeny https do domen http?

12

Moja strona internetowa jest w 100% https. Mam linki do innych domen http. Nagłówek strony odsyłającej nie jest ustawiony podczas łączenia ze strony https do strony http. Od http://en.wikipedia.org/wiki/HTTP_referrer

Jeśli dostęp do strony internetowej uzyskuje się za pomocą połączenia HTTP Secure (HTTPS), a łącze prowadzi do dowolnego miejsca z wyjątkiem innej bezpiecznej lokalizacji, pole odsyłające nie jest wysyłane.

Wolałbym, inne domeny można zobaczyć odnośnika zwrotnego tak, że oni wiedzą, że ruch pochodzi z mojej domeny. Czy istnieje sposób na wymuszenie tego nagłówka lub istnieje inne rozwiązanie?

Aktualizacja

Przeprowadziłem podstawowe testy przy użyciu przekierowania:

http page  -- link to http  --> 301 redirect --> http page = referrer intact
https page -- link to https --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 302 redirect --> http page = referrer blank

Odsyłacz zostaje utracony podczas łączenia ze strony https ze stroną przekierowującą http w mojej własnej domenie. Dlatego na przekierowaniu nie ma strony odsyłającej.

orzechówka
źródło
OriginPowinien być w stanie nienaruszonym, nie może zmieścić się na przypadek użycia chociaż.
Pacerier

Odpowiedzi:

8

Też miałem ten sam problem. Rozwiązuję, dodając metatag, jak poniżej, i będzie działał tylko w Chrome i Safari.

<meta name="Referrer" content="origin">
Mahendran Sakkarai
źródło
6

Niestety nie można odwoływać się przez HTTPS do stron korzystających z HTTP. Możesz jednak zrobić HTTPS na HTTPS lub HTTP na HTTPS.

ŹRÓDŁO

Klienci NIE POWINNI zawierać pola nagłówka odsyłacza w (niezabezpieczonym) żądaniu HTTP, jeśli strona odsyłająca została przesłana za pomocą bezpiecznego protokołu.

Rozwiązaniem byłoby użycie wewnętrznego skryptu przekierowującego, który zamiast przekierowywać do gościa na HTTPS przekierowuje na HTTP, a następnie przekierowuje.

Na przykład:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a> ale to nie użyłoby oryginalnej strony odsyłającej.

Inną możliwością jest użycie trackbacków zamiast odsyłaczy i, o ile wiem, działa to w HTTPS.

Simon Hayter
źródło
Moje testy wykazały, że użycie przekierowania nie działa (patrz aktualizacja).
dziadek do orzechów
Użyj trackbacków lub zgub HTTPS;)
Simon Hayter
1
@bybe, Ta odpowiedź wymaga edycji. Zobacz serverfault.com/a/520603/87017 i webmasters.stackexchange.com/a/71331/7654
Pacerier
4

Byłem w stanie skonfigurować link ze strony HTTPS do strony HTTP w innej domenie i nadal przekazywać adres URL pierwszej strony jako strony odsyłającej, stosując następującą technikę.

Definicje

Strona początkowa : strona HTTPS, na której znajduje się link do strony docelowej hostowanej przez HTTP. W tym przykładzie:https://example1.com/origin.html

Strona docelowa: strona HTTP, która ma dostęp do strony odsyłającej strony początkowej. W tym przykładzie:http://example2.com/destination.html

Podstawowy plan

Powoduje to, że przekierowanie pochodzi ze strony HTTP strony początkowej:

  1. Łącze na stronie początkowej HTTPS prowadzi do bieżącej strony, ale dodaje parametr zapytania do strony docelowej [1]. na przykład:https://example1.com/origin.html?goto=http://example2.com/destination.html

  2. Po kliknięciu łącza serwer w example1.com przerywa standardowe żądanie, gdy obecny jest parametr zapytania „goto”. To wtedy:

    • Przechowuje parametr „goto” w pliku cookie „goto”.
    • Usuwa parametr „goto” i wartość z adresu URL bieżącego żądania
    • 302 przekierowuje do tego nowego oczyszczonego adresu URL w wersji HTTP domeny źródłowej, tj. http://example1.com/origin.html
  3. Serwer sprawdza każde żądanie pod kątem pliku cookie „goto”, a jeśli jest obecny, usunie plik cookie, a następnie wyświetli bardzo prostą stronę przekierowania. Ta strona zawiera [2]:

    • Skrypt window.location.replace () JavaScript, który przekierowuje do adresu URL goto cookie.
    • Tag Meta Refresh z wartością adresu URL goto cookie i opóźnieniem kilku sekund.
    • Link do adresu URL pliku cookie goto.

Notatki

[1] To podstawowe rozwiązanie to otwarty readresator i należy rozważyć ochronę przed złymi facetami używającymi parametru zapytania goto do przekierowywania UA w atakach phishingowych.

[2] Nie wszystkie przeglądarki wysyłają stronę odsyłającą podczas przekierowywania za pomocą przekierowania JS lub znacznika odświeżania meta. W moich testach IE8 i niższe nie przechodzą polecającego.

Nie jestem pewien, czy ta technika pozwoli robotom wyszukiwarek na podążanie za linkami. To nie jest ważne dla moich wymagań.

Jeśli UA ma wyłączone pliki cookie, spowoduje to ponowne przekierowanie do strony początkowej.

Zezwalanie na połączenia HTTP tylko dla przekierowań

Na moim serwerze mam regułę Apache do wymuszania HTTPS niezależnie od żądania:

<VirtualHost *:80>
    ServerName example1.com

    # if not on port 443 then 301 redirect to https while keeping any query string
    RewriteEngine              On
    RewriteCond %{HTTP_HOST}  ^example1\.com$ [NC]
    RewriteCond     %{SERVER_PORT} !443
    RewriteRule     ^(.*)$     https://%{HTTP_HOST}$1 [L,QSA,R=301]

Aby powyższa technika przekierowania działała, potrzebuję jakiegoś sposobu warunkowego zezwolenia na połączenia HTTP. Istnieje wiele sposobów, aby to zrobić. Uznałem, że ciasteczko będzie działać.

<VirtualHost *:80>
    ServerName example1.com

    # if not on port 443 then 301 redirect to https while keeping any query string
    RewriteEngine              On
    RewriteCond %{HTTP_HOST}  ^example1\.com$ [NC]
    RewriteCond     %{SERVER_PORT} !443
    RewriteCond %{HTTP_COOKIE}  !disable_ssl [NC]
    RewriteRule     ^(.*)$     https://%{HTTP_HOST}$1 [L,QSA,R=301]

Plik cookie disable_ssl zostanie ustawiony w kroku 2, a następnie usunięty w kroku 3.

orzechówka
źródło
Ok .... ale to nie do końca przekazuje „ nagłówek polecającego ”.
Pacerier
0

Wygląda na to, że to, czego chcesz, nie jest możliwe, więc możliwe obejście; jeśli strona docelowa korzysta z Google Analytics (lub kompatybilnego programu, uważam, że Piwik używa podobnej składni, a inne pakiety statystyk byłyby głupie, aby to zignorować), możesz wysłać parametry śledzenia, np. w linku do example.com

http://www.example.com/?utm_campaign=spring&utm_medium=referral&utm_source=exampleblog

pojawi się to w ich GA wraz ze szczegółami, upewnij się, że wybierasz wartości, których jest mało prawdopodobne, aby ktokolwiek użył, abyś nie zmuszał ich do konfliktów / ani nie ukrywał swojego ruchu za kimś innym

Google ma przydatne narzędzie do tworzenia adresów URL tutaj http://support.google.com/analytics/answer/1033867?hl=pl

Aktualizacja - dotyczy: etykiety

Nie wiedząc więcej o charakterze ruchu, mogę mówić tylko ogólnie / osobiście ...

etykieta zawsze będzie w oku patrzącego. Bez tego myślę, że w GA przynajmniej prawdopodobnie pojawiłby się jako bezpośredni, a może (żaden zestaw) wypaczyłby ich liczby, aby wyglądać, jakby ich marka była większa niż jest. Osobiście wolę starannie wybraną kampanię, aby wiedzieć, skąd pochodzi ruch.

Możesz także spojrzeć na to, ponieważ jeśli prawie nie wysyłasz żadnego ruchu, prawdopodobnie nie zauważą, jeśli wyślesz ich dużo, prawdopodobnie nie będą narzekać! Jeśli tak, to zwykle można znaleźć kogoś innego, kto da darmowy ruch!

a jeśli jesteś bardzo konkretny, nie powinno to powodować problemów; kampania jako nazwa Twojej witryny i źródło jako może jej sekcja?

http://www.example.com/?utm_campaign=mygreatsite.com&utm_medium=referral&utm_source=specialoffers
CodeMonkey
źródło
Dobry pomysł! Zastanawiałem się nad tym obejściem, ale zastanawiałem się, czy były to jakieś „zasady” dotyczące wdrażania tego z mojego końca. Zwykle te parametry zapytań są dodawane przez witrynę zewnętrzną, aby mogli śledzić swoje kampanie itp. Czy takie podejście byłoby w jakikolwiek sposób uznane za złą praktykę?
dziadek do orzechów