Cookie zablokowane/nie zapisane w IFRAME w Internet Explorer

Mam dwie strony internetowe, powiedzmy, że są example.com i anotherexample.net. Na anotherexample.net/page.html, mam IFRAME SRC="http://example.com/someform.asp". IFRAME wyświetla formularz, który użytkownik musi wypełnić i przesłać do http://example.com/process.asp. Kiedy otwieram formularz ("someform.asp") we własnym oknie przeglądarki, wszystko działa dobrze. Jednak kiedy załaduję someform.asp jako IFRAME w IE 6 lub IE 7, Pliki cookie dla example.com nie są zbawieni. w Firefoksie ten problem nie pojawia się.

W celach testowych stworzyłem podobną konfigurację na http://newmoon.wz.cz/test/page.php .

example.com wykorzystuje sesje oparte na plikach cookie (i nic nie mogę na to poradzić), więc bez plików cookie process.asp nie uruchomi się. Jak zmusić IE do zapisywania plików cookie?

Wyniki sniffingu ruchu HTTP: na GET / someform.asp response, istnieje poprawny nagłówek cookie Set-session (np. Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY), ale na POST / process.żądanie asp, nie ma w ogóle nagłówka Cookie.

Edit3: niektóre skrypty AJAX + serverside są najwyraźniej potrafi ominąć problem, ale wygląda to bardzo podobnie do błędu, plus otwiera zupełnie nowy zestaw luk bezpieczeństwa. Nie chcę, aby moje aplikacje używały kombinacji Bug+security hole tylko dlatego, że jest to łatwe.

Edit: Polityka P3P była główną przyczyną, pełne wyjaśnienie poniżej.

Author: Piskvor, 2008-12-23

22 answers

Udało mi się, ale rozwiązanie jest trochę skomplikowane, więc proszę o cierpliwość.

Co się dzieje

[[9]}Jak to jest, Internet Explorer daje niższy poziom zaufania do stron IFRAME (IE nazywa tę zawartość "stron trzecich"). Jeśli strona wewnątrz ramki IFRAME nie ma Polityki Prywatności, jej Pliki cookie są blokowane (co jest wskazywane przez ikonę oka na pasku stanu, po kliknięciu na nią, wyświetla listę zablokowanych adresów URL).

The evil eye http://stuff.piskvor.org/cookies_blocked_MSIE_eye.png

W tym przypadku, gdy pliki cookie są blokowane, identyfikator sesji nie jest wysyłany, a skrypt docelowy wyświetla błąd "session not found".

(próbowałem ustawić identyfikator sesji w formularzu i załadować go ze zmiennych POST. to by zadziałało , ale z powodów politycznych nie mogłem tego zrobić.)

Możliwe jest, aby Strona wewnątrz ramki IFRAME była bardziej zaufana: jeśli strona wewnętrzna wyśle Nagłówek P3P z Polityką Prywatności, która jest akceptowalna dla IE, pliki cookie będą akceptowane .

Jak to rozwiązać

Tworzenie polityki p3p

Dobrym punktem wyjścia jest W3C tutorial. Zapoznałem się z nim, pobrałem IBM Privacy Policy Editor i tam stworzyłem reprezentację Polityki Prywatności i nadałem jej nazwę, aby się do niej odwoływać(tutaj było to policy1).

Uwaga: w tym momencie musisz się dowiedzieć, czy Twoja strona ma politykę prywatności, a jeśli nie, utwórz ją-czy zbiera dane użytkownika, jakie dane, co z nią robi, kto ma do niej dostęp itp. Musisz znaleźć tę informację i pomyśleć o niej. wystarczy kilka tagów, by tego nie wyciąć. ten krok nie może być wykonany wyłącznie w oprogramowaniu i może być wysoce polityczny (np. "should we sell our click statistics?").

[9]} (np. " strona jest obsługiwana przez ACME Ltd., używa anonimowych na sesję identyfikatory dla jego działania, zbiera dane użytkownika tylko wtedy, gdy 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 nich dostęp itp. itd.").

(podczas edycji za pomocą tego narzędzia można wyświetlić błędy/pominięcia w Polityce. Bardzo przydatna jest również zakładka "Polityka HTML": na dole ma "ocenę polityki" - szybkie sprawdzenie, czy polityka zostanie zablokowana przez domyślne ustawienia IE) {]}

Edytor eksportuje do a .plik p3p, który jest reprezentacją XML powyższej polityki. Może również wyeksportować "kompaktową wersję" tej polityki.

Link do polityki

W związku z tym, że strona korzysta z plików cookies, konieczne jest włączenie w przeglądarce obsługi JavaScript.]}
<META>
  <POLICY-REFERENCES>
    <POLICY-REF about="/w3c/example-com.p3p#policy1">
      <INCLUDE>/</INCLUDE>
      <COOKIE-INCLUDE/>
    </POLICY-REF>
  </POLICY-REFERENCES>
