Plik cookie zablokowany / niezapisany w IFRAME w Internet Explorerze

392

Mam dwie strony internetowe, powiedzmy, że są example.comi anotherexample.net. On anotherexample.net/page.htmlmam 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.aspjako 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.comkorzysta z sesji opartych na plikach cookie (i nic nie mogę na to poradzić), więc bez plików cookie process.aspnie 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.

Piskvor
źródło
dobre rozwiązanie rzeczywiście ... próbowałem utworzyć politykę prywatności .. dodałem do kontekstowego katalogu głównego ... i na mojej stronie jsp ustawiam nagłówek .. nadal nie mogę pozbyć się tego efektu czerwonych oczu .. możesz pomóc ja rozwiązuję problem ..
user902490 19.09.11
Dzięki za stronę demo @Piskvor, wspomniałem o
goodguys_activate 30.10.11
@ makerofthings7: YW. Przeprowadzę migrację do nie tymczasowej (sic!) Strony i zasugeruję edycję w Security.se, ta strona była nieco zhackowanym proof-of-concept.
Piskvor opuścił budynek
2
Nie zawracaj sobie głowy próbą uruchomienia P3P w Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). P3P w ogóle nie działa, więc bez względu na to, co robisz, pliki cookie nie zostaną zapisane. Dowód tutaj oraz enhie.com/test/cookie
puco

Odpowiedzi:

429

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).

diabelskie oko
(ź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.xmlpotrzebny był plik polityki odniesienia ( ) (indeks zasad prywatności, z których korzysta strona):

<META>
  <POLICY-REFERENCES>
    <POLICY-REF about="/w3c/example-com.p3p#policy1">
      <INCLUDE>/</INCLUDE>
      <COOKIE-INCLUDE/>
    </POLICY-REF>
  </POLICY-REFERENCES>
</META>

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:

HTTP/1.1 200 OK 
P3P: policyref="/w3c/p3p.xml", CP="IDC DSP COR IVAi IVDi OUR TST"
// ... other headers and content

policyrefjest względnym identyfikatorem URI w stosunku do pliku polityki odniesienia (który z kolei odwołuje się do polityki prywatności), CPjest 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 ):

  • NOI : „Witryna nie gromadzi zidentyfikowanych danych”. (jak tylko jest jakaś personalizacja, login lub dowolny zbiór danych (***** Analytics, anyone?), to należy uznać go w P3P)
  • STP : Informacje są przechowywane w celu osiągnięcia określonego celu. Wymaga to usunięcia informacji w możliwie najkrótszym czasie. Witryny MUSZĄ mieć zasady przechowywania, które określają harmonogram niszczenia. Warunki przechowywania muszą być włączone lub związany z polityką prywatności witryny czytelnej dla człowieka.”(Jeśli więc wysłać 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.

Piskvor
źródło
Byłem w 95% gotowy, ale mój nagłówek powiedział tylko: P3P: CP = "...." i nie zawierałem linku policyref, który sprawił, że działał w IE7, ale nie IE6 ... działa teraz dobrze. Dzięki!
AndreasKnudsen
4
Łącze do edytora IBM już nie działa. Poprzez The Wayback Machine udało mi się znaleźć ten działający link: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234
34
Kilka wiadomości na ten temat: -Bioletor można znaleźć na stronie: softpedia.com/get/Security/Security-Related/... -P3P wydaje się być „martwy”. Duże firmy takie jak Google i Facebook używają teraz nieprawidłowych nagłówków P3P, aby ominąć zabezpieczenia IE. Zobacz te posty: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/ ... techpolicy.com/…
Davide Icardi
7
Kolejna informacja, która może pomóc komuś z podobnym problemem: z moich testów, jeśli domeny znajdują się w różnych strefach bezpieczeństwa (na przykład firma zewnętrzna to internet, a firma trzecia to intranet), nie jest możliwe zaakceptowanie pliku cookie innej firmy, również jeśli P3P jest poprawnie skonfigurowany. Plik cookie jest zawsze blokowany.
Davide Icardi,
1
Należy zauważyć, że termin „strona trzecia” nie jest tak jasny, jak mogłoby się wydawać. Jeśli element iframe ma treść strony trzeciej w stosunku do otaczającej strony i ma ważną politykę prywatności, i przekierowuje do widoku w ramce iframe pochodzącej z witryny głównej, to o ile ten widok nie ma prawidłowej polityki prywatności, IE nie będzie zaufaj jego plikom cookie. Nawet jeśli ten widok pochodzi z tej samej strony, co ten zawierający iframe.
taryfy
168

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:

  1. Kogo to obchodzi? Innymi słowy, czy mogę zostać pozwany, jeśli w nagłówku wstawię słowo „Ziemniak”?
  2. Co robią inne firmy?

Moje ustalenia to:

  1. Nikogo to nie obchodzi. Nie mogę znaleźć ani jednego dokumentu, który sugerowałby, że ta technologia ma jakąkolwiek legalną wagę. Podczas moich badań nie znalazłem ani jednego kraju na świecie, który przyjąłby ustawę, która uniemożliwia wpisanie słowa „Ziemniak” w nagłówku P3P
  2. Zarówno Google, jak i Facebook umieszczają link w polu nagłówka P3P odnoszącym się do strony opisującej, dlaczego nie mają nagłówka P3P.

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)

