Mam dwie strony internetowe, powiedzmy, że są example.com
i anotherexample.net
. On anotherexample.net/page.html
mam IFRAME SRC="http://example.com/someform.asp"
. Ten IFRAME wyświetla formularz do wypełnienia i przesłania przez użytkownika http://example.com/process.asp
. Kiedy otwieram formularz („ someform.asp
”) w jego własnym oknie przeglądarki, wszystko działa dobrze. Jednak gdy ładuję someform.asp
jako IFRAME w IE 6 lub IE 7, pliki cookie na przykład.com nie są zapisywane. W przeglądarce Firefox ten problem się nie pojawia.
Dla celów testowych stworzyłem podobną konfigurację na stronie http://newmoon.wz.cz/test/page.php .
example.com
korzysta z sesji opartych na plikach cookie (i nic nie mogę na to poradzić), więc bez plików cookie process.asp
nie można ich uruchomić. Jak zmusić IE do zapisywania tych plików cookie?
Rezultaty wąchania ruchu HTTP: w odpowiedzi GET /someform.asp jest prawidłowy nagłówek Set-Cookie na sesję (np. Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY
), Ale w żądaniu POST /process.asp w ogóle nie ma nagłówka Cookie.
Edycja3: niektóre skrypty na serwerze AJAX + najwyraźniej są w stanie ominąć problem, ale wygląda to bardzo podobnie do błędu, a ponadto otwiera całkiem nowy zestaw luk bezpieczeństwa . Nie chcę, aby moje aplikacje korzystały z kombinacji błędu + dziura w zabezpieczeniach tylko dlatego, że jest to łatwe.
Edycja: główną przyczyną była polityka P3P , pełne wyjaśnienie poniżej.
źródło
Odpowiedzi:
Mam to do pracy, ale rozwiązanie jest trochę skomplikowane, więc proszę o wyrozumiałość.
Co się dzieje
W tej chwili Internet Explorer zapewnia niższy poziom zaufania stronom IFRAME (IE nazywa tę treść „strony trzeciej”). Jeśli strona w ramce IFRAME nie ma Polityki prywatności, jej pliki cookie są blokowane (co wskazuje ikona oka na pasku stanu, po kliknięciu wyświetla listę zablokowanych adresów URL).
(źródło: piskvor.org )
W takim przypadku, gdy pliki cookie są blokowane, identyfikator sesji nie jest wysyłany, a skrypt docelowy zgłasza błąd „nie znaleziono sesji”.
(Próbowałem ustawić identyfikator sesji w formularzu i załadować go ze zmiennych POST. To by działało , ale z powodów politycznych nie mogłem tego zrobić).
Możliwe jest zwiększenie zaufania strony w ramce IFRAME: jeśli strona wewnętrzna wyśle nagłówek P3P z polityką prywatności akceptowaną przez IE, pliki cookie zostaną zaakceptowane .
Jak to rozwiązać
Utwórz zasadę p3p
Dobrym punktem wyjścia jest samouczek W3C . Przeszedłem przez to, pobrałem edytor polityki prywatności IBM i tam stworzyłem reprezentację polityki prywatności i nadałem jej nazwę, do której można się odwoływać (tutaj była
policy1
).UWAGA : w tym momencie faktycznie musisz dowiedzieć się, czy Twoja witryna ma politykę prywatności, a jeśli nie, utwórz ją - czy gromadzi dane użytkownika, jakie dane, co z nią robi, kto ma do niej dostęp, itp. Musisz znaleźć te informacje i przemyśleć je. Samo uderzenie w kilka tagów nie spowoduje ich odcięcia. Ten krok nie może być wykonany wyłącznie w oprogramowaniu i może być wysoce polityczny (np. „Czy powinniśmy sprzedawać nasze statystyki kliknięć?”).
(np. „strona jest obsługiwana przez ACME Ltd., do jej działania używa anonimowych identyfikatorów poszczególnych sesji, gromadzi dane użytkownika tylko, jeśli jest to wyraźnie dozwolone i tylko w następujących celach, dane są przechowywane tylko tak długo, jak to konieczne, tylko nasza firma ma do niego dostęp itp. ”).
(Podczas edycji za pomocą tego narzędzia możliwe jest przeglądanie błędów / pominięć w polityce. Bardzo przydatna jest również karta „Polityka HTML”: u dołu znajduje się „Ocena polityki” - szybkie sprawdzenie, czy polityka zostanie zablokowana przez domyślne ustawienia IE)
Edytor eksportuje do pliku .p3p, który jest reprezentacją XML powyższej polityki. Może także eksportować „wersję kompaktową” tych zasad.
Link do polityki
Następnie
http://example.com/w3c/p3p.xml
potrzebny był plik polityki odniesienia ( ) (indeks zasad prywatności, z których korzysta strona):Te
<INCLUDE>
pokazy wszystkie URI, które korzystają z tej polityki (w moim przypadku, całe strony). Plik zasad, który wyeksportowałem z edytora, został przesłany dohttp://example.com/w3c/example-com.p3p
Wyślij zwarty nagłówek z odpowiedziami
Ustawiłem serwer internetowy w przyklad.com, aby wysyłał kompaktowy nagłówek z odpowiedziami:
policyref
jest względnym identyfikatorem URI w stosunku do pliku polityki odniesienia (który z kolei odwołuje się do polityki prywatności),CP
jest zwartą reprezentacją polityki. Pamiętaj, że kombinacja nagłówków P3P w tym przykładzie może nie mieć zastosowania w Twojej konkretnej witrynie; Twoje nagłówki P3P MUSZĄ zgodnie z prawdą reprezentować Twoją własną politykę prywatności!Zysk!
W tej konfiguracji Evil Eye nie pojawia się, pliki cookie są zapisywane nawet w ramce IFRAME, a aplikacja działa.
Edycja: Czego NIE robić, chyba że lubisz bronić się przed procesami sądowymi
Kilka osób zasugerowało „po prostu uderz kilka tagów w nagłówek P3P, dopóki złe oko się nie podda”.
Tagi to nie tylko kilka bitów, mają znaczenie w świecie rzeczywistym , a ich użycie daje obowiązki w świecie rzeczywistym !
Na przykład udawanie, że nigdy nie gromadzisz danych użytkownika, może uszczęśliwić przeglądarkę, ale jeśli faktycznie gromadzisz dane użytkownika, P3P jest w konflikcie z rzeczywistością. Jasne i proste, celowo okłamujesz użytkowników , co może być przestępstwem w niektórych krajach. Na przykład „idź do więzienia, nie zbieraj 200 $”.
Kilka przykładów ( zobacz p3pwriter dla pełnego zestawu tagów ):
STP
, ale nie mają polityki retencji, to może być popełnienie oszustwa. Jak jest cool? Wcale nie.)Nie jestem prawnikiem, ale nie chcę iść do sądu, aby sprawdzić, czy nagłówek P3P jest naprawdę prawnie wiążący lub czy możesz obiecać użytkownikom coś bez faktycznej chęci dotrzymania twoich obietnic.
źródło
Dużą część dnia spędziłem na analizowaniu tego P3P i czuję potrzebę dzielenia się tym, co odkryłem.
Zauważyłem, że koncepcja P3P jest bardzo przestarzała i wydaje się, że jest naprawdę używana / egzekwowana przez Internet Explorer (IE).
Najprostsze wyjaśnienie to: IE chce, abyś zdefiniował nagłówek P3P, jeśli używasz plików cookie.
To fajny pomysł i na szczęście przez większość czasu nie podanie tego nagłówka nie spowoduje żadnych problemów (przeczytaj ostrzeżenia przeglądarki). Chyba że twoja strona internetowa / aplikacja internetowa jest załadowana na inną stronę internetową przy użyciu (i) ramki. To tutaj IE staje się ogromnym bólem w ***. Nie pozwoli ci ustawić ciasteczka, chyba że ustawiony jest nagłówek P3P.
Wiedząc o tym, chciałem znaleźć odpowiedź na następujące dwa pytania:
Moje ustalenia to:
Koncepcja narodziła się w 2002 roku i dziwi mnie, że ta przestarzała i prawnie niezrealizowana koncepcja jest wciąż wymuszana na programistach w IE. Jeśli ten nagłówek nie ma żadnych prawnych konsekwencji, należy go zignorować (lub ewentualnie wygenerować ostrzeżenie lub powiadomienie w konsoli). Niewymuszone! Jestem teraz zmuszony wstawić wiersz do mojego kodu (i wysłać nagłówek do klienta), który absolutnie nic nie robi.
Krótko mówiąc - aby IE był szczęśliwy - dodaj następujący wiersz do kodu PHP (inne języki powinny wyglądać podobnie)
Problem rozwiązany, a IE jest zadowolony z tego ziemniaka.
źródło
Potato
mojego P3P rozwiązało to. ha ha!Byłem w stanie sprawić, że złe oko zniknęło, po prostu dodając ten mały nagłówek do strony w IFrame (rozwiązanie PHP):
Pamiętaj, aby nacisnąć Ctrl + F5 aby ponownie załadować witrynę. W przeciwnym razie Eksplorator może nadal pokazywać złe oko, mimo że działa dobrze. Jest to prawdopodobnie główny powód, dla którego miałem tak wiele problemów z uruchomieniem go.
Żaden plik polisy w ogóle nie był konieczny.
Edycja: Znalazłem fajny wpis na blogu, który wyjaśnia problem z plikami cookie w ramkach IFrame. Ma również szybką poprawkę w kodzie C #: ramki, strony ASPX i odrzucone pliki cookie
źródło
CP="This_is_not_a_privacy_policy"
. Wydaje mi się, że robi to mniej prawnie wiążące (ponieważ np. Wspomniano o NOI i STP i nic takiego się nie mówi) i najwyraźniej cieszy IE :-)Jest to zakopane w komentarzach do innych odpowiedzi, ale prawie o tym zapomniałem, więc wydaje się, że zasługuje na własną odpowiedź.
Aby przejrzeć: aby IE mógł zaakceptować pliki cookie innych firm, musisz podać swoje pliki z nagłówkiem http o nazwie p3p w formacie:
ALE, p3p jest w tej chwili prawie martwy jako standard i możesz łatwo uruchomić IE bez inwestowania czasu i zasobów prawnych w tworzenie prawdziwej polityki p3p. Wynika to z faktu, że jeśli nagłówek zwartej polityki p3p jest nieprawidłowy, IE faktycznie traktuje ją jako dobrą politykę i akceptuje pliki cookie innych firm. Możesz więc użyć takiego nagłówka p3p
Opcjonalnie możesz dołączyć link do strony wyjaśniającej, dlaczego nie masz zasad p3p, podobnie jak Google i Facebook (wskazują tutaj: https://support.google.com/accounts/answer/151657 i tutaj: https : //www.facebook.com/help/327993273962160/ ).
Na koniec ważne jest, aby pamiętać, że wszystkie pliki obsługiwane z witryny innej firmy muszą mieć nagłówek p3p, a nie tylko ten, który ustawia plik cookie, więc możesz nie być w stanie tego zrobić w PHP, asp.net itp. kod. Prawdopodobnie lepiej jest skonfigurować na poziomie serwera WWW (tj. W IIS lub Apache).
źródło
Miałem również ten problem, myślałem, że opublikuję kod, którego użyłem w moim projekcie MVC2. Uważaj, gdy w cyklu życia strony dodasz nagłówek, bo otrzymasz wyjątek HttpException „ Serwer nie może dołączyć nagłówka po wysłaniu nagłówków HTTP ”. Użyłem niestandardowego ActionFilterAttribute w metodzie OnActionExecuting (wywoływanej przed wykonaniem akcji).
Przykładowe zastosowanie:
źródło
To świetny temat na ten temat, jednak odkryłem, że jednym ważnym szczegółem (który był niezbędny przynajmniej w moim przypadku), który nie został opublikowany tutaj ani nigdzie indziej (przepraszam, jeśli właśnie go przegapiłem) było to, że linia P3P musi być przekazywane w nagłówku KAŻDEGO pliku wysłanego z serwera innej firmy, nawet pliki, które nie ustawiają ani nie używają plików cookie, takich jak pliki JavaScript lub obrazy. W przeciwnym razie pliki cookie zostaną zablokowane. Mam więcej na ten temat w poście tutaj: http://posheika.net/?p=110
źródło
Każdy, kto ma ten problem w node.js.
Następnie dodaj ten moduł p3p i włącz ten moduł w oprogramowaniu pośrednim.
Korzystam z ekspresu, więc dodaję go w app.js
Najpierw wymagaj tego modułu w app.js
następnie użyj go jako oprogramowania pośredniego
Dodaje nagłówki p3p w obiekcie res. Nie musisz robić żadnych dodatkowych rzeczy.
Otrzymasz więcej informacji na:
https://github.com/troygoode/node-p3p
źródło
Jeśli ktoś szuka linii Apache; użyliśmy tego.
Tak naprawdę nie miało znaczenia, na co ustawiamy wartość CP, o ile istnieje nagłówek P3P.
źródło
Jedną z możliwości jest dodanie domeny do dozwolonych witryn w narzędziach -> opcje internetowe -> prywatność -> strony: somedomain.com -> zezwól -> OK.
źródło
Ten post zawiera komentarz do P3P i skrótowe rozwiązanie, które zmniejsza problemy z IE7 i IE8.
źródło
Jednym z rozwiązań, o którym nie wspomniałem tutaj, jest użycie pamięci sesji zamiast plików cookie. Oczywiście może to nie spełniać wymagań wszystkich, ale w niektórych przypadkach jest to łatwa naprawa.
źródło
Badałem ten problem w odniesieniu do wylogowywania za pośrednictwem usług Azure Access Control Services i nie byłem w stanie połączyć żadnych elementów.
Następnie natknąłem się na ten post https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/
Krótko mówiąc, IE nie udostępnia plików cookie między strefami (np. Internet vs. Zaufane strony).
Więc jeśli twój cel IFrame i strona HTML są w innej strefie, P3P nie pomoże w niczym.
źródło
Mam podobny problem, również poszedłem zbadać, jak wygenerować polisę P3P dziś rano, oto mój post o tym, jak wygenerować własną polisę i korzystać z niej na stronie internetowej :) http://everydayopenslikeaflower.blogspot.com/2009/08/ how-to-create-p3p-policy-and-implement.html
źródło
Wcześniej wdrożyłem pełną zasadę P3P, ale nie chciałem ponownie męczyć się z nowym projektem, nad którym pracowałem. Uznałem, że ten link jest przydatny do prostego rozwiązania problemu, a jedynie do określenia minimalnej kompaktowej zasady P3P „CAO PSA OUR”:
http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html
Artykuł cytuje (teraz zepsuty) link do artykułu Microsoft KB. Polityka załatwiła sprawę!
źródło
Możesz także łączyć pliki p3p.xml i policy.xml jako takie:
/home/ubuntu/sites/shared/w3c/p3p.xml
Odkryłem, że najłatwiejszym sposobem dodania nagłówka jest proxy przez Apache i użycie mod_headers jako takich:
W związku z tym przekazujemy wszystkie żądania z wyjątkiem tych do /w3c/p3p.xml do naszego serwera aplikacji.
Możesz to wszystko przetestować za pomocą walidatora W3C
źródło
Jeśli jesteś właścicielem domeny, która musi zostać osadzona , przed wywołaniem strony zawierającej ramkę IFrame możesz przekierować do tej domeny, która utworzy plik cookie i przekieruje z powrotem, jak wyjaśniono tutaj: http: //www.mendoweb. be / blog / internet-explorer-safari-Third-party-cookie-problem /
Działa to zarówno w przeglądarce Internet Explorer, jak i Safari (ponieważ Safari blokuje również pliki cookie innych firm).
źródło
Wiem, że jest trochę za późno, aby wnieść swój wkład w ten temat, ale straciłem tyle godzin, że może ta odpowiedź komuś pomoże.
Próbowałem wywołać plik cookie innej firmy w mojej witrynie i oczywiście nie działał on w przeglądarce Internet Explorer 10, nawet przy niskim poziomie bezpieczeństwa ... nie pytaj mnie dlaczego. W ramce iframe dzwoniłem do read_cookie.php (echo $ _COOKIE) przy pomocy ajax.
I nie wiem, dlaczego nie byłem w stanie ustawić zasad P3P, aby rozwiązać problem ...
Podczas wyszukiwania widziałem coś na temat uruchomienia ciasteczka w JSON. Nawet nie próbuję, ponieważ myślałem, że jeśli plik cookie nie przejdzie przez element iframe, nie przejdzie już przez tablicę ...
Zgadnij co to robi! Więc jeśli json_kodujesz swoje ciasteczko, a następnie dekodujesz po żądaniu ajax, dostaniesz je!
Może jest coś, za czym tęskniłem, a jeśli tak, przepraszam, ale nigdy nie widziałem czegoś tak głupiego. Zablokuj pliki cookie stron trzecich w celu zapewnienia bezpieczeństwa, dlaczego nie, ale pozwól im przejść, jeśli są zakodowane? Gdzie jest teraz bezpieczeństwo?
Mam nadzieję, że ten post komuś pomoże, a jeśli coś mi umknęło i jestem głupi, proszę, naucz mnie!
źródło
To w końcu zadziałało dla mnie (po wielu pośpiechu i wygenerowaniu niektórych strategii za pomocą generatora strategii IBM). Możesz pobrać generator zasad tutaj: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml
Nie mogłem już pobrać generatora z oficjalnej strony IBM.
Te pliki utworzyłem w folderze głównym mojej aplikacji internetowej
źródło
W Rails używam tego klejnotu: https://github.com/merchii/rack-iframe Bawically ustawia zestaw skrótów bez pliku referencyjnego: https://github.com/merchii/rack-iframe/blob/master /lib/rack/iframe.rb#L8
Jest łatwy do zainstalowania, jeśli w ogóle nie obchodzi Cię znaczenie p3p.
źródło
Dla każdego, kto próbuje sprawić, by P3P Compact Policy działał z zawartością statyczną:
Jest to możliwe tylko wtedy, gdy możesz wysyłać niestandardowe nagłówki odpowiedzi po stronie serwera z zawartością statyczną.
Aby uzyskać bardziej szczegółowe wyjaśnienie, zobacz moją odpowiedź tutaj: Ustaw kod P3P w HTML
źródło
W Rails 3.2 używam:
Dostałem to od: http://dot-net-web-developer-bristol.blogspot.com/2012/04/setting-p3p-header-in-rails-session.html
źródło
Lepszym rozwiązaniem byłoby wywołanie Ajax wewnątrz elementu iframe do strony, która otrzyma / ustawi pliki cookie ...
źródło