Cookie bloqueado / não salvo em IFRAME no Internet Explorer

392

Eu tenho dois sites, digamos que são example.come anotherexample.net. Em anotherexample.net/page.html, eu tenho um IFRAME SRC="http://example.com/someform.asp". Esse IFRAME exibe um formulário para o usuário preencher e enviar http://example.com/process.asp. Quando abro o formulário (" someform.asp") em sua própria janela do navegador, tudo funciona bem. No entanto, quando eu carrego someform.aspcomo um IFRAME no IE 6 ou IE 7, os cookies de exemplo.com não são salvos. No Firefox, esse problema não aparece.

Para fins de teste, criei uma configuração semelhante em http://newmoon.wz.cz/test/page.php .

example.comusa sessões baseadas em cookies (e não há nada que eu possa fazer sobre isso); portanto, sem cookies, process.aspnão será executado. Como forço o IE a salvar esses cookies?

Resultados da detecção do tráfego HTTP: na resposta GET /someform.asp, há um cabeçalho Set-Cookie válido por sessão (por exemplo Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY), mas na solicitação POST /process.asp, não há cabeçalho de Cookie.

Edit3: alguns scripts do lado do servidor AJAX + aparentemente são capazes de contornar o problema, mas isso se parece muito com um bug, além de abrir um novo conjunto de falhas de segurança . Não quero que meus aplicativos usem uma combinação de bug + brecha de segurança apenas porque é fácil.

Edit: a política P3P foi a causa raiz , explicação completa abaixo.

Piskvor
fonte
uma boa solução de fato .. eu tentei criar a política de privacidade .. adicionado à minha raiz de contexto ... e na minha página jsp estou definindo o cabeçalho .. ainda não consigo me livrar desse olho vermelho .. você pode ajudar me resolver o problema ..
user902490
Obrigado pelo site de demonstração @Piskvor, referenciei-o aqui nesta postagem do Security.SE que lista sites com testes interativos no navegador
goodguys_activate
@ makerofthings7: YW. Vou migrá-lo para um site não temporário (sic!) E vou sugerir uma edição no Security.se, essa página foi uma prova de conceito um tanto hacky.
Piskvor saiu do prédio 30/10
2
Não se preocupe em tentar executar o P3P no Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). O P3P não funciona, portanto, não importa o que você faça, os cookies não serão armazenados. Prova aqui também enhanceie.com/test/cookie
puco

Respostas:

429

Eu consegui que funcionasse, mas a solução é um pouco complexa, então tenha paciência comigo.

O que está acontecendo

Como é, o Internet Explorer oferece menor nível de confiança às páginas IFRAME (o IE chama esse conteúdo de "terceiros"). Se a página dentro do IFRAME não tiver uma Política de Privacidade, seus cookies serão bloqueados (o que é indicado pelo ícone de olho na barra de status, quando você clica nela, mostra uma lista de URLs bloqueados).

O olho do mal
(fonte: piskvor.org )

Nesse caso, quando os cookies são bloqueados, o identificador da sessão não é enviado e o script de destino gera um erro 'sessão não encontrada'.

(Tentei definir o identificador da sessão no formulário e carregá-lo das variáveis ​​POST. Isso teria funcionado , mas por razões políticas eu não pude fazer isso.)

É possível tornar a página dentro do IFRAME mais confiável: se a página interna enviar um cabeçalho P3P com uma política de privacidade aceitável para o IE, os cookies serão aceitos .

Como resolver

Crie uma política p3p

Um bom ponto de partida é o tutorial do W3C . Eu passei por isso, baixei o IBM Privacy Policy Editor e lá criei uma representação da política de privacidade e dei um nome para fazer referência a ela (aqui estava policy1).

NOTA : neste momento, você precisa descobrir se o seu site tem uma política de privacidade e, se não, criá-lo - se ele coleta dados do usuário, que tipo de dados, o que faz com ele, quem tem acesso a ele, etc. Você precisa encontrar essas informações e pensar sobre isso. Tocar algumas tags não é suficiente. Esta etapa não pode ser realizada exclusivamente em software e pode ser altamente política (por exemplo, "devemos vender nossas estatísticas de cliques?").

