Cookie заблокирован / не сохранен в IFRAME в Internet Explorer

392

У меня есть два сайта, скажем, они example.comи anotherexample.net. У anotherexample.net/page.htmlменя есть IFRAME SRC="http://example.com/someform.asp". Этот IFRAME отображает форму, которую пользователь может заполнить и отправить http://example.com/process.asp. Когда я открываю форму (" someform.asp") в своем окне браузера, все работает хорошо. Однако, когда я загружаю someform.aspIFRAME в 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 , полное объяснение которой приведено ниже.

Писквор
источник
действительно хорошее решение .. я попытался создать политику конфиденциальности .. добавлен в мой контекстный корень ... и на моей странице JSP я устанавливаю заголовок .. до сих пор не могу избавиться от этого красного глаза .. можете ли вы помочь я
решаю
Спасибо за демонстрационный сайт @Piskvor, я упомянул его здесь в этом посте Security.SE, в котором перечислены веб-сайты с интерактивными тестами браузера
goodguys_activate
@ makerofthings7: YW. Я перенесу его на временный (sic!) Сайт и предложу отредактировать Security.se, чтобы эта страница была несколько хакерской проверкой концепции.
Писквор покинул здание
2
Не пытайтесь заставить P3P работать в Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). P3P вообще не работает, поэтому независимо от того, что вы делаете, куки не сохраняются. Доказательство здесь также: Eniendie.com/test/cookie
Puco

Ответы:

429

Я получил его на работу, но решение немного сложное, так что терпите меня.

Что происходит

Таким образом, Internet Explorer обеспечивает более низкий уровень доверия страницам IFRAME (IE называет это «сторонним» контентом). Если страница внутри IFRAME не имеет Политики конфиденциальности, ее куки блокируются (что обозначается значком глаза в строке состояния, при нажатии на который отображается список заблокированных URL-адресов).

сглаз
(источник: piskvor.org )

В этом случае, когда куки блокируются, идентификатор сеанса не отправляется, и целевой скрипт выдает ошибку «сеанс не найден».

(Я попытался установить идентификатор сессии в форму и загрузить его из переменных POST. Это сработало бы , но по политическим причинам я не смог этого сделать.)

Можно сделать страницу внутри IFRAME более надежной: если внутренняя страница отправляет заголовок P3P с политикой конфиденциальности, приемлемой для IE, файлы cookie будут приняты .

Как это решить

Создайте политику p3p

Хорошей отправной точкой является учебник по W3C . Я прошел через это, скачал Редактор политики конфиденциальности IBM и там я создал представление политики конфиденциальности и дал ему имя для ссылки на него (здесь оно было policy1).

ПРИМЕЧАНИЕ : на данный момент вам действительно нужно выяснить, есть ли на вашем сайте политика конфиденциальности, а если нет, то создать ее - собирает ли она пользовательские данные, какие данные, что с ними происходит, кто имеет к ней доступ, и т.д. Вам нужно найти эту информацию и подумать об этом. Просто сложив несколько тегов, вы не обрежете его. Этот шаг не может быть сделан исключительно в программном обеспечении и может быть очень политическим (например, «мы должны продавать нашу статистику кликов?»).

(например, «сайт управляется ACME Ltd., он использует анонимные идентификаторы сеанса для своей работы, собирает пользовательские данные только в случае явного разрешения и только для следующих целей, данные хранятся только столько времени, сколько необходимо, только наша компания»). имеет к нему доступ и т. д. и т. д.).

(При редактировании с помощью этого инструмента можно просматривать ошибки / пропуски в политике. Также очень полезна вкладка «Политика HTML»: в нижней части находится «Оценка политики» - быстрая проверка, будет ли политика заблокирована по умолчанию в настройках IE)

Редактор экспортирует в файл .p3p, который представляет собой XML-представление вышеуказанной политики. Кроме того, он может экспортировать «компактную версию» этой политики.

Ссылка на политику

Затем http://example.com/w3c/p3p.xmlпонадобился файл ссылки на политику ( ) (индекс политик конфиденциальности, используемых сайтом):

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