</META>

<INCLUDE> pokazuje wszystkie URI, które będą korzystać z tej polityki(w moim przypadku cała strona). Plik polityki wyeksportowany z edytora został przesłany do http://example.com/w3c/example-com.p3p

Wyślij nagłówek kompaktowy z odpowiedzi

Ustawiłem serwer na example.com aby wysłać nagłówek compact z odpowiedziami, w ten sposób:

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

policyref jest względnym URI do pliku referencyjnego Polityki (który z kolei odwołuje się do polityki prywatności), CP jest kompaktową reprezentacją polityki. zauważ, że kombinacja nagłówków P3P w przykładzie może nie mieć zastosowania w twojej konkretnej witrynie; nagłówki P3P MUSZĄ zgodnie z prawdą reprezentować twoją własną politykę prywatności!

Zysk!

W Ta konfiguracja, Złe oko nie pojawia się, Pliki cookie są zapisywane nawet w ramce IFRAME, a aplikacja działa.

Edit: czego nie robić, chyba że lubisz bronić się przed procesami sądowymi

Kilka osób zasugerowało "po prostu wrzuć kilka tagów do nagłówka P3P, dopóki Złe oko się nie podda".

Znaczniki to nie tylko bity, mają znaczenia świata rzeczywistego , a ich użycie daje obowiązki świata rzeczywistego !

Na przykład, udawanie, że nigdy nie zbierasz danych użytkownika może uszczęśliwić przeglądarkę, ale jeśli faktycznie zbierasz dane użytkownika, P3P jest sprzeczne z rzeczywistością. Po prostu celowo okłamujesz swoich użytkowników, a to może być przestępcze zachowanie w niektórych krajach. "Idź do więzienia, nie zbieraj 200 dolarów".