(por exemplo, "o site é operado pela ACME Ltd., ele usa identificadores anônimos por sessão para sua operação, coleta dados do usuário apenas se explicitamente permitido e apenas para os seguintes fins, os dados são armazenados apenas pelo tempo necessário, apenas nossa empresa tem acesso a ele, etc. etc. ").

(Ao editar com esta ferramenta, é possível visualizar erros / omissões na política. Também é muito útil a guia "Política HTML": na parte inferior, há uma "Avaliação da política" - uma verificação rápida se a política será bloqueada. pelas configurações padrão do IE)

O Editor exporta para um arquivo .p3p, que é uma representação XML da política acima. Além disso, ele pode exportar uma "versão compacta" desta política.

Link para a política

Em seguida, http://example.com/w3c/p3p.xmlera necessário um arquivo de referência de política ( ) (um índice de políticas de privacidade que o site usa):

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

O <INCLUDE>mostra todos os URIs que usarão essa política (no meu caso, o site inteiro). O arquivo de política que eu exportei do Editor foi carregado parahttp://example.com/w3c/example-com.p3p

Envie o cabeçalho compacto com respostas

Eu configurei o servidor da web em example.com para enviar o cabeçalho compacto com respostas, assim:

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

policyrefé um URI relativo ao arquivo de referência de política (que por sua vez faz referência às políticas de privacidade), CPé a representação compacta da política. Observe que a combinação de cabeçalhos P3P no exemplo pode não ser aplicável em seu site específico; seus cabeçalhos P3P DEVEM representar verdadeiramente sua própria política de privacidade!

Lucro!

Nessa configuração, o Evil Eye não aparece, os cookies são salvos mesmo no IFRAME e o aplicativo funciona.

Edit: O que NÃO fazer, a menos que você goste de se defender de ações judiciais

Várias pessoas sugeriram "basta colocar algumas tags no cabeçalho do P3P, até que o Evil Eye desista".

As tags não são apenas um monte de bits, elas têm significados do mundo real e seu uso dá a você responsabilidades do mundo real !

Por exemplo, fingir que você nunca coleta dados do usuário pode deixar o navegador feliz, mas se você realmente coletar dados do usuário, o P3P estará em conflito com a realidade. Puro e simples, você está mentindo de propósito para seus usuários , e isso pode ser um comportamento criminoso em alguns países. Como em "vá para a cadeia, não receba US $ 200".

Alguns exemplos ( consulte o p3pwriter para obter o conjunto completo de tags ):

  • NOI : "O site não coleta dados identificados." (assim que houver personalização, login ou coleta de dados (***** Analytics, alguém?), você deverá reconhecê-lo em seu P3P)
  • STP : As informações são retidas para atender ao objetivo declarado. Isso requer que as informações sejam descartadas o mais rápido possível. Os sites DEVEM ter uma política de retenção que estabeleça um cronograma de destruição. A política de retenção DEVE ser incluída ou vinculada à política de privacidade legível por humanos do site. "(Por isso, se você enviar, STPmas não tiver uma política de retenção, poderá estar cometendo uma fraude. Quão legal é isso? De maneira alguma.)

Não sou advogado, mas não estou disposto a ir a tribunal para ver se o cabeçalho do P3P é realmente legalmente vinculativo ou se você pode prometer algo aos usuários sem realmente querer honrar suas promessas.