header('P3P: CP="Potato"');

Problem rozwiązany, a IE jest zadowolony z tego ziemniaka.

Ruben
źródło
6
Rzeczywiście problem zmienił się znacznie od 2008 r., Kiedy został opublikowany. Sieć ruszyła dalej, a konsensus w sprawie P3P ustalił, że „nikogo już to nie obchodzi”. Dobrze wiedzieć, co robi IE z niepoprawnymi danymi wejściowymi w tym przypadku.
Piskvor opuścił budynek
19
O rany, to jeden z tych ukrytych klejnotów eksploratora Internetu! HttpContext.Current.Response.AddHeader („p3p”, „CP = \” Internet Explorer został zaprogramowany przez idiotów \ ””); Ten działa dla mnie!
Michiel Cornille
6
@Mvision Nie obwiniaj programistów, jest to raczej problem związany z prawnikami i zarządem? Domyślam się, że większość programistów zdała sobie sprawę, że ta funkcja zapewni rozwiązania typu ziemniaka :-)
KajMagnus
5
W przypadku ASP.Net możesz dodać to do konfiguracji sieci: „<system.webServer> <moduły obsługi> <httpProtocol> <customHeaders> <add name =" p3p "value =" CP = "Internet Explorer wymaga tego w celu Ustaw pliki cookie innych firm & quot; " /> </customHeaders> </httpProtocol> </handlers> </system.webServer> '
Rick Kierner
1
Och, to musi być wyższe! Spędziłem godziny próbując sprawić, by pliki cookie działały w elemencie iframe IE 11. Próbowanie różnego rodzaju kombinacji P3P i uzyskiwanie różnych wyników w zależności od typu / ważności pliku cookie. W końcu włożenie Potatomojego P3P rozwiązało to. ha ha!
dtbaker
55

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):

header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');

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

Helo
źródło
10
IANAL, ale polityka P3P wydaje się prawnie wiążąca. Czy zdajesz sobie sprawę z tego, co obiecujesz użytkownikom tutaj, czy po prostu wymieszałeś tagi, dopóki EvilEye nie zniknęło? Myślę, że buforowanie przeglądarki nie będzie Twoim największym problemem z tymi: „ NOI : Witryna internetowa nie gromadzi zidentyfikowanych danych. STP : Informacje są przechowywane w celu osiągnięcia określonego celu. Wymaga to, aby informacje zostały usunięte jak najszybciej. Witryny MUSZĄ mają zasady przechowywania, które określają harmonogram niszczenia. Zasady przechowywania MUSZĄ być zawarte lub połączone z polityką prywatności witryny czytelną dla człowieka. ”
Piskvor opuścił budynek
28
Muszę przyznać, że nie obchodzi mnie, co to znaczy, po prostu potrzebowałem rzeczy do pracy w Eksploratorze. Witryny są naszymi własnymi niepublicznymi witrynami, z których jedna używa pliku cookie, aby „zapamiętać” styl, w jakim strona ma się wyświetlać. Tak, tak, po prostu mieszałem tagi, aż zniknęło złe oko.
Helo,
Znalazłem ładny wpis na blogu, który wyjaśnia problem tutaj: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo
6
Rosnąca nieistotność P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Jeśli jest to prawnie wiążące, istniałoby pierwszeństwo w postępowaniu sądowym, udowadniając takie. Jest postrzegany z tak dużym szacunkiem, że wszyscy, oprócz jednego z moich konkurentów, nawet zawracają sobie głowę umieszczeniem jednego na pierwszym miejscu. Muszą pomyśleć, że jeśli ich klienci nie mogą pozostawić ustawienia IE na średnim poziomie, nie są tego warte. Straty sprzedaży w jednej witrynie musiałyby być dość wysokie, gdyby pliki cookie nie działały, koszyk umarłby bez nich.
Fiasco Labs
3
Ta odpowiedź sugeruje użycie fikcyjnego nagłówka, takiego jak 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 :-)
KajMagnus
21

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:

CP="my compact p3p policy"

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

CP="This site does not have a p3p policy."

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).

David Hammond
źródło
20

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).

/// <summary>
/// Privacy Preferences Project (P3P) serve a compact policy (a "p3p" HTTP header) for all requests
/// P3P provides a standard way for Web sites to communicate about their practices around the collection, 
/// use, and distribution of personal information. It's a machine-readable privacy policy that can be 
/// automatically fetched and viewed by users, and it can be tailored to fit your company's specific policies.
/// </summary>
/// <remarks>
/// More info http://www.oreillynet.com/lpt/a/1554
/// </remarks>
public class P3PAttribute : ActionFilterAttribute
{
    /// <summary>
    /// On Action Executing add a compact policy "p3p" HTTP header
    /// </summary>
    /// <param name="filterContext"></param>
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext.Current.Response.AddHeader("p3p","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

        base.OnActionExecuting(filterContext);
    }
}

Przykładowe zastosowanie:

[P3P]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}
daniellmb
źródło
14

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

Juris
źródło
5

Każdy, kto ma ten problem w node.js.

Następnie dodaj ten moduł p3p i włącz ten moduł w oprogramowaniu pośrednim.

npm install p3p

Korzystam z ekspresu, więc dodaję go w app.js

Najpierw wymagaj tego modułu w app.js

var express = require('express');
var app = express();
var p3p = require('p3p');

następnie użyj go jako oprogramowania pośredniego

app.use(p3p(p3p.recommended));

Dodaje nagłówki p3p w obiekcie res. Nie musisz robić żadnych dodatkowych rzeczy.

Otrzymasz więcej informacji na:

https://github.com/troygoode/node-p3p

Harshal_m_joshi
źródło
5

Jeśli ktoś szuka linii Apache; użyliśmy tego.

Zestaw nagłówka P3P „CP = \„ Thanks IE8 \ ””

Tak naprawdę nie miało znaczenia, na co ustawiamy wartość CP, o ile istnieje nagłówek P3P.

so_mv
źródło
4

Jedną z możliwości jest dodanie domeny do dozwolonych witryn w narzędziach -> opcje internetowe -> prywatność -> strony: somedomain.com -> zezwól -> OK.

heikkim
źródło
23
Tak, jeśli zależy ci tylko na tym, że działa na twoim komputerze. Nie do końca praktyczne sugerowanie tego każdemu odwiedzającemu.
Piskvor opuścił budynek
3

Ten post zawiera komentarz do P3P i skrótowe rozwiązanie, które zmniejsza problemy z IE7 i IE8.