В <INCLUDE>показывает все идентификаторы URI , которые будут использовать эту политику (в моем случае, весь сайт). Файл политики, который я экспортировал из редактора, был загружен вhttp://example.com/w3c/example-com.p3p

Отправьте компактный заголовок с ответами

Я установил веб-сервер на example.com для отправки компактного заголовка с ответами, например так:

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

policyrefявляется относительным URI к файлу ссылки на политику (который, в свою очередь, ссылается на политику конфиденциальности), CPпредставляет собой компактное представление политики. Обратите внимание, что комбинация заголовков P3P в этом примере может не применяться на вашем конкретном веб-сайте; Ваши заголовки P3P ДОЛЖНЫ правдиво представлять вашу собственную политику конфиденциальности!

Прибыль!

В этой конфигурации Evil Eye не появляется, куки сохраняются даже в IFRAME, и приложение работает.

Изменить: Что НЕ делать, если вы не любите защищать от судебных процессов

Несколько человек предложили «просто вставить несколько тегов в заголовок P3P, пока дурной глаз не сдастся».

Теги - это не просто куча битов, они имеют значения реального мира , а их использование дает вам ответственность реального мира !

Например, притворство, что вы никогда не собираете пользовательские данные, может сделать браузер счастливым, но если вы на самом деле собираете пользовательские данные, P3P вступает в противоречие с реальностью. Проще говоря, вы целенаправленно лжете своим пользователям , и в некоторых странах это может быть преступным поведением. Например, «отправляйся в тюрьму, не собирай 200 долларов».

Несколько примеров ( полный набор тегов см. В p3pwriter ):

  • NOI : «Веб-сайт не собирает идентифицированные данные». (как только появится какая-либо настройка, логин или какой-либо сбор данных (***** Analytics, кто-нибудь?), вы должны подтвердить это в своем P3P)
  • STP : Информация сохраняется для достижения заявленной цели. Это требует, чтобы информация была удалена как можно раньше. Сайты ДОЛЖНЫ иметь политику хранения, которая устанавливает расписание уничтожения. Политика хранения ДОЛЖНА быть включена или связана с понятной для человека политикой конфиденциальности сайта. "(Поэтому, если вы отправляете, STPно у вас нет политики хранения, возможно , вы совершаете мошенничество. Насколько это круто? Совсем нет.)

Я не юрист, но я не хочу идти в суд, чтобы узнать, действительно ли заголовок P3P имеет юридическую силу или вы можете пообещать своим пользователям что-нибудь, фактически не желая выполнять свои обещания.

Писквор
источник
Я был выполнен на 95%, но мой заголовок только сказал: P3P: CP = "...." и не включал ссылку на policyref, которая заставляла его работать в IE7, но не IE6 ... теперь работает хорошо. Спасибо!
AndreasKnudsen
4
Ссылка на редактор IBM больше не работает. Через The Wayback Machine мне удалось найти эту рабочую ссылку: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234
34
Некоторые новости по этой теме: - Редактор IBM можно найти по адресу: softpedia.com/get/Security/Security-Related/… -P3P стандарты кажутся «мертвыми». Крупные компании, такие как Google и Facebook, теперь используют недопустимые заголовки P3P для обхода безопасности IE. Смотрите эти сообщения: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/… techpolicy.com/…
Давиде Икарди
7
Другая информация, которая может помочь кому-то с подобной проблемой: из моих тестов, если домены находятся в разных зонах безопасности (например, первая сторона - это Интернет, а третья сторона - это интранет), невозможно принять сторонний файл cookie также, если P3P правильно сконфигурировано. Файл cookie всегда блокируется.
Давиде Икарди
1
Важно отметить, что термин «третье лицо» не так понятен, как можно подумать. Если iframe имеет стороннее содержимое относительно вложенного сайта и имеет действующую политику конфиденциальности, и он перенаправляет на представление в iframe, исходящее от основного сайта, то, если у этого представления нет действительной политики конфиденциальности, IE не будет доверяй его куки. Даже если это представление происходит с того же сайта, что и сайт, содержащий iframe.
Тарифы
168

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