Piskvor
fonte
Eu estava 95% completo, mas meu cabeçalho dizia apenas: P3P: CP = "...." e não incluía o link policyref, que o fazia funcionar no IE7, mas não no IE6 ... funciona bem agora. Obrigado!
AndreasKnudsen
4
O link para o editor IBM não está mais funcionando. Através da The Wayback Machine, consegui encontrar este link de trabalho: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234
34
Algumas notícias sobre esses tópicos: - O editor IBM pode ser encontrado em: softpedia.com/get/Security/Security-Related/… - Os padrões P3P parecem estar "mortos". Grandes empresas como google e facebook agora usam cabeçalhos P3P inválidos para contornar a segurança do IE. Veja estas mensagens: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/... techpolicy.com/...
Davide Icardi
7
Outra informação que pode ajudar alguém com um problema semelhante: dos meus testes, se os domínios estiverem em zonas de segurança diferentes (por exemplo, a primeira parte é a Internet e a terceira é a intranet), não é possível aceitar o cookie de terceiros também se o P3P estiver corretamente configurado. O cookie está sempre bloqueado.
Davide Icardi
11
É importante observar que o termo 'terceiro' não é tão claro quanto se pensa. Se um iframe tiver conteúdo de terceiros em relação ao site anexo e tiver uma política de privacidade válida, ele será redirecionado para uma exibição no iframe que vem do site principal, a menos que essa exibição tenha uma política de privacidade válida, o IE não confie em seus cookies. Mesmo que essa exibição seja proveniente do mesmo site que contém o iframe.
Tarifas
168

Passei grande parte do meu dia investigando essa coisa do P3P e sinto a necessidade de compartilhar o que descobri.

Percebi que o conceito P3P está muito desatualizado e parece apenas ser realmente usado / imposto pelo Internet Explorer (IE).

A explicação mais simples é: o IE deseja que você defina um cabeçalho P3P se estiver usando cookies.

É uma boa idéia e, felizmente, na maioria das vezes, não fornecer esse cabeçalho não causará problemas (leia os avisos do navegador). A menos que seu site / aplicativo da web seja carregado em outro site usando um (i) Frame. É aqui que o IE se torna uma dor enorme no ***. Não permitirá que você defina um cookie, a menos que o cabeçalho P3P esteja definido.

Sabendo disso, queria encontrar uma resposta para as duas perguntas a seguir:

  1. Quem se importa? Em outras palavras, posso ser processado se colocar a palavra "Batata" no cabeçalho?
  2. O que outras empresas fazem?

Minhas descobertas são:

  1. Ninguém se importa. Não consigo encontrar um único documento que sugira que essa tecnologia tenha algum peso legal. Durante minha pesquisa, não encontrei um único país no mundo que adotasse uma lei que o impedisse de colocar a palavra "Batata" no cabeçalho do P3P
  2. O Google e o Facebook colocam um link no campo de cabeçalho P3P, referindo-se a uma página que descreve por que eles não têm um cabeçalho P3P.

O conceito nasceu em 2002 e me deixa perplexo que esse conceito desatualizado e legalmente não implementado ainda seja imposto aos desenvolvedores no IE. Se esse cabeçalho não tiver ramificações legais, ele deverá ser ignorado (ou, alternativamente, gerar um aviso ou notificação no console). Não forçado! Agora sou forçado a colocar uma linha no meu código (e enviar um cabeçalho para o cliente) que não faz absolutamente nada.

Em resumo - para manter o IE feliz - adicione a seguinte linha ao seu código PHP (Outras linguagens devem ser similares)

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

Problema resolvido, e o IE está feliz com esta batata.

Ruben
fonte
6
De fato, o problema mudou significativamente desde 2008, quando foi publicado. A Web seguiu em frente, e o consenso sobre o P3P se baseou em "ninguém mais se importa". É bom saber o que o IE faz com entrada inválida neste caso.
Piskvor saiu do prédio
19
Oh cara, essa é uma daquelas jóias escondidas do Internet Explorer! HttpContext.Current.Response.AddHeader ("p3p", "CP = \" O Internet Explorer foi programado por idiotas \ ""); Aquele funciona para mim!
precisa
6
@Mvision Não culpe os desenvolvedores, esta é uma questão relacionada a advogados e gerência? Eu estou supondo que a maioria desenvolvedor sabia que o recurso resultaria em Potato como soluções :-)
KajMagnus
5
Para o ASP.Net, você pode adicioná-lo à sua configuração da web: '<system.webServer> <handlers> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP =" O Internet Explorer requer isso para Definir cookies de terceiros " /> </customHeaders> </httpProtocol> </handlers> </system.webServer> '
Rick Kierner
11
Oh, isso precisa ser maior! Passei horas tentando fazer com que os cookies funcionassem em um iframe do IE 11. Tentando todos os tipos de combinações de P3P e obtendo vários resultados, dependendo do tipo / expiração do cookie. Finalmente colocando Potatono meu P3P resolveu. haha!
dtbaker
55

