Невозможно установить куки в IFRAME в IE, даже с заголовком P3P

Я видел здесь много постов о том, как заставить куки работать внутри iframe в IE, и я попробовал несколько решений, но пока не повезло. Вот с чем я имею дело:

  • У меня есть iframe, созданный с помощью Javascript на сайте клиента (виджет). Я не контролирую сайт клиента. Мне нужно установить куки, чтобы пользователь вошел в систему в iframe, и это работает в Chrome и Firefox, но не в IE 7/8. Я не тестировал IE 6, но я предполагаю, что у него та же проблема.

  • Я создал политику P3P с помощью редактора политики IBM, и редактор сказал, что компактная политика приемлема для безопасности IE, независимо от того, установлена ​​она на Низкий, Средний или Высокий. CP, который я использую:

P3P: policyref="/w3c/p3p.xml" CP="CAO DSP COR CURa ADMa DEVa PSAa PSDa CONi TELi OUR IND PHY ONL UNI COM NAV INT DEM CNT PRE" (Я пробовал несколько других КП, которые люди говорят, что работают, но не видел никакой разницы в результате.)

  • Веб-сервер (NGINX) обслуживает этот заголовок P3P с каждым файлом. Я не обслуживаю это из кода.

  • Файл p3p.xml существует и соответствует компактной политике. P3p.xml проверяется с использованием валидатора W3C P3P.

  • Даже с заголовком P3P (независимо от того, какой я пробовал), IE дает мне "сглаз" в строке состояния внизу и не позволяет мне устанавливать куки. Они отображаются как заблокированные в отчете о конфиденциальности.

  • Я прочитал пост Писквора на SO по этой теме: Cookie заблокирован / не сохранен в IFRAME в Internet Explorer, но я не смог воспроизвести то, что он смог сделать, на его демонстрационном сайте: http://newmoon.wz.cz/test/page.php?send_p3p=1. Я предполагаю, что это потому, что я получаю сглаз, а он нет. Я сделал все, о чём я читал, как рекомендацию, чтобы избавиться от зла, но всё же это сохраняется. Издеваться надо мной

  • Моя тестовая страница здесь, если вы хотите попробовать ее: http://truelike.com/js/bobs/frametest.php Страницы set/read работают нормально при просмотре за пределами iframe, но не работают вообще внутри при использовании IE.

  • Для справки, я использую PHP на серверной части.

Любая помощь будет высоко ценится - мы впадаем в отчаяние.

Спасибо!

2 ответа

Решение

Итак, я решил это сам. Похоже, что проблема была в HTTPUserIDModule NGINX (http://wiki.nginx.org/HttpUserIdModule). Я использовал это для отправки заголовка P3P, но nginx не отправлял заголовок последовательно, возможно, из-за этой строки в их документации:

Директива присваивает значение заголовку P3P, который будет отправлен вместе с cookie.

Я видел, как проходили заголовки при проверке с помощью curl или lynx, но не при проверке с помощью Firebug или Charles. Возможно, есть опция конфигурации, чтобы это исправить, но я не смог ее найти.

В любом случае, если вы извлекаете директиву заголовка OUT из HTTPUserIdModule и просто отправляете заголовок вручную в коде, это работает. Вероятно, это сработает, если вы вручную отправите заголовок, используя HTTPHeadersModule http://wiki.nginx.org/HttpHeadersModule, но я еще не проверял это.

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

Кроме того, мой CP был явно слишком агрессивным, несмотря на то, что редактор политики IBM сказал, что все в порядке. Я использовал более простой CP, и это сработало.

Изменения в nginx 0.8.20
Исправлено: строки заголовка ответа FastCGI "Set-Cookie" и "P3P" не были скрыты при кэшировании, если с какими-либо параметрами не использовались директивы fastcgi_hide_header.

Nginx Журнал изменений

Другие вопросы по тегам