Henrik Aasted Sørensen
źródło
1
Cytując artykuł: „w zasadzie mówi„ Nie zbieramy żadnych twoich danych osobowych ”” - powodzenia. Widziałem zero witryn, które faktycznie spełniają tokeny ustawione w tej polityce (w ogóle nie gromadzą żadnych danych , nawet anonimowych danych statystycznych - logi dostępu do serwera, ktoś?). Inne oferowane zasady są również bardzo trudne do osiągnięcia (masz jakieś analizy internetowe? Bam, właśnie złamałeś zasady P3P). Artykuł można więc streścić w następujący sposób: „po prostu rażąco kłamie, i tak nikogo to nie obchodzi”. Rzeczywiście najbardziej przydatny artykuł w całym Internecie .
Piskvor opuścił budynek
Cytując inną część artykułu: „Zaskakująco niewiele dobrych, bezpłatnych informacji w Internecie na temat P3P, kompaktowych zasad i wymagań IE7 - a IE7 nie daje absolutnie żadnych pomocnych wyników debugowania, takich jak powód zablokowania pliku cookie”. To wydaje się być całkowicie prawdziwe! Spędziłem większość mojego dnia próbując dowiedzieć się, dlaczego IE7 / 8 zachowuje się inaczej niż każda inna przeglądarka, byłem bardzo szczęśliwy, że znalazłem ten post. Prawdopodobnie nadszedł czas, aby uświadomić sobie, że P3P jest martwą specyfikacją i że większość ludzi woli po prostu obejść ten problem. Ten post JEST prawdopodobnie najbardziej przydatny na ten temat.
Henrik Aasted Sørensen
„Zaskakująco niewiele dobrych, bezpłatnych informacji w Internecie” - mogło to być prawdą w 2007 roku (kiedy to zostało napisane), ale teraz jest wiele informacji w Internecie, nawet darmowe narzędzia, które pomogą ci zbudować politykę P3P zgodnie z twoją konkretną sytuację. Nie bronię P3P, ale powiedzenie „eh pieprzyć to, po prostu odejdź” może mieć kosztowne konsekwencje (ponieważ robisz bardzo jednoznaczne twierdzenia na temat swojej witryny). Zostałem jeszcze przetestowany (IIRC), ale nie chciałbym być na końcu tego procesu.
Piskvor opuścił budynek
1
@Piskvor - Proszę zamieścić darmowe narzędzia P3P. Wszystkie te, do których próbuję się udać, zostały wykupione przez link farmy i fałszywe wyszukiwanie. IBM wyciągnął darmowe narzędzie. Wsparcie P3P wydaje się być umieraniem trawy podczas suszy w 2012 r.
Fiasco Labs
2
Znaleziono tutaj edytor p3p IBM Alphaworks na softpedia: softpedia.com/get/Security/Security-Related/…
Fiasco Labs
3

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.

ripper234
źródło
1
Słuszna uwaga. Zwróć uwagę, że w chwili opublikowania tego pytania obsługa przechowywania sesji nie istniała, szczególnie w IE. Ale czasy się zmieniają;)
Piskvor opuścił budynek
3

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.

Frode Nilsen
źródło
Dziwię się, że to nadal jest aktualne w 2016 roku :)
Piskvor opuścił budynek
1
Status P3P w IE jest udokumentowany tutaj: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , przyszłość wygląda jasno :)
Frode Nilsen
2

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ę!

Joel Mitchell
źródło
1

Możesz także łączyć pliki p3p.xml i policy.xml jako takie:

/home/ubuntu/sites/shared/w3c/p3p.xml

<META xmlns="http://www.w3.org/2002/01/P3Pv1">
  <POLICY-REFERENCES>
    <POLICY-REF about="#policy1">
      <INCLUDE>/</INCLUDE>
      <COOKIE-INCLUDE/>
    </POLICY-REF>
  </POLICY-REFERENCES>
  <POLICIES>
    <POLICY discuri="" name="policy1">
      <ENTITY>
        <DATA-GROUP>
          <DATA ref="#business.name"></DATA> 
          <DATA ref="#business.contact-info.online.email"></DATA> 
        </DATA-GROUP>
      </ENTITY>
      <ACCESS>
        <nonident/>
      </ACCESS>
      <!-- if the site has a dispute resolution procedure that it follows, a DISPUTES-GROUP should be included here -->
      <STATEMENT>
        <PURPOSE>
          <current/>
          <admin/>
          <develop/>
        </PURPOSE>
        <RECIPIENT>
          <ours/>
        </RECIPIENT>
        <RETENTION>
          <indefinitely/>
        </RETENTION>
        <DATA-GROUP>
          <DATA ref="#dynamic.clickstream"/>
          <DATA ref="#dynamic.http"/>
        </DATA-GROUP>
      </STATEMENT>
    </POLICY>
  </POLICIES>
</META>

Odkryłem, że najłatwiejszym sposobem dodania nagłówka jest proxy przez Apache i użycie mod_headers jako takich:

<VirtualHost *:80>
  ServerName mydomain.com

  DocumentRoot /home/ubuntu/sites/shared/w3c/

  ProxyRequests off
  ProxyPass /w3c/ !
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
  ProxyPreserveHost on

  Header add p3p 'P3P:policyref="/w3c/p3p.xml", CP="NID DSP ALL COR"'
</VirtualHost>

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

Kris
źródło
Czy to wysyła nagłówek z 304 żądaniami? Niektóre wersje IE faktycznie usuwają pliki cookie, jeśli wyślesz nagłówek P3P z 304.
Joshua
Przepraszam, nie wiem, ponieważ nie pracuję już nad tym kodem. Jeśli jest to problem, prawdopodobnie możesz zmusić kod stanu w Apache do 200.
Kris,
1

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).

Mateusz
źródło
1

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!

pierreaurelemartin
źródło
Ciekawe ... więc dekodujesz ciasteczko w JS?
Piskvor opuścił budynek
Nie, właśnie piszę ciasteczko w tablicy JSON z funkcją php json_encode (), a potem wracam przez wywołanie ajax JSON.
pierreaurelemartin 17.12.12
1

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

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: Wystarczy wysłać dodatkowy nagłówek:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Zawartość pliku p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Treść mojego pliku policy.html

<html>
<head>
<STYLE type="text/css">
title { color: #3333FF}
</STYLE>
<title>Privacy Statement for YOUR COMPANY NAME</title>
</head>
<body>
<h1 class="title">Privacy Policy</h1>
<!-- "About Us" section of privacy policy -->
<h2>About Us</h2>
<p>This is a privacy policy for YOUR COMPANY NAME.
Our homepage on the Web is located at <a href="YOURWEBSITE">
YOURWEBSITE</a>.
The full text of our privacy policy is available on the Web at 
<a href="ABSOLUTE URL OF THIS FILE">
ABSOLUTE URL OF THIS FILE</a>
This policy does not tell users where they can go to exercise their opt-in or opt-out options.
<p>We invite you to contact us if you have questions about this policy.
You may contact us by mail at the following address:
<pre>FIRSTNAME LASTNAME
YOUR ADDRESS HERE
</pre>
<p>You may contact us by e-mail at 
<a href="mailto:[email protected]">
[email protected]</a>. 
You may call us at TELEPHONENUMBER.
<!-- "Privacy Seals" section of privacy policy -->
<h2>Dispute Resolution and Privacy Seals</h2>
<p>We have the following privacy seals and/or dispute resolution mechanisms.
If you think we have not followed our privacy policy in some way, they can help you resolve your concern.
<ul>
<li>
<b>Dispute</b>:
Contact us for further information
</ul>
<!-- "Additional information" section of privacy policy -->
<h2>Additional Information</h2>
<p>
This policy is valid for 1 day from the time that it is loaded by a client.
</p>
<!-- "Data Collection" section of privacy policy -->
<h2>Data Collection</h2>
<p>P3P policies declare the data they collect in groups (also referred to as "statements").
This policy contains 1 data group.
<hr width="50%" align="center">
<h3>Group "App control data"</h3>
<p>We collect the following information:
<ul>
<li>HTTP cookies</li>
</ul>
<p>This data will be used for the following purposes:</p>
<ul>
<li>Completion and support of the current activity.</li>
<li>Web site and system administration.</li>
<li>Research and development.</li>
<li>Historical preservation.</li>
<li>Other purposes<p>Control Flow of the application</p></li>
</ul>
<p>This data will be used by ourselves and our agents.
<p>The data in this group has been marked as non-identifiable. This means that there is no
reasonable way for the site to identify the individual person this data was collected from.
<p>The following explanation is provided for why this data is collected:</p>
<blockquote>This cookie data is only used to control the application within an iframe (e.g. a Facebook App)</blockquote>
<!-- "Use of Cookies" section of privacy policy -->
<hr width="50%" align="center">
<h2>Cookies</h2>
<p>Cookies are a technology which can be used to provide you with tailored information from a Web site. A cookie is an element of data that a Web site can send to your browser, which may then store it on your system. You can set your browser to notify you when you receive a cookie, giving you the chance to decide whether to accept it.
<p>Our site makes use of cookies.
Cookies are used for the following purposes:
<ul>
<li>Site administration
<li>Completing the user's current activity
<li>Research and development
<li>Other
(Control Flow of the application)
</ul>
<!-- "Compact Policy Explanation" section of privacy policy -->
<hr width="50%" align="center">
<h2>Compact Policy Summary</h2>
<p>The compact policy which corresponds to this policy is:
<pre>
    CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV"
</pre>
<p>The following table explains the meaning of each field in the compact policy.
<center><table width="80%" border="1" cols="2">
<tr><td align="center" valign="top" width="20%"><b>Field</b></td><td align="center" valign="top" width="80%"><b>Meaning</b></td></tr>
<tr><td align="left" valign="top" width="20%"><tt>CP=</tt></td>
<td align="left" valign="top" width="80%">This is the compact policy header; it indicates that what follows is a P3P compact policy.</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>ALL</tt></td>
<td align="left" valign="top" width="80%">
Access to all collected information is available.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>DSP</tt></td>
<td align="left" valign="top" width="80%">
The policy contains at least one dispute-resolution mechanism.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NID</tt></td>
<td align="left" valign="top" width="80%">
The information collected is not personally identifiable.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>CURa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for completion of the current activity.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>ADMa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for site administration.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>DEVa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for research and development.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>HISa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for historical archival purposes.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>OTPa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for other purposes.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>OUR</tt></td>
<td align="left" valign="top" width="80%">
The data is given to ourselves and our agents.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NOR</tt></td>
<td align="left" valign="top" width="80%">
The data is not kept beyond the current transaction.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NAV</tt></td>
<td align="left" valign="top" width="80%">
Navigation and clickstream data is collected.
</td></tr>
</table></center>
<p>The compact policy is sent by the Web server along with the cookies it describes.
For more information, see the P3P deployment guide at <a href="http://www.w3.org/TR/p3pdeployment">http://www.w3.org/TR/p3pdeployment</a>.
<!-- "Policy Evaluation" section of privacy policy -->
<hr width="50%" align="center">
<h2>Policy Evaluation</h2>
<p>Microsoft Internet Explorer 6 will evaluate this policy's compact policy whenever it is used with a cookie.
The actions IE will take depend on what privacy level the user has selected in their browser (Low, Medium, Medium High, or High; the default is Medium.
In addition, IE will examine whether the cookie's policy is considered satisfactory or unsatisfactory, whether the cookie is a session cookie or a persistent cookie, and whether the cookie is used in a first-party or third-party context.
This section will attempt to evaluate this policy's compact policy against Microsoft's stated behavior for IE6.
<p><b>Note:</b> this evaluation is currently experimental and should not be considered a substitute for testing with a real Web browser.
<p><b>Satisfactory policy</b>: this compact policy is considered <em>satisfactory</em> according to the rules defined by Internet Explorer 6.
IE6 will accept cookies accompanied by this policy under the High, Medium High, Medium, Low, and Accept All Cookies settings.
</body></html>

  1. Treść policy.p3p
<?xml version="1.0"?>
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1">
    <!-- Generated by IBM P3P Policy Editor version Beta 1.12 built 2/27/04 1:19 PM -->

    <!-- Expiry information for this policy -->
    <EXPIRY max-age="86400"/>

<POLICY
    name="App"
    discuri="ABSOLUTE URL TO policy.html"
    xml:lang="de">
    <!-- Description of the entity making this policy statement. -->
    <ENTITY>
    <DATA-GROUP>
<DATA ref="#business.name">COMPANY NAME</DATA>
<DATA ref="#business.contact-info.online.email">[email protected]</DATA>
<DATA ref="#business.contact-info.online.uri">YOURWEBSITE</DATA>
<DATA ref="#business.contact-info.telecom.telephone.number">YOURPHONENUMBER</DATA>
<DATA ref="#business.contact-info.postal.organization">FIRSTNAME LASTNAME</DATA>
<DATA ref="#business.contact-info.postal.street">STREET</DATA>
<DATA ref="#business.contact-info.postal.city">CITY</DATA>
<DATA ref="#business.contact-info.postal.stateprov">STAGE</DATA>
<DATA ref="#business.contact-info.postal.postalcode">POSTALCODE</DATA>
<DATA ref="#business.contact-info.postal.country">Germany</DATA>
    </DATA-GROUP>
    </ENTITY>

    <!-- Disclosure -->
    <ACCESS><all/></ACCESS>


    <!-- Disputes -->
    <DISPUTES-GROUP>
        <DISPUTES resolution-type="service" service="YOURWEBSITE CONTACT FORM" short-description="Dispute">
            <LONG-DESCRIPTION>Contact us for further information</LONG-DESCRIPTION>
    <!-- No remedies specified -->
        </DISPUTES>
    </DISPUTES-GROUP>

    <!-- Statement for group "App control data" -->
    <STATEMENT>
        <EXTENSION optional="yes">
            <GROUP-INFO xmlns="http://www.software.ibm.com/P3P/editor/extension-1.0.html" name="App control data"/>
        </EXTENSION>

    <!-- Consequence -->
    <CONSEQUENCE>
This cookie data is only used to control the application within an iframe (e.g. a Facebook App)</CONSEQUENCE>

    <!-- Data in this statement is marked as being non-identifiable -->
    <NON-IDENTIFIABLE/>

    <!-- Use (purpose) -->
    <PURPOSE><admin/><current/><develop/><historical/><other-purpose>Control Flow of the application</other-purpose></PURPOSE>

    <!-- Recipients -->
    <RECIPIENT><ours/></RECIPIENT>

    <!-- Retention -->
    <RETENTION><no-retention/></RETENTION>

    <!-- Base dataschema elements. -->
    <DATA-GROUP>
    <DATA ref="#dynamic.cookies"><CATEGORIES><navigation/></CATEGORIES></DATA>
    </DATA-GROUP>
</STATEMENT>

<!-- End of policy -->
</POLICY>
</POLICIES>
Sebastian Buckpesch
źródło
Przechodzi do katalogu nadrzędnego serwera okien lub katalogu serwera iframe?
JackTheKnife,
0

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

Sly_cardinal
źródło
-1

Lepszym rozwiązaniem byłoby wywołanie Ajax wewnątrz elementu iframe do strony, która otrzyma / ustawi pliki cookie ...

Luca Matteis
źródło
1
AJAX tu nie pomoże: jakakolwiek obsługa plików cookie w ramce iframe jest mniej zaufana („pliki cookie stron trzecich”), aw IE musi przejść przez filtr Polityki prywatności - bez względu na to, czy ustawiasz pliki cookie za pomocą połączeń AJAX, dokumentuj . manipulowanie plikami cookie lub zwykłe strony (testowane).
Piskvor opuścił budynek
nie, jeśli wykonujesz wywołanie ajax, które ustawia pliki cookie z HTTP (wewnątrz ramki iframe) Ie6 omija zasady bezpieczeństwa i ustawia pliki cookie. Upewnij się, że moje rozwiązanie jest złe przed oddaniem głosu.
Luca Matteis
Zobacz newmoon.wz.cz/test/page.php . Możesz ustawić ciasteczka za pomocą AJAX, ale albo a) rozpoczniesz nową sesję, albo b) ustawisz identyfikator sesji z JS - ogromnej dziury w zabezpieczeniach (XSRF). Mój poprzedni komentarz był źle, apologize.But, wasze spojrzenia rozwiązanie popełniać więcej błędów niż wcześniej: co dziura bezpieczeństwa wydaje się zły na mnie.
Piskvor opuścił budynek
(Wszystko, co „omija politykę bezpieczeństwa”, wydaje mi się co najmniej błędem - jeśli istnieje polityka, jest ona z jakiegoś powodu. Mówienie „pieprzyć politykę bezpieczeństwa / preferencje użytkownika, wiemy lepiej” jest niebezpiecznym śliskim nachyleniem. Również , czy pozwoliłbyś funkcjonalności zależeć od (jeszcze) usuniętych znanych błędów?)
Piskvor opuścił budynek
Ustaw nową sesję? O czym mówisz? Większość przeglądarek obsługuje to, bez nagłówka p3p, więc nie rozumiem, jak to robi za pomocą Ajaxa jest inaczej ...
Luca Matteis