Consegui fazer com que o mau olhado desaparecesse simplesmente adicionando este pequeno cabeçalho ao site no IFrame (solução PHP):

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

Lembre-se de pressionar ctrl + F5 para recarregar seu site ou o Explorer ainda pode mostrar o mau-olhado, apesar de estar funcionando bem. Esta é provavelmente a principal razão pela qual tive tantos problemas para fazê-lo funcionar.

Nenhum arquivo de políticas foi necessário.

Edit: Encontrei uma boa entrada de blog que explica o problema com cookies nos IFrames. Ele também possui uma correção rápida no código C #: quadros, páginas ASPX e cookies rejeitados

Helo
fonte
10
IANAL, mas a política do P3P parece ser juridicamente vinculativa. Você está ciente do que promete aos usuários aqui ou apenas misturou tags até o EvilEye desaparecer? Acho que o cache do navegador não será o seu maior problema com estes: " NOI : O site não coleta dados identificados. STP : As informações são retidas para atender ao objetivo declarado. Isso requer que as informações sejam descartadas o mais rápido possível. Os sites DEVEM tenha uma política de retenção que estabeleça um cronograma de destruição. A política de retenção DEVE ser incluída ou vinculada à política de privacidade legível por humanos do site. "
Piskvor saiu do prédio em
28
Devo admitir que realmente não me importo com o que isso significa, só precisava de coisas para trabalhar no Explorer. Os sites são nossos próprios sites não públicos, um dos quais usa um cookie para 'lembrar' em qual estilo exibir o site. Então, sim, apenas misturei tags até que o mau-olhado desaparecesse.
Helo
Encontrado uma entrada agradável blog que explica o problema aqui: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo
6
A crescente irrelevância de P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Se for tão juridicamente vinculativo, haveria precedência no processo por provar isso agora. É visto com tanta estima que quase todos os meus concorrentes se incomodam em publicar um em primeiro lugar. Eles devem entender que, se seus clientes não puderem deixar a configuração do IE no Medium, eles não valerão o esforço. As vendas perdidas em um site teriam que ser bem altas se os cookies não funcionassem, o carrinho morreria sem eles.
Fiasco Labs
3
Esta resposta sugere o uso de um cabeçalho fictício como CP="This_is_not_a_privacy_policy". Fazer isso parece menos juridicamente vinculativo, acho que (uma vez que, por exemplo NOI e STP e nada como que em tudo é mencionado), e, aparentemente, faz IE feliz :-)
KajMagnus
21

Isso está enterrado nos comentários de outras respostas, mas eu quase perdi, então parece que merece sua própria resposta.

Para revisar: para que o IE aceite cookies de terceiros, você precisa enviar seus arquivos com um cabeçalho http chamado p3p no formato:

CP="my compact p3p policy"

MAS, o p3p está praticamente morto como padrão neste momento e você pode facilmente fazer o IE funcionar sem investir tempo e recursos legais na criação de uma política real do p3p. Isso ocorre porque, se o cabeçalho compacto da política p3p for inválido, o IE realmente o trata como uma boa política e aceita cookies de terceiros. Então você pode usar um cabeçalho p3p como este

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

