Cookie заблокирован / не сохранен в IFRAME в Internet Explorer - PullRequest
389 голосов
/ 23 декабря 2008

У меня есть два веб-сайта, скажем, они example.com и anotherexample.net. На anotherexample.net/page.html у меня есть IFRAME SRC="http://example.com/someform.asp". Этот IFRAME отображает форму, которую пользователь может заполнить и отправить на http://example.com/process.asp. Когда я открываю форму ("someform.asp") в своем окне браузера, все работает хорошо. Однако , когда я загружаю someform.asp в качестве IFRAME в IE 6 или IE 7, файлы cookie для example.com не сохраняются. В Firefox эта проблема не появляется.

В целях тестирования я создал аналогичную настройку для http://newmoon.wz.cz/test/page.php.

example.com использует сеансы на основе файлов cookie (и я ничего не могу с этим поделать), поэтому без файлов cookie process.asp не будет выполняться. Как заставить IE сохранить эти куки?

Результаты отслеживания HTTP-трафика: в ответе GET /someform.asp имеется действительный заголовок Set-Cookie для каждой сессии (например, Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY), но в запросе POST /process.asp заголовок Cookie отсутствует все.

Edit3: некоторые серверные сценарии AJAX +, по-видимому, способны обойти проблему, но это очень похоже на ошибку, плюс он открывает целый новый набор дыр в безопасности . Я не хочу, чтобы мои приложения использовали комбинацию баг + дыра в безопасности только потому, что это легко.

Редактировать: основная причина была политика P3P, полное объяснение ниже.

Ответы [ 22 ]

3 голосов
/ 17 апреля 2009

Одна из возможных вещей - добавить домен к разрешенным сайтам в инструментах -> Свойства обозревателя -> Конфиденциальность -> Сайты: somedomain.com -> Разрешить -> ОК.

3 голосов
/ 06 апреля 2016

Я исследовал эту проблему, связанную с выходом из системы через Azure Access Control Services, и не смог соединить все что угодно.

Потом наткнулся на этот пост https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/

Короче говоря, IE не разделяет файлы cookie между зонами (например, Интернет и доверенные сайты).

Так что, если ваша цель IFrame и html-страница находятся в другой зоне, P3P не поможет ни с чем.

2 голосов
/ 21 августа 2009

У меня возникла похожая проблема, я также отправился исследовать, как генерировать политику P3P сегодня утром, вот мой пост о том, как создать свою собственную политику и использовать ее на веб-сайте :) http://everydayopenslikeaflower.blogspot.com/2009/08/how-to-create-p3p-policy-and-implement.html

2 голосов
/ 13 сентября 2011

Я уже реализовал полную политику P3P, но не хотел снова переживать за новый проект, над которым я работал. Я нашел эту ссылку полезной для простого решения проблемы, только для того, чтобы указать минимальную компактную политику P3P «CAO PSA OUR»:

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

Статья цитирует (теперь неработающую) ссылку на статью Microsoft kb. Политика сделала свое дело для меня!

1 голос
/ 12 декабря 2012

Я знаю, что уже поздно вносить свой вклад в эту тему, но я потерял столько часов, что, возможно, этот ответ кому-нибудь поможет.

Я пытался вызвать сторонний файл cookie на моем сайте, и, конечно, он не работал в Internet Explorer 10 даже при низком уровне безопасности ... не спрашивайте меня, почему. В iframe я вызывал read_cookie.php (echo $ _COOKIE) с помощью ajax.

И я не знаю, почему я не смог установить политику P3P для решения проблемы ...

Во время поиска я увидел кое-что о том, как заставить работать cookie в JSON. Я даже не пробовал, потому что думал, что если cookie не пройдет через iframe, он больше не пройдет через массив ...

Угадай что, это делает! Так что, если вы json_encode своего cookie, а затем декодировать после вашего запроса ajax, вы получите его!

Может быть, я что-то пропустил, и если я это сделал, все мои извинения, но я никогда не видел такой глупости. Блокируйте сторонние куки для безопасности, почему бы и нет, но пропустите их, если они закодированы? Где сейчас охрана?

Надеюсь, этот пост кому-нибудь поможет и снова, если я что-то пропустил и я тупой, пожалуйста, просветите меня!

1 голос
/ 26 февраля 2015

Это, наконец, сработало для меня (после долгих хлопот и генерации некоторых политик с использованием генератора политик IBM). Вы можете скачать генератор политики здесь: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml

Мне больше не удалось загрузить генератор с официального сайта IBM.

Я создал эти файлы в корневой папке моего Web-приложения

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: Просто отправьте дополнительный заголовок:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Содержимое файла p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Содержимое моего файла policy.html




title { color: #3333FF}

Privacy Statement for YOUR COMPANY NAME


Privacy Policy
<!-- "About Us" section of privacy policy -->
About Us
This is a privacy policy for YOUR COMPANY NAME.
Our homepage on the Web is located at 
YOURWEBSITE.
The full text of our privacy policy is available on the Web at 

ABSOLUTE URL OF THIS FILE
This policy does not tell users where they can go to exercise their opt-in or opt-out options.
We invite you to contact us if you have questions about this policy.
You may contact us by mail at the following address:
FIRSTNAME LASTNAME
YOUR ADDRESS HERE

Вы можете связаться с нами по электронной почте на info@YOURMAIL.eu. Вы можете позвонить нам по телефону. <! - Раздел политики конфиденциальности ->

Печати разрешения споров и конфиденциальности

У нас есть следующие печати и / или механизмы разрешения споров. Если вы считаете, что мы каким-то образом не следовали нашей политике конфиденциальности, они могут помочь вам решить вашу проблему.

  • Спор : Свяжитесь с нами для получения дополнительной информации
<! - Раздел «Дополнительная информация» политики конфиденциальности ->

Дополнительная информация

Эта политика действует в течение 1 дня с момента ее загрузки клиентом.

<! - Раздел «Сбор данных» политики конфиденциальности ->

Сбор данных

Политики P3P объявляют данные, которые они собирают в группы (также называемые «заявлениями»). Эта политика содержит 1 группу данных.


Группа "Управление данными приложения"

Мы собираем следующую информацию:

  • HTTP куки

Эти данные будут использоваться для следующих целей:

  • Завершение и поддержка текущей деятельности.
  • Веб-сайт и системное администрирование.
  • Исследования и разработки.
  • Историческая консервация.
  • Другие цели

    Контроль потока приложения

Эти данные будут использоваться нами и нашими агентами.

Данные в этой группе помечены как неидентифицируемые. Это означает, что нет разумный способ для сайта идентифицировать человека, с которого были собраны эти данные.

Ниже приводится объяснение, почему собираются эти данные:

Эти данные cookie используются только для управления приложением в iframe (например, в приложении Facebook)
<! - Раздел политики использования файлов cookie ->

печенье

Cookies - это технология, которая может использоваться для предоставления вам специализированной информации с веб-сайта. Файл cookie - это элемент данных, который веб-сайт может отправить в ваш браузер, который затем может сохранить его в вашей системе. Вы можете настроить свой браузер так, чтобы он уведомлял вас о получении файла cookie, давая вам возможность решить, принимать ли его.

Наш сайт использует куки. Файлы cookie используются для следующих целей:

  • Администрация сайта
  • Завершение текущей активности пользователя
  • Исследования и разработки
  • Другое (Контроль потока приложения)
<! - Раздел «Компактное объяснение политики» политики конфиденциальности ->

Краткий обзор политики

Компактная политика, которая соответствует этой политике:

    CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV"

Следующая таблица объясняет значение каждого поля в компактной политике.

Поле Значение
CP = Это компактный заголовок политики; это означает, что то, что следует, является компактной политикой P3P.
ALL Доступ ко всей собранной информации доступен.
DSP Политика содержит как минимум один механизм разрешения споров.
NID Собранная информация не может быть идентифицирована.
CURa Данные используются для завершения текущей деятельности.
ADMa Данные используются для администрирования сайта.
DEVa Данные используются для исследований и разработок.
HISa Данные используются для исторических архивных целей.
OTPa Данные используются для других целей.
OUR Данные предоставляются нам и нашим агентам.
NOR Данные не хранятся за пределами текущей транзакции.
NAV Навигация и данные о кликах собраны.

Компактная политика отправляется веб-сервером вместе с файлами cookie, которые она описывает. Для получения дополнительной информации см. Руководство по развертыванию P3P по адресу http://www.w3.org/TR/p3pdeployment. <! - Раздел «Оценка политики» политики конфиденциальности ->


Оценка политики

Microsoft Internet Explorer 6 будет оценивать компактную политику этой политики всякий раз, когда она используется с cookie. Действия IE будут зависеть от того, какой уровень конфиденциальности пользователь выбрал в своем браузере (низкий, средний, средний высокий или высокий; по умолчанию установлен средний. Кроме того, IE проверит, считается ли политика файла cookie удовлетворительной или неудовлетворительной, является ли файл cookie сеансовым или постоянным файлом cookie и используется ли файл cookie в контексте первой или третьей стороны. В этом разделе мы попытаемся сравнить компактную политику этой политики с заявленным поведением Microsoft для IE6.

Примечание: эта оценка в настоящее время является экспериментальной и не должна рассматриваться как замена тестирования с использованием реального веб-браузера.

Удовлетворительная политика : эта компактная политика считается удовлетворительной в соответствии с правилами, определенными в Internet Explorer 6. IE6 будет принимать файлы cookie, сопровождаемые данной политикой, в настройках Высокий, Средний высокий, Средний, Низкий и Принять все файлы cookie.

  1. Содержание 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">info@YOURMAIL.eu</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 голос
/ 27 августа 2014

Если у вас есть домен, который нужно встроить , то перед вызовом страницы, содержащей IFrame, вы можете перенаправить на этот домен, который создаст cookie и перенаправит обратно, как объяснено здесь: http://www.mendoweb.be/blog/internet-explorer-safari-third-party-cookie-problem/

Это будет работать для Internet Explorer, но также и для Safari (поскольку Safari также блокирует сторонние файлы cookie).

1 голос
/ 09 ноября 2012

Вы также можете объединить файлы p3p.xml и policy.xml следующим образом:

/ Главная / Ubuntu / сайты / общий / 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>

Я обнаружил, что самый простой способ добавить заголовок - это прокси через Apache и использовать mod_headers, как таковой:

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

Таким образом, мы перенаправляем все запросы, кроме тех, что /w3c/p3p.xml на наш сервер приложений.

Все это можно проверить с помощью валидатора W3C

0 голосов
/ 18 июня 2015

В Rails 3.2 я использую:

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  

Я получил это от: http://dot -net-web-developer-bristol.blogspot.com / 2012/04 / setting-p3p-header-in-rails-session.html

0 голосов
/ 13 июня 2015

Для всех, кто пытается заставить P3P Compact Policy работать со статическим контентом:

Возможно только , если вы можете отправлять пользовательские заголовки ответа на стороне сервера со статическим содержимым.

Для более подробного объяснения см. Мой ответ здесь: Установить код P3P в HTML

...