(Jak) Czy strona internetowa może ustalić, czy prywatne przeglądanie Safari jest włączone?

11

W przeglądarce Safari na Mavericks czasami pojawia się okno dialogowe ze stron internetowych wskazujące, że niektóre funkcje strony będą blokowane lub obniżane, chyba że wyłączę tryb przeglądania prywatnego. Większość użytkowników prawdopodobnie oczekuje, że wybór prywatnego przeglądania będzie prywatny. Mam wrażenie, że inne główne przeglądarki nie wyciekają z trybu przeglądania prywatnego na strony internetowe.

Zauważyłem, że w trybie przeglądania prywatnego Safari nie żąda ulubionych, więc teoretycznie strona może blokować buforowanie ulubionych i zgadywać, że przeglądanie prywatne jest włączone.

W przeciwieństwie do iOS, Safari w ogóle nie żąda ulubionych. Ale nawet w trybie przeglądania prywatnego poprosi o dowolną „ikonę dotyku jabłka”, jeśli uzyskasz dostęp do panelu Udostępnianie (ikona dotyku jabłka jest używana jako ikona ekranu głównego, jeśli następnie „Dodaj do ekranu głównego” w tym celu URL).

Czy oprócz favicon istnieją inne znane sposoby, za pomocą których witryna internetowa może określić (lub zgadnąć z odpowiednią dokładnością), że używasz trybu przeglądania prywatnego w przeglądarce Safari na komputerze?

pseudon
źródło
Czy możesz podać przykładową stronę internetową?
sayzlim
np. video.pbs.org „Wystąpił błąd. Aby uzyskać najlepszą jakość korzystania z tej witryny, sprawdź, czy prywatne przeglądanie jest wyłączone”.
pseudon
Możliwe, że witryna internetowa wyłączy jakiś inny czynnik, taki jak DNT = 1 lub blokowanie modułu śledzącego. W takim przypadku komunikat o błędzie wprowadza w błąd. Ale dostałem coś podobnego na innych stronach.
pseudon
1
Właśnie przetestowałem DNT i rozszerzenia blokujące, a te nie wydają się być czynnikiem. W trybie przeglądania prywatnego z wyłączonymi wszystkimi rozszerzeniami i wyłączonymi DNT nadal pojawia się okno dialogowe błędu. Ale przy wyłączonym przeglądaniu prywatnym i włączonym DNT = 1 i (blokujących) rozszerzeniach nie pojawia się błąd.
pseudon
Dlaczego nie chcesz, aby strona wiedziała, że ​​jesteś w trybie prywatności? Nasza aplikacja internetowa będzie całkowicie niefunkcjonalna w tej konfiguracji, ponieważ polegamy w dużej mierze na indexeddb, pamięci podręcznej aplikacji, lokalnej pamięci masowej, pracownikach internetowych i wielu innych funkcjach HTML5, które po prostu nie są dostępne w trybie prywatności. To, o co prosisz, to sposób na powstrzymanie nas przed informowaniem użytkowników, że skonfigurowali przeglądarkę, aby nasza aplikacja internetowa nie działała. Jaka jest tego wartość? (Jeśli nie rozumiesz, dlaczego to nie ma sensu, po prostu zrelaksuj się. Witryna nie
zna Cię

Odpowiedzi:

14

W systemie iOS lokalna pamięć HTML5 nie jest dostępna w trybie przeglądania prywatnego, co oznacza, że ​​można ją wykryć, próbując zapisać coś w pamięci lokalnej i przechwycić wyjątek za pomocą następującego kodu JavaScript:

try { localStorage.test = 2; } catch (e) {
  alert('You are in Private Browsing mode');
}

Zmodyfikowano z https://stackoverflow.com/a/17741714/

W systemie OS X tak naprawdę nie ma metody kanonicznej, ale powinna ona dostarczyć użytecznych informacji:

Jeśli szukasz wskazówek dotyczących implementacji, prawdopodobnie powinieneś zamiast tego spróbować przepełnienia stosu

grg
źródło
Dzięki. Interesuje mnie implementacja po stronie serwera tylko w takim stopniu, w jakim pomaga mi to w obronie przed czarną
magią
2
Uważaj jednak na fałszywe alarmy - dostarczony fragment kodu JavaScript pokazuje również alert w trybie nieprywatnym, jeśli lokalna blokada pamięci dla tego źródła jest pełna.
Mathias Bynens
4

Prywatne przeglądanie w Safari nie działa w taki sam sposób jak prywatne przeglądanie w innej przeglądarce .

Na przykład tryb incognito w Chrome tworzy osobną nową sesję, w której wszystkie dane zostaną usunięte po sesji przeglądania (strona internetowa nadal może śledzić twoje działania z adresu IP w tym trybie).

Podczas gdy Safari zabrania stronie internetowej tworzenia / zapisywania plików lokalnie, odrzuć wszystkie zmiany dokonane w plikach cookie, w tym Twoje działania w przeglądarce podczas tej sesji przeglądania (strona internetowa może nadal śledzić Twoją aktywność w tym trybie, z wyjątkiem tego, że zapisały pliki cookie w tej sesji zostać odrzucone).

Skąd więc strona internetowa wie, czy włączyłeś przeglądanie prywatne? Ponieważ sprawdza, czy może zapisywać pliki lokalnie .

sayzlim
źródło
Safari zezwala jednak na pliki cookie w ramach sesji przeglądania prywatnego, prawda? Jestem w stanie zalogować się na stronach internetowych podczas Prywatnego przeglądania i robić wszystko, co zwykle, i nie spotkałem się z żadnymi ograniczeniami, z wyjątkiem rzadkich przypadków, w których pojawia się takie okno dialogowe.
pseudon
Tak, nieco zmodyfikowałem moją odpowiedź. Mam na myśli, że pliki cookie podczas tej sesji nie są zapisywane po wyłączeniu przeglądania prywatnego.
sayzlim