Kilka przykładów (zobacz p3pwriter dla pełnego zestawu tagów):

  • NOI : "strona internetowa nie gromadzi zidentyfikowanych danych."(jak najszybciej jest jakaś Personalizacja, login, lub jakiekolwiek zbieranie danych (*****Analytics, ktoś?([22]} musisz potwierdzić to w swoim P3P)
  • STP : informacje są przechowywane w celu spełnienia określonego celu. Wymaga to jak najszybszego odrzucenia informacji. Witryny muszą mieć politykę przechowywania, która ustanawia tabelę czasu zniszczenia. Polityka przechowywania danych musi być dołączona lub powiązana z Polityką prywatności witryny czytelnej dla człowieka."(więc jeśli wyślesz STP ale jeśli nie masz zasad przechowywania danych, możesz popełnić oszustwo. Czy to nie fajne? Wcale nie.)

Nie jestem prawnikiem, ale nie jestem skłonny iść do sądu, aby sprawdzić, czy nagłówek P3P jest naprawdę prawnie wiążący lub czy możesz obiecać swoim użytkownikom cokolwiek, nie chcąc dotrzymać swoich obietnic.

 424
Author: Piskvor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 07:33:25

Spędziłem dużą część mojego dnia patrząc na tę sprawę P3P i czuję potrzebę podzielenia się tym, co odkryłem.

Zauważyłem, że koncepcja P3P jest bardzo przestarzała i wydaje się być naprawdę używana/egzekwowana tylko przez Internet Explorer (IE).

Najprostsze wyjaśnienie brzmi: IE chce, abyś zdefiniował nagłówek P3P, jeśli używasz plików cookie.

Jest to fajny pomysł, i na szczęście większość czasu nie podanie tego nagłówka nie spowoduje żadnych problemów(przeczytaj Ostrzeżenia przeglądarki). Chyba że Twój strona internetowa / aplikacja internetowa jest ładowana do innej strony internetowej za pomocą ramki (i). To jest, gdy IE staje się ogromny ból w***. Nie pozwoli Ci ustawić pliku cookie, chyba że ustawiony jest nagłówek P3P.

Wiedząc o tym chciałem znaleźć odpowiedź na następujące dwa pytania:

    Kogo to obchodzi? Innymi słowy, czy mogę zostać pozwany, jeśli umieszczę słowo "ziemniak" w nagłówku?
  1. co robią inne firmy?

Moje ustalenia to:

    Nikogo to nie obchodzi. I ' m nie można znaleźć jednego dokumentu, który sugeruje, że ta technologia ma jakąkolwiek wagę prawną. Podczas moich badań nie znalazłem ani jednego kraju na świecie, który przyjął prawo, które uniemożliwia umieszczanie słowa "ziemniak" w nagłówku P3P
  1. zarówno Google, jak i Facebook umieścili link w swoim polu nagłówka P3P odsyłający 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 nie wdrożona prawnie koncepcja jest nadal wymuszony na programistach w IE. Jeśli ten nagłówek nie ma żadnych prawnych konsekwencji, nagłówek powinien zostać zignorowany (lub ewentualnie wygenerować ostrzeżenie lub powiadomienie w konsoli). Nie egzekwowane! Jestem teraz zmuszony umieścić linię w moim kodzie (i wysłać nagłówek do klienta), który nie robi absolutnie nic.

W skrócie - dla zadowolenia IE-dodaj następującą linijkę do kodu PHP (inne języki powinny wyglądać podobnie)

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

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

 162
Author: Ruben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-09 22:38:29

Udało mi się sprawić, że złe oko zniknie, 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 przeładować witrynę lub Explorer może nadal pokazać złe oko, pomimo faktu, ż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 polityki nie był konieczny.

Edytuj: Znalazłem fajny wpis na blogu, który wyjaśnia problem z ciasteczkami w IFrames. Posiada również szybką poprawkę w kodzie C# : Ramki, strony ASPX i odrzucone Pliki cookie

 55
Author: Helo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-28 13:21:22

To jest zakopane w komentarzach innych odpowiedzi, ale prawie to przeoczyłem, więc wygląda na to, że zasługuje na własną odpowiedź.

Aby przejrzeć: aby IE akceptowało 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 tym momencie prawie martwy jako standard i można łatwo dostać IE do pracy bez inwestowania czasu i zasobów prawnych w tworzenie prawdziwej polityki p3p. Dzieje się tak, ponieważ jeśli twoja kompaktowa Polityka p3p nagłówek jest nieprawidłowy, czyli faktycznie traktuje to jako dobrą politykę i akceptuje pliki cookie stron trzecich. Więc możesz użyć nagłówka p3p takiego jak to

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

Opcjonalnie możesz dołączyć link do strony, która wyjaśnia, dlaczego nie masz polityki p3p, 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 serwowane od 3rd strona musi 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, itd. Prawdopodobnie lepiej jest ustawić się na poziomie serwera www(np. w IIS lub Apache).

 21
Author: David Hammond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-24 14:16:26

Miałem również ten problem, pomyślałem, że wyślę kod, którego użyłem w moim projekcie MVC2. Bądź ostrożny, gdy w cyklu życia strony dodajesz nagłówek lub otrzymasz HttpException "serwer nie może dołączyć nagłówka po wysłaniu nagłówków HTTP."Użyłem niestandardowego filtra ActionFilterAttribute w metodzie OnActionExecuting (wywołanej 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 użycie:

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

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}
 20
Author: daniellmb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-27 19:21:55

Jest 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 lub gdziekolwiek indziej (przepraszam, jeśli właśnie go przegapiłem) było to, że linia P3P musi być przekazana w nagłówku KAŻDEGO pliku wysłanego z serwera 3rd party, nawet pliki nie ustawiające lub używające 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

 14
Author: Juris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-23 22:44:45

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

Następnie dodaj ten moduł p3p i włącz go w middleware.

npm install p3p

Używam express więc dodaję go w aplikacji.js

Najpierw wymagaj tego modułu w aplikacji.js

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

Następnie użyj go jako middleware

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

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

Więcej informacji znajdziesz na stronie:

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

 5
Author: Harshal_m_joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-17 07:06:34

Jeśli ktoś szuka linii Apache-użyliśmy tej.

Header set P3P "CP= \" Thanks IE8\ ""

Naprawdę nie miało znaczenia, na co ustawiliśmy wartość CP, o ile istnieje nagłówek P3P.

 5
Author: so_mv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-07 22:06:01

Jedną z możliwych rzeczy do zrobienia jest dodanie domeny do dozwolonych witryn w narzędziach -> Opcje internetowe -> prywatność - > witryny: somedomain.com -> allow - > OK.

 4
Author: heikkim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-17 10:10:20

Ten post zawiera kilka komentarzy na temat P3P i skróconego rozwiązania, które zmniejsza problemy z IE7 i IE8.

 3
Author: Henrik Aasted,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-05 13:02:35

Jednym z rozwiązań, o którym tu nie wspominałem, jest użycie session storage zamiast plików cookie. Oczywiście może to nie pasować do wymagań wszystkich, ale w niektórych przypadkach jest to łatwe rozwiązanie.

 3
Author: ripper234,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-13 12:00:40

Mam podobny problem, również poszedłem do zbadania, jak wygenerować politykę P3P dziś rano, oto mój post o tym, jak wygenerować własną politykę i wykorzystanie w witrynie internetowej :) http://everydayopenslikeaflower.blogspot.com/2009/08/how-to-create-p3p-policy-and-implement.html{[2]

 2
Author: Ping,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-21 15:39:51