Como opção, você pode incluir um link para uma página que explique por que você não possui uma política p3p, como o Google e o Facebook (eles apontam aqui: https://support.google.com/accounts/answer/151657 e aqui: https : //www.facebook.com/help/327993273962160/ ).

Por fim, é importante observar que todos os arquivos veiculados no site de terceiros precisam ter o cabeçalho p3p, não apenas o que define o cookie, portanto, talvez você não consiga fazer isso apenas no PHP, asp.net, etc. código. Você provavelmente está melhor configurando no nível do servidor web (ou seja, no IIS ou Apache).

David Hammond
fonte
20

Também tive esse problema, pensei em publicar o código que usei no meu projeto MVC2. Tenha cuidado quando, no ciclo de vida da página, você adicionar no cabeçalho ou obter uma HttpException "O servidor não pode anexar cabeçalho após o envio dos cabeçalhos HTTP ". Usei um ActionFilterAttribute personalizado no método OnActionExecuting (chamado antes da execução da ação).

/// <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);
    }
}

Exemplo de uso:

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

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}
daniellmb
fonte
14

Este é um ótimo tópico sobre o assunto, no entanto, descobri que um detalhe importante (que era essencial pelo menos no meu caso) que não foi publicado aqui ou em qualquer outro lugar (peço desculpas se perdi) foi que a linha P3P deve ser passou no cabeçalho de TODOS os arquivos enviados do servidor de terceiros, mesmo arquivos que não definem ou usam cookies, como imagens ou arquivos Javascript. Caso contrário, os cookies serão bloqueados. Eu tenho mais sobre isso em um post aqui: http://posheika.net/?p=110

Juris
fonte
5

Qualquer pessoa com esse problema no node.js.

Em seguida, adicione este módulo p3p e ative esse módulo no middleware.

npm install p3p

Como estou usando o express, adiciono-o no app.js

Primeiro, exija esse módulo no app.js

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

então use-o como middleware

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

Ele adicionará cabeçalhos p3p no objeto res. Não há necessidade de fazer nada extra.

Você obterá mais informações em:

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

Harshal_m_joshi
fonte
5

Se alguém estiver procurando pela linha Apache; nós usamos este.

Conjunto de cabeçalhos P3P "CP = \" Obrigado IE8 \ ""

Realmente não importava o valor que definimos para o CP, desde que houvesse o cabeçalho P3P.

so_mv
fonte
4

Uma possível coisa a fazer é adicionar o domínio aos sites permitidos nas ferramentas -> opções da Internet -> privacidade -> sites: somedomain.com -> permitir -> OK.

heikkim
fonte
23
Sim, se você se importa apenas que ele funcione no seu computador. Não é totalmente prático sugerir isso a todos os visitantes.
Piskvor saiu do prédio
3

Este post fornece alguns comentários sobre o P3P e uma solução de atalho que reduz os problemas com o IE7 e IE8.

Henrik Aasted Sørensen
fonte
11
Para citar o artigo: "basicamente diz:" Não estamos coletando nenhum dos seus dados pessoais "" - boa sorte com isso. Eu já vi zero sites que realmente cumprem os tokens definidos nessa política (sem coletar nenhum dado , nem mesmo dados estatísticos anônimos - logs de acesso ao servidor, alguém?). A outra política oferecida também é bastante difícil de alcançar (você tem algum tipo de análise da Web? Bam, você acabou de quebrar sua política do P3P). Portanto, o artigo pode ser resumido como "apenas mentir descaradamente, ninguém se importa". Artigo mais útil em toda a Internet , de fato.
Piskvor saiu do prédio
Para citar outra parte do artigo: "Há surpreendentemente pouca informação gratuita e boa na Internet sobre P3P, políticas compactas e requisitos do IE7 - e o IE7 não fornece absolutamente nenhuma saída útil de depuração, como por que o seu cookie foi bloqueado". Isso parece ser completamente verdade! Depois de passar a maior parte do dia tentando descobrir por que o IE7 / 8 se comportava de maneira diferente de qualquer outro navegador, fiquei extremamente feliz em encontrar este post. Provavelmente é hora de perceber que o P3P é uma especificação morta e que a maioria das pessoas prefere apenas contorná-la. Este post é provavelmente o mais útil sobre o assunto.
Henrik Aasted Sørensen
"Há surpreendentemente pouca informação gratuita e boa na internet" - isso poderia ter sido verdade em 2007 (quando foi escrito), mas agora há muita informação na Internet, até mesmo ferramentas gratuitas que ajudam a construir a política do P3P de acordo com sua situação específica. Não estou defendendo o P3P, mas dizer "e-se, basta fazê-lo desaparecer" pode ter consequências caras (como você está fazendo reivindicações muito inequívocas sobre o seu site) .Se o P3P é realmente juridicamente vinculativo, não ' ainda não foi testado (IIRC), mas eu não gostaria de estar no final do processo.
Piskvor saiu do prédio
11
@Piskvor - Por favor, publique as ferramentas P3P gratuitas. Todos os que eu tento acessar foram comprados por fazendas de links e pesquisa falsa. A IBM retirou sua ferramenta gratuita. Apoio P3P parece ser como a erva morrendo em uma seca em 2012.
Fiasco Labs
2
Encontrado o editor p3p IBM Alphaworks aqui na Softpedia: softpedia.com/get/Security/Security-Related/...
Fiasco Labs
3