Я заметил, что концепция P3P очень устарела и, похоже, действительно используется / поддерживается Internet Explorer (IE).

Самое простое объяснение: IE хочет, чтобы вы определяли заголовок P3P, если вы используете куки.

Это хорошая идея, и, к счастью, в большинстве случаев отсутствие этого заголовка не вызовет проблем (прочитайте предупреждения браузера). Если ваш веб-сайт / веб-приложение не загружено на другой веб-сайт с использованием (i) Frame. Это где IE становится огромной болью в ***. Это не позволит вам установить cookie, если не установлен заголовок P3P.

Зная это, я хотел найти ответ на следующие два вопроса:

  1. Какая разница? Другими словами, можно ли подать в суд, если я добавлю слово «Картофель» в заголовок?
  2. Что делают другие компании?

Мои выводы:

  1. Никого не волнует. Я не могу найти ни одного документа, который предполагает, что эта технология имеет какой-либо юридический вес. Во время моего исследования я не нашел ни одной страны в мире, которая приняла бы закон, который запрещает вам добавлять слово «Картофель» в заголовок P3P.
  2. И Google, и Facebook помещают ссылку в поле заголовка P3P, ссылающуюся на страницу, объясняющую, почему у них нет заголовка P3P.

Концепция родилась в 2002 году, и меня сбивает с толку тот факт, что эта устаревшая и юридически невыполненная концепция все еще навязывается разработчикам в IE. Если этот заголовок не имеет каких-либо юридических последствий, этот заголовок следует игнорировать (или, альтернативно, генерировать предупреждение или уведомление в консоли). Не применяется! Теперь я вынужден вставить строку в мой код (и отправить заголовок клиенту), которая абсолютно ничего не делает.

Короче говоря - чтобы IE был доволен - добавьте следующую строку в ваш PHP-код (другие языки должны выглядеть одинаково)

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

Проблема решена, и IE доволен этой картошкой.

Рубен
источник
6
Действительно, проблема значительно изменилась с 2008 года, когда она была опубликована. Сеть пошла дальше, и консенсус по P3P основывался на том, что «никого больше не волнует». Полезно знать, что IE делает с неверным вводом в этом случае.
Писквор покинул здание
19
О, чувак, это одна из тех скрытых жемчужин интернет-проводника! HttpContext.Current.Response.AddHeader ("p3p", "CP = \" Internet Explorer был запрограммирован идиотами \ ""); Это работает для меня!
Michiel Cornille
6
@ Mvision Не вините разработчиков, это скорее проблема, связанная с юристами и менеджментом? Я предполагаю, что большинство разработчиков понимали, что эта функция приведет к решениям, подобным Potato :-)
KajMagnus
5
Для ASP.Net вы можете добавить это в свою веб-конфигурацию: '<system.webServer> <обработчики> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP = & Internet Explorer" Требуется это для того, чтобы Установить сторонние файлы cookie & quot; " /> </ customHeaders> </ httpProtocol> </ handlers> </system.webServer> '
Рик Кирнер
1
О, это должно быть выше! Я потратил часы, пытаясь заставить куки работать в IE 11 iframe. Попробовать всевозможные комбинации P3P и получить различные результаты в зависимости от типа / срока действия cookie. Наконец, положив Potatoв мой P3P решил это. ха - ха!
dtbaker
55

Мне удалось избавиться от дурного глаза, просто добавив этот небольшой заголовок на сайт в IFrame (решение PHP):

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

Не забудьте нажать Ctrl + F5, чтобы перезагрузить ваш сайт, иначе Explorer может по-прежнему показывать сглаз, несмотря на то, что он работает нормально. Вероятно, это главная причина, почему у меня было так много проблем, чтобы заставить его работать.

Никакой файл политики не был необходим вообще.

Изменить: я нашел хорошую запись в блоге, которая объясняет проблему с куки в IFrames. Также есть быстрое исправление в коде C #: фреймы, страницы ASPX и отклоненные куки

