2011-02-17 14 views
34

Mam stronę, na której nie chcę, aby linki wychodzące wysyłały stronę odsyłającą, aby witryna docelowa nie wiedziała, skąd pochodzą.Zatrzymaj łącze, wysyłając stronę odsyłającą do miejsca docelowego.

Zgaduję, że nie jest to możliwe, ale chcę się upewnić, że nie ma żadnej ukrytej magii javascript, która mogłaby to zrobić i która działałaby z niektórymi (jeśli nie większością) przeglądarkami.

Może jakiś sprytny kod statusu HTTP przekierowujący kung-fu?

Coś takiego byłoby idealne

<a href="example.com" send_referrer="false">link</a> 

Odpowiedz

4

Próbowałem to również zrozumieć.

Rozwiązanie, o którym myślałem, to użycie adresu URL danych, aby ukryć rzeczywistą stronę, z której pochodzę.

<a href='data:text/html;charset=utf-8, <html><script>window.location = "http://google.ca";</script></html>'>Link</a> 

Ten odnośnik otwiera stronę, która zawiera javascript do załadowania innej strony. Podczas moich testów nie ma strony odsyłającej do miejsca docelowego. Nie wiem, co może wysłać jako strona odsyłająca, jeśli mimo to próbował, może adres URL danych? który nie zdradziłby skąd przyszedłeś.

To działa w przeglądarce Chrome. Chrome jest moją jedyną troską o mój obecny problem, ale dla przeglądarek, które nie lubią javascript na stronach będących adresami danych. Prawdopodobnie możesz spróbować odświeżania meta.

+0

Działa w chromie. Niestety nie w firefox. – zaius

8

Bigmack jest na dobrej drodze, ale zmiana lokalizacji javascript nadal wysyła stronę odsyłającą w firefoxie. Używanie metaodświeżania wydaje mi się rozwiązaniem problemu.

<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://google.com/&#39;"></html>'>Link</a> 
+0

Uważam, że to właśnie robi Google dla linków w Gmailu - kliknięcie łącza i przejście do pustej strony śledzenia google z meta odświeżeniem do oryginalnego klikniętego łącza. – wezell

25

HTML 5 zawiera rel="noreferrer", który jest supported in all major browsers. Więc dla tych przeglądarek, można po prostu napisać:

<a href="example.com" rel="noreferrer">link</a> 

Jest też podkładka dostępna dla innych przeglądarek: https://github.com/knu/noreferrer

+4

Podpowiedź tego podkładki zależy od $ .browser, która jest przestarzała. –

34

dla każdego, kto odwiedza w 2015 roku i później dostępne jest odpowiednie rozwiązanie, które zyskuje wsparcie.

HTTP Referrer Policy Spec pozwala kontrolować wywołującej wysyłania linków i subresources (zdjęcia, skrypty, arkusze stylów, itp) i, w tej chwili, to supported na Firefox, Chrome i Opera.

<meta name="referrer" content="no-referrer"> 

(i starsza wersja specyfikacji jest obsługiwany przez Microsoft Edge i Safari, ale jeszcze nie znaleźli sposób przetestowane pracujących je nakarmić starej składni podczas karmienia wszystkiego innego nową składnię.)

Ponadto, jeśli chcesz, aby zastosować go do audio, img, link, script i video tagów odwołujących zasobów, które wymagają CORS, nie zapomnij również ustawić atrybut crossorigin="anonymous" na nich tak tylko absolutne minimum (the Origin nagłówek) zostaną udostępnione.

(Nie można pozbyć się z nagłówka Origin podczas korzystania CORS ponieważ odległe strony muszą wiedzieć, jakie domeny składające wniosek, aby umożliwić lub zablokować go.)

+0

Uwaga: w przeglądarce Chrome występuje następujący błąd: 'Nie udało się ustawić zasad strony odsyłającej: wartość" none "nie jest wartością" zawsze "," domyślnie "," nigdy "," nieodsyłający "," nieodsyłający-gdy-downgrade " "," origin "," origin-when-crossorigin "lub" unsafe-url ". Zasady przekazywania odwołań tego dokumentu pozostały niezmienione. Wspomniana "żadna" wersja vaue wydaje się niepoprawna. –

+1

@ TomPažourek Dzięki. Myślę, że to stara składnia. Nie wiem, jak to się stało, że go użyłem. – ssokolow

+0

Wciąż jest kilka przeglądarek, które przekazują odnośnik z proponowanym metatagiem. Czy istnieje lepszy sposób na przerwanie wysyłania odnośnika do DOWOLNEJ przeglądarki? Czy pomogłoby użycie "noopener"? – Alex

0

W uzupełnieniu do informacji już opatrzony. Wiele więcej informacji na ten temat tutaj: https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer

W szczególności umożliwia wysyłanie lub nie wysyłanie informacji o poleceniach, jeśli potrzebujesz innych reguł dla żądań o tym samym lub różnych pochodzeniu.

Coś do rozważenia w zależności od konkretnego przypadku użycia. np. jeśli pobierasz obrazy/css/javascript ze stron internetowych osób trzecich, możesz nie chcieć identyfikować adresu URL, z którego to robisz, a zatem użyć opcji bez odsyłacza. Natomiast jeśli łączysz się z innymi witrynami z własnej strony internetowej, możesz chcieć, aby wiedzieli, że przesyłasz im ruch. Zawsze rozważaj konsekwencje tego po obu stronach. Jeśli występuje konflikt w tych dwóch obszarach, istnieją inne opcje, takie jak dodanie parametrów śledzenia UTM na końcu adresów URL, co może być przydatne dla niektórych osób. Pełne informacje tutaj: https://www.contradodigital.com/2014/06/03/importance-utm-tracking-parameters-social-media/

Powiązane problemy