Uma solução que eu não vi mencionada aqui, está usando o armazenamento de sessão em vez de cookies. É claro que isso pode não atender aos requisitos de todos, mas, em alguns casos, é uma solução fácil.

ripper234
fonte
11
Bom ponto. Observe que no momento em que essa pergunta foi postada, o suporte ao armazenamento de sessões não existia, principalmente no IE. Mas os tempos estão mudando;)
Piskvor deixou o prédio
3

Eu estava investigando esse problema com relação ao logon pelos Serviços de Controle de Acesso do Azure e não conseguia conectar nada.

Em seguida, deparei com esta publicação https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/

Em resumo, o IE não compartilha cookies entre zonas (por exemplo, Internet x sites confiáveis).

Portanto, se o seu destino IFrame e a página html estiverem na zona diferente, o P3P não ajudará em nada.

Frode Nilsen
fonte
Estou surpreso que isso ainda seja relevante em 2016 :)
Piskvor saiu do prédio 06/04
11
Status para P3P no IE está documentado aqui: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , o brilhante futuro parece :)
Frode Nilsen
2

Eu implementei uma política completa do P3P antes, mas não queria passar pelo aborrecimento novamente para um novo projeto no qual estava trabalhando. Eu achei esse link útil para uma solução simples para o problema, apenas precisando especificar uma política P3P compacta mínima de "CAO PSA OUR":

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

O artigo cita um link (agora quebrado) para um artigo da Microsoft kb. A política fez o truque para mim!

Joel Mitchell
fonte
1

Você também pode combinar os arquivos p3p.xml e policy.xml da seguinte maneira:

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

Achei que a maneira mais fácil de adicionar um cabeçalho é proxy através do Apache e use mod_headers, como tal:

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

Portanto, proxy todos os pedidos, exceto aqueles para /w3c/p3p.xml, para o nosso servidor de aplicativos.

Você pode testar tudo isso com o validador W3C

Kris
fonte
Isso envia o cabeçalho com 304 solicitações? Algumas versões do IE vai biscoitos realmente exclusão Se você enviar um cabeçalho P3P com um 304.
Joshua
Desculpe, não sei, pois não trabalho mais nesse código. Se seu problema de um provavelmente você pode forçar o código de status em Apache para 200.
Kris
1

Se você possui o domínio que precisa ser incorporado , antes de chamar a página que inclui o IFrame, poderá redirecionar para esse domínio, que criará o cookie e o redirecionará de volta, conforme explicado aqui: http: //www.mendoweb. be / blog / internet-explorer-safari-third-party-cookie-problem /

Isso funcionará para o Internet Explorer, mas também para o Safari (porque o Safari também bloqueia os cookies de terceiros).

Mateus
fonte
1