Helo
источник
10
IANAL, но политика P3P представляется юридически обязательной. Вы в курсе , что вы обещали пользователь здесь, или же вы просто смешать тег пока EvilEye не исчезли? Я думаю, что кеширование в браузере не будет для вас самой большой проблемой: « NOI : веб-сайт не собирает идентифицированные данные. STP : информация сохраняется для достижения заявленной цели. Для этого требуется, чтобы информация была удалена в кратчайшие возможные сроки. Сайты ДОЛЖНЫ иметь политику хранения, которая устанавливает таблицу времени уничтожения. Политика хранения ДОЛЖНА быть включена или понятна из понятной человеку политики конфиденциальности сайта ».
Писквор покинул здание
28
Я должен признать, что мне все равно, что это значит, мне просто нужно что-то для работы в Explorer. Эти сайты являются нашими собственными непубличными сайтами, один из которых использует cookie, чтобы «запомнить», в каком стиле показывать сайт. Так что да, я просто смешивал теги, пока сглаз не исчез.
Helo
Нашел хорошую запись в блоге, которая объясняет проблему здесь: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo
6
Растущая нерелевантность P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Если это будет иметь обязательную юридическую силу, будет иметь место судебный процесс, доказывая это. Это рассматривается с таким уважением, что все, кроме одного из моих конкурентов, даже не удосужились опубликовать его. Они должны понять, что если их клиенты не могут оставить настройку IE на Medium, они не стоят усилий. Потеря продаж на одном сайте должна быть довольно высокой, если куки не работают, корзина умирает без них.
Fiasco Labs
3
Этот ответ предлагает использовать фиктивный заголовок, как CP="This_is_not_a_privacy_policy". Я думаю, что выполнение этого менее юридически обязательно (поскольку, например, упоминаются NOI и STP и вообще ничего подобного, и, по-видимому, делает IE счастливым :-)
KajMagnus
21

Это скрыто в комментариях к другим ответам, но я почти пропустил это, так что, похоже, он заслуживает своего собственного ответа.

Чтобы проверить: для того, чтобы IE принял сторонние файлы cookie, вам необходимо предоставить файлы с заголовком http, называемым p3p, в формате:

CP="my compact p3p policy"

НО, p3p в значительной степени мертв как стандарт на данный момент, и вы можете легко заставить IE работать, не тратя время и юридические ресурсы на создание реальной политики p3p. Это происходит потому, что если ваш компактный p3p-заголовок политики недействителен, IE фактически воспринимает его как хорошую политику и принимает сторонние файлы cookie. Таким образом, вы можете использовать p3p заголовок, такой как этот

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

При желании вы можете включить ссылку на страницу, которая объясняет, почему у вас нет политики p3p, как это делают Google и Facebook (они указывают здесь: https://support.google.com/accounts/answer/151657 и здесь: https : //www.facebook.com/help/327993273962160/ ).

Наконец, важно отметить, что все файлы, обслуживаемые сторонним сайтом, должны иметь заголовок p3p, а не только тот, который устанавливает cookie, поэтому вы не сможете просто сделать это в своем PHP, asp.net и т. Д. код. Вам, вероятно, лучше настроить на уровне веб-сервера (т.е. в IIS или Apache).

Дэвид Хаммонд
источник
20

У меня тоже была эта проблема, я решил опубликовать код, который использовал в своем проекте MVC2. Будьте осторожны, когда в жизненном цикле страницы вы добавляете заголовок, или вы получите HttpException « Сервер не может добавить заголовок после отправки заголовков HTTP ». Я использовал собственный ActionFilterAttribute в методе OnActionExecuting (вызывается перед выполнением действия).

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

Пример использования:

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

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}
daniellmb
источник
14