Zaimplementowałem już wcześniej pełną politykę P3P, ale nie chciałem znowu męczyć się z nowym projektem, nad którym pracowałem. Znalazłem ten link przydatny do prostego rozwiązania problemu, tylko trzeba określić minimalną kompaktową politykę P3P "CAO PSA nasz": {]}

Http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html

Artykuł cytuje (teraz uszkodzony) link do artykułu Microsoft kb. Polityka mi pomogła!

 2
Author: Joel Mitchell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-13 14:47:09

Badałem ten problem w odniesieniu do logowania za pośrednictwem usług kontroli dostępu Azure i nie byłem w stanie połączyć się z niczym.

Następnie, natknąłem się na ten post https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/{[4]

W skrócie, IE nie udostępnia plików cookie w różnych strefach (np. Internet a zaufane strony).

Więc jeśli Twoja strona docelowa IFrame i html są w innej strefie to P3P nie pomoże cokolwiek.

 2
Author: Frode Nilsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-06 14:23:18

Można również połączyć p3p.xml i Polityka.pliki 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>

Znalazłem najprostszy sposób, aby dodać nagłówek jest proxy przez Apache i używać mod_headers, jako takie:

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

Więc zastępujemy wszystkie żądania z wyjątkiem tych do /w3c/p3p.xml do naszego serwera aplikacji.

Możesz przetestować to wszystko za pomocą walidatora W3C

 1
Author: Kris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-09 15:46:56

Jeśli posiadasz domenę, która musi zostać osadzona , Możesz, przed wywołaniem strony zawierającej ramkę IFrame, 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/

Będzie to działać dla przeglądarki Internet Explorer, ale również dla Safari (ponieważ Safari blokuje również pliki cookie innych firm).

 1
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 15:18:04

Wiem, że trochę za późno, aby umieścić swój wkład w tym temacie, ale straciłem tyle godzin, że może ta odpowiedź komuś pomoże.

Próbowałem wywołać plik cookie strony trzeciej na mojej stronie i oczywiście nie działał on na Internet Explorer 10, nawet przy niskim poziomie bezpieczeństwa... nie pytaj mnie dlaczego. W ramce iframe wołałem read_cookie.php (echo $_cookie) z Ajaxem.

I nie wiem, dlaczego nie byłem w stanie ustawić polityki P3P, aby rozwiązać problem...

Podczas moje poszukiwania widziałem coś o tym, aby ciastko w JSON działało. Nawet nie próbuję, ponieważ myślałem, że jeśli plik cookie nie przejdzie przez ramkę iframe, nie przejdzie już przez tablicę...

Zgadnij co, robi! Więc jeśli json_encode cookie następnie dekodować po żądanie ajax, dostaniesz go!

Może jest coś, co przegapiłem, a jeśli tak, to przepraszam, ale nigdy nie widziałem czegoś tak głupiego. Zablokuj pliki cookie stron trzecich dla bezpieczeństwa, dlaczego nie, ale pozwól mu przejść, jeśli zakodowany? Gdzie jest teraz Ochrona?

Mam nadzieję, że ten post komuś pomoże i jeszcze raz, jeśli coś przeoczyłem i jestem głupi, Proszę mnie edukować!

 1
Author: pierreaurelemartin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-09 08:31:07

To w końcu zadziałało dla mnie (po wielu pośpiechach i generowaniu niektórych polityk za pomocą IBMs policy generator). Możesz downlod generatora polityki tutaj: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml

Nie udało mi się już pobrać generatora z oficjalnej strony IBM.

Utworzyłem te pliki w folderze głównym mojej aplikacji internetowej

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Indeks.php: wystarczy wysłać dodatkowe nagłówek:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Zawartość p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. treść mojej polityki.plik 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ść polityki.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>
 1
Author: Sebastian Buckpesch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-26 18:38:40

W Rails używam tego klejnotu: https://github.com/merchii/rack-iframe Bajkowo ustawia zbiór skrótów bez pliku referencyjnego: https://github.com/merchii/rack-iframe/blob/master/lib/rack/iframe.rb#L8

Jest łatwy w instalacji, gdy w ogóle nie obchodzi cię znaczenie rzeczy p3p.

 0
Author: mojovski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 23:20:11

Dla każdego, kto chce, aby Polityka P3P Compact działała ze statycznymi treściami:

Jest to Tylko możliwe, jeśli 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

 0
Author: Sly_cardinal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:19

W Rails 3.2 używam:

class ApplicationController < ActionController::Base  

  before_filter :set_p3p  

  private  
    # for IE session cookies thru iframe  
    def set_p3p  
      headers['P3P'] = 'CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"'  
    end  
end  

Dostałem to od: http://dot-net-web-developer-bristol.blogspot.com/2012/04/setting-p3p-header-in-rails-session.html

 0
Author: Aaron Mills,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 20:27:11

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

 -1
Author: Luca Matteis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-07 16:06:59