Sei que é um pouco tarde para colocar minha contribuição nesse assunto, mas perdi tantas horas que talvez essa resposta ajude alguém.

Eu estava tentando chamar um cookie de terceiros no meu site e, claro, ele não estava funcionando no Internet Explorer 10, mesmo com um nível de segurança baixo ... não me pergunte o porquê. No iframe, eu estava chamando um read_cookie.php (eco $ _COOKIE) com ajax.

E não sei por que não consegui definir a política do P3P para resolver o problema ...

Durante minha pesquisa, vi algo sobre como o cookie no JSON estava funcionando. Eu nem tento, porque pensei que se o cookie não passasse por um iframe, ele não passaria mais por uma matriz ...

Adivinha o que faz! Portanto, se você json_encode seu cookie e decodificar após sua solicitação de ajax, você o receberá!

Talvez haja algo que eu perdi e, se o fiz, todas as minhas desculpas, mas eu nunca vi algo tão estúpido. Bloquear cookies de terceiros por segurança, por que não, mas deixar passar se codificado? Onde está a segurança agora?

Espero que este post ajude alguém e, novamente, se eu perdi alguma coisa e sou burro, por favor, me educe!

pierreaurelemartin
fonte
Interessante ... então você está decodificando o cookie em JS?
Piskvor saiu do prédio 14/12/12
Não, estou apenas escrevendo o cookie em uma matriz JSON com a função php json_encode () e depois voltando através da chamada JSON ajax.
pierreaurelemartin
1

Isso finalmente funcionou para mim (depois de muita pressa e gerando algumas políticas usando o gerador de políticas da IBM). Você pode fazer o downlod do gerador de políticas aqui: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml

Não consegui mais baixar o gerador do site oficial da IBM.

Criei esses arquivos na pasta raiz do meu Web-App

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: Basta enviar um cabeçalho adicional:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Conteúdo de p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Conteúdo do meu arquivo 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. Conteúdo de 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
fonte
Vai para o diretório do servidor da janela pai ou para o diretório do servidor iframe?
JackTheKnife
0

Para quem está tentando fazer com que a política compacta do P3P funcione com conteúdo estático:

É possível se você é capaz de enviar cabeçalhos de resposta personalizado do lado do servidor com o conteúdo estático.

Para uma explicação mais detalhada, veja minha resposta aqui: Defina o código P3P em HTML

Sly_cardinal
fonte
-1

Uma solução melhor seria fazer uma chamada Ajax dentro do iframe para a página que obteria / definiria cookies ...

Luca Matteis
fonte
11
O AJAX não ajudará aqui: qualquer manipulação de cookies dentro do iframe é menos confiável ("cookies de terceiros") e no IE precisa passar pelo filtro da Política de Privacidade - não importa se você está configurando cookies com chamadas AJAX, documento manipulação de cookies ou através de páginas normais (testadas).
Piskvor deixou o prédio
não, se você fizer uma chamada ajax que define os cookies com HTTP (dentro do iframe), o Ie6 ignora a política de segurança e define o cookie. Certifique-se de que minha solução esteja errada antes da votação.
Luca Matteis
Vejo newmoon.wz.cz/test/page.php . Você pode definir cookies via AJAX, mas você a) inicia uma nova sessão ou b) define o ID da sessão a partir do JS - um enorme furo de segurança (XSRF). errado, peço desculpas. Mas, sua solução parece mais errada do que antes: fazer uma brecha na segurança parece ruim para mim.
Piskvor saiu do prédio
(Qualquer coisa que "ignore a política de segurança" me parece pelo menos um bug - se existe uma política, ela existe por algum motivo. Dizer "estrague a política de segurança / as preferências do usuário, sabemos melhor" é uma ladeira perigosa e escorregadia. , você deixaria a funcionalidade depender de (ainda) erros conhecidos não
corrigidos
Definir uma nova sessão? Do que você está falando? Mais suporte ao navegador isso, sem o material de cabeçalho P3P, então eu não entendo como fazê-lo através do Ajax é diferente ...
Luca Matteis