Это отличная тема по этому вопросу, однако я обнаружил, что одна важная деталь (которая была необходима, по крайней мере, в моем случае), которая не была размещена здесь или где-либо еще (я прошу прощения, если я ее пропустил), заключалась в том, что линия P3P должна быть передается в заголовке КАЖДОГО файла, отправляемого со стороннего сервера, даже если файлы не настроены или не используют файлы cookie, такие как файлы Javascript или изображения. В противном случае куки будут заблокированы. У меня есть больше об этом в сообщении здесь: http://posheika.net/?p=110

Juris
источник
5

Любой, имеющий эту проблему в node.js.

Затем добавьте этот модуль p3p и включите этот модуль в промежуточном программном обеспечении.

npm install p3p

Я использую экспресс, поэтому я добавляю его в app.js

Сначала требуется этот модуль в app.js

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

затем использовать его в качестве промежуточного программного обеспечения

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

Это добавит p3p заголовки к объекту res. Не нужно делать никаких дополнительных вещей.

Вы получите больше информации по адресу:

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

Harshal_m_joshi
источник
5

Если кто-то ищет линию Apache; мы использовали это.

Заголовок установлен P3P "CP = \" Спасибо IE8 \ ""

Это действительно не имело значения, какое мы устанавливаем значение CP, пока существует заголовок P3P.

so_mv
источник
4

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

heikkim
источник
23
Да, если вам важно, чтобы он работал на вашем компьютере. Не совсем практично предлагать это каждому посетителю.
Писквор покинул здание
3

Этот пост содержит некоторые комментарии к P3P и краткому решению, которое уменьшает проблемы с IE7 и IE8.

Хенрик Аастед Серенсен
источник
1
Процитирую статью: «в основном говорится:« Мы не собираем ваши личные данные »» - удачи вам в этом. Я видел ноль сайтов, которые фактически соответствуют токенам, установленным в этой политике (вообще не собирая никаких данных , даже анонимных статистических данных - журналы доступа к серверу, кто-нибудь?). Другая предлагаемая политика также довольно трудна для выполнения (у вас есть какая-либо веб-аналитика? Бэм, вы только что нарушили свою политику P3P). Таким образом, статью можно охарактеризовать как «просто нагло врать, все равно все равно». Действительно, самая полезная статья в Интернете .
Писквор покинул здание
Цитирую другую часть статьи: «На удивление мало хорошей бесплатной информации в Интернете о P3P, компактных политиках и требованиях IE7 - и IE7 не дает абсолютно никаких полезных результатов отладки, например, почему ваш cookie был заблокирован». Это кажется полностью правдой! Потратив большую часть моего дня, пытаясь выяснить, почему IE7 / 8 вел себя не так, как любой другой браузер, я был очень рад найти этот пост. Вероятно, пришло время осознать, что P3P - мертвая спецификация, и что большинство людей предпочли бы просто обойти это. Этот пост, пожалуй, самый полезный на эту тему.
Хенрик Аастед Серенсен
«На удивление мало хорошей бесплатной информации в Интернете» - это могло бы быть правдой в 2007 году (когда она была написана), но в Интернете сейчас много информации, даже бесплатных инструментов, которые помогут вам построить политику P3P в соответствии с Ваша конкретная ситуация. Я не защищаю P3P, но высказывание «да пошло, просто убери его» может иметь дорогостоящие последствия (поскольку вы делаете очень однозначные заявления о вашем сайте). Действительно ли P3P юридически обязателен не Я еще не проходил тестирование (IIRC), но я бы не хотел участвовать в этом иске.
Писквор покинул здание
1
@Piskvor - Пожалуйста, опубликуйте бесплатные инструменты P3P. Все те, на которые я пытаюсь пойти, были скуплены фермой ссылок и поддельным поиском. IBM вытащил их бесплатный инструмент. Поддержка P3P, похоже, умирает от засухи в 2012 году.
Fiasco Labs
2
Здесь вы найдете p3p-редактор IBM Alphaworks на софтпедиа: softpedia.com/get/Security/Security-Related/…
Fiasco Labs
3

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

ripper234
источник
1
Хорошая точка зрения. Обратите внимание, что на момент публикации этого вопроса, поддержка хранения сессии отсутствовала, особенно в IE. Но времена, они меняются;)
Писквор покинул здание
3

Я исследовал эту проблему, связанную с выходом из системы через 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 не поможет ни с чем.

Фроде Нильсен
источник
Я удивлен, что это все еще актуально в 2016 году :)
Писквор покинул здание
1
Статус для P3P в IE задокументирован здесь: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , будущее выглядит ярко :)
Frode Nilsen
2

Получил аналогичную проблему, а также пошел, чтобы исследовать, как генерировать политику P3P сегодня утром, вот мой пост о том, как создать свою собственную политику и использовать на веб-сайте :) http://everydayopenslikeaflower.blogspot.com/2009/08/ как к создать-P3P-политики-и-implement.html

пинг
источник
2

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

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

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

Джоэл Митчелл
источник
1

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

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

Я обнаружил, что самый простой способ добавить заголовок - это прокси через 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

Kris
источник
Это отправляет заголовок с 304 запросами? Некоторые версии IE фактически удаляют файлы cookie, если вы отправляете P3P-заголовок с номером 304.
Джошуа
Извините, я не знаю, так как я больше не работаю над этим кодом. Если это проблема, вы, вероятно, можете принудительно установить код состояния в Apache на 200.
Kris
1

Если у вас есть домен, который необходимо встроить , то перед вызовом страницы, содержащей IFrame, вы можете перенаправить на этот домен, который создаст cookie и перенаправит обратно, как описано здесь: http: //www.mendoweb. быть / блог / интернет-исследователь-сафари-третьи стороны-печенье проблема /

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

Мэтью
источник
1

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

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

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

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

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

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

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

pierreaurelemartin
источник
Интересно ... так ты расшифруешь куки в JS?
Писквор покинул здание
Нет, я просто записываю cookie в массив JSON с помощью функции php json_encode (), а затем возвращаюсь с помощью вызова JSON ajax.
Pierreaurelemartin
1

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

Я больше не мог скачивать генератор с официального сайта IBM.

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

/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

<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:info@YOURMAIL.de">
info@YOURMAIL.eu</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. Содержание 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>
Себастьян Букпеш
источник
Это идет к директории сервера родительского окна или директории сервера iframe?
JackTheKnife
0

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

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

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

оборота Sly_cardinal
источник
-1

Лучшим решением было бы сделать Ajax-вызов внутри iframe на страницу, которая получит / установит куки ...

Лука Маттеис
источник
1
AJAX здесь не поможет: любая обработка файлов cookie внутри iframe менее надежна («сторонние файлы cookie»), и в IE необходимо пройти через фильтр политики конфиденциальности - независимо от того, устанавливаете ли вы файлы cookie с помощью вызовов AJAX, документ .cookie манипуляции или через нормальные страницы (проверено).
Писквор покинул здание
нет, если вы делаете ajax-вызов, который устанавливает куки с HTTP (внутри iframe), то Ie6 обходит политику безопасности и устанавливает куки. Пожалуйста, убедитесь, что мое решение не так, прежде чем голосовать.
Лука Маттеис
См. Newmoon.wz.cz/test/page.php. Вы можете установить куки через AJAX, но вы либо: а) начинаете новый сеанс, либо б) устанавливаете идентификатор сеанса из JS - огромная дыра в безопасности (XSRF). Мой предыдущий комментарий был неправильно, я прошу прощения. Но ваше решение выглядит не так, как раньше: создание дыры в безопасности кажется мне плохим.
Писквор покинул здание
(Все, что «обходит политику безопасности» выглядит для меня, по крайней мере, ошибкой - если есть политика, то она есть по какой-то причине. Сказать «испортить политику безопасности / пользовательские настройки, мы знаем лучше» - это опасный скользкий путь. , не могли бы вы позволить функциональности зависеть от (пока) нефиксированных известных ошибок?)
Писквор покинул здание
Установить новый сеанс? О чем ты говоришь? Большинство браузеров поддерживают это, без заголовка p3p, поэтому я не понимаю, как это сделать с помощью Ajax - это как-то иначе ...
Luca Matteis