Файл 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.aspяк IFRAME в IE 6 або IE 7, файли cookie для example.com не зберігаються. У Firefox ця проблема не з’являється.

З метою тестування я створив подібну установку на http://newmoon.wz.cz/test/page.php .

example.comвикористовує сеанси на основі файлів cookie (і я нічого не можу з цим зробити), тому без файлів cookie process.aspне виконується. Як змусити IE зберегти ці файли cookie?

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

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

Редагувати: основна причина була політикою P3P , повне пояснення нижче.


гарне рішення дійсно .. Я спробував створити політику конфіденційності .. додав до свого корінця контексту ... і на своїй сторінці jsp я встановлюю заголовок .. все ще не в змозі позбутися цього червоних очей .. Чи можете ви допомогти я вирішив проблему ..
user902490,


@ makerofthings7: YW. Я перенесу його на не тимчасовий (sic!) Сайт і запропоную редагувати на Security.se, ця сторінка була дещо хиткою доказовою концепцією.
Пісквор вийшов з будівлі

2
Не намагайтесь зробити P3P запуск у Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). P3P взагалі не працює, тому незалежно від того, що ви робите, файли cookie не зберігатимуться. Підтвердженням також є посилення.com
test/cookie

Відповіді:


429

Я змусив його працювати, але рішення трохи складне, тож потерпіть мене.

Що відбувається

Наразі Internet Explorer надає нижчий рівень довіри сторінкам IFRAME (IE називає цей "сторонній" вміст). Якщо на сторінці всередині IFRAME немає Політики конфіденційності, її файли cookie блокуються (що вказується піктограмою ока в рядку стану, коли ви клацаєте на ній, вона показує вам список заблокованих URL-адрес).

лихе око
(джерело: piskvor.org )

У цьому випадку, коли файли cookie заблоковані, ідентифікатор сеансу не надсилається, а цільовий скрипт видає помилку "сеанс не знайдено".

(Я спробував встановити ідентифікатор сеансу у форму та завантажити його зі змінних 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 не з'являється, файли cookie зберігаються навіть у IFRAME, і програма працює.

Редагувати: чого НЕ робити, якщо ви не хочете захищатись від судових позовів

Кілька людей запропонували "просто заштрихувати кілька тегів у свій заголовок P3P, поки Злий Око не здасться".

Теги - це не лише купа бітів, вони мають реальне значення у світі , а їх використання дає вам реальні обов'язки у світі !

Наприклад, роблячи вигляд, що ви ніколи не збираєте дані користувача, це може зробити браузер щасливим, але якщо ви насправді збираєте дані користувачів, P3P суперечить реальності. Простий і простий, ви цілеспрямовано брешите своїх користувачів , і це може бути злочинною поведінкою в деяких країнах. Як і в, "йди до в'язниці, не збирай 200 доларів".

Кілька прикладів ( див. P3pwriter для повного набору тегів ):

  • NOI : "Веб-сайт не збирає ідентифіковані дані." (як тільки з’явиться будь-яке налаштування, логін або будь-який збір даних (***** Analytics, хтось?), ви повинні підтвердити це у своєму P3P)
  • STP : Інформація зберігається для досягнення зазначеної мети. Для цього потрібно відкинути інформацію якомога раніше. Сайти ОБОВ'ЯЗКОВО мають проводити політику збереження, яка встановлює графік знищення часу. Політика збереження ОБОВ'ЯЗКОВО повинна бути включена у політику конфіденційності, зрозумілу людині, або пов’язана з нею. "(Тому, якщо ви надсилаєте, STPале не маєте політики зберігання, ви можете скоїти шахрайство. Наскільки це здорово? Зовсім не.)

Я не юрист, але я не бажаю звертатися до суду, щоб перевірити, чи дійсно заголовок P3P є юридично обов'язковим чи ви можете пообіцяти своїм користувачам що-небудь, але насправді не бажаєте виконувати свої обіцянки.


Я був на 95% завершений, але мій заголовок сказав лише: P3P: CP = "...." і не включав посилання policyref, завдяки чому він працював у IE7, але не IE6 ... працює добре зараз. Дякую!
AndreasKnudsen

4
Посилання на редактор IBM більше не працює. Через машину Wayback я зміг знайти це робоче посилання: 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.
Fares

168

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

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

Найпростіше пояснення: IE хоче, щоб ви визначили заголовок P3P, якщо ви використовуєте файли cookie.

Це гарна ідея, і, на щастя, більшість часу, якщо цей заголовок не надає, не спричинить жодних проблем (читайте попередження браузера). Якщо ваш веб-сайт / веб-додаток не завантажується на інший веб-сайт за допомогою (i) кадру. Тут ІЕ стає масовим болем у ***. Це не дозволить вам встановити файл 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 був запрограмований ідіотами \ ""); Це для мене працює!
Міхель Корніль

6
@Mvision Не звинувачуйте розробників, це скоріше питання, пов'язане з юристами та керівництвом? Я здогадуюсь, що більшість розробників зрозуміли, що ця функція призведе до подібних рішень для картоплі :-)
KajMagnus

5
Для ASP.Net ви можете додати це до своєї веб-конфігурації: '<system.webServer> <handlers> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP = &"; Internet Explorer вимагає цього для того, щоб Встановити сторонні файли cookie & quot; " /> </customHeaders> </httpProtocol> </handlers> </system.webServer> '
Рік Кірнер

1
О, це повинно бути вище! Я витратив години, намагаючись змусити файли cookie працювати в iframe IE 11. Пробуйте всілякі комбінації P3P та отримуйте різні результати залежно від типу / терміну придатності файлу cookie. Нарешті введення Potatoмого P3P вирішило це. ха-ха!
dtbaker

55

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

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

Не забудьте натиснути ctrl + F5, щоб перезавантажити свій сайт, або Провідник все ще може проявити пристріт, незважаючи на те, що він працює нормально. Це, мабуть, головна причина, чому у мене виникло стільки проблем з тим, щоб він працював.

Жоден файл політики взагалі не був необхідним.

Редагувати: Я знайшов хороший запис у блозі, який пояснює проблему з cookie у IFrames. Він також має швидке виправлення в C # коді: Frames, ASPX Pages і Відхилені файли cookie


10
IANAL, але політика P3P здається юридично обов'язковою. Чи знаєте ви, що ви тут обіцяєте користувачам, чи просто перемішували теги, поки EvilEye не зник? Я думаю, що кешування браузера не буде вашою найбільшою проблемою з цим: " NOI : Веб-сайт не збирає ідентифіковані дані. STP : Інформація зберігається для досягнення зазначеної мети. Це вимагає, щоб інформація була відкинута як можна раніше. Сайти ОБОВ'ЯЗКОВО мати політику збереження, яка встановлює таблицю часу знищення. Політика збереження ОБОВ'ЯЗКОВО бути включена в політику конфіденційності сайту, яку читають люди, або пов’язує з нею ".
Пісквор вийшов з будівлі

28
Я мушу визнати, що мені не дуже важливо, що це означає, мені просто потрібні речі для роботи в Провіднику. Сайти - це наші власні непублічні сайти, на одному з яких використовується файл cookie, щоб "запам'ятати", у якому стилі відображати сайт. Отже, так, я просто перемішував теги, поки не зникло зле око.
Хело

Знайдено запис в хороший блог , який пояснює проблему тут: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo

6
Зростаюча невідповідність P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Якщо це настільки юридично обов'язково, то тепер має бути прецедент позову, доказуючи таке. Це розглядається з такою високою повагою, що всі, окрім моїх конкурентів, навіть не хочуть розмістити його в першу чергу. Вони повинні зрозуміти, що якщо їхні клієнти не можуть залишити налаштування IE на Medium, вони не варті зусиль. Продажі, втрачені на одному сайті, повинні були бути досить високими, якщо файли cookie не працюють, кошик гине без них.
Лабораторії Фіаско

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

14

Це чудова тема в цьому питанні, проте я виявив, що одна важлива деталь (яка була важлива принаймні в моєму випадку), яка не була розміщена тут або деінде (прошу вибачення, якщо я щойно пропустила), - це те, що лінія P3P повинна бути передається в заголовок КОЖНОГО файлу, надісланого з сторонніх серверів, навіть файлів, які не встановлюють або використовують файли cookie, такі як файли Javascript або зображення. Інакше файли cookie будуть заблоковані. Про це я маю докладніше у публікації тут: http://posheika.net/?p=110


5

Усі, хто має цю проблему в node.js.

Потім додайте цей модуль p3p і ввімкніть цей модуль в середньому програмному забезпеченні.

npm install p3p

Я використовую Express, тому я додаю його в 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


5

Якщо хтось шукає лінію Apache; ми використовували цю.

Набір заголовка P3P "CP = \" Спасибі IE8 \ ""

Насправді не було значення, для чого ми встановили значення CP, доки є заголовок P3P.


4

Можливо зробити одне - додати домен до дозволених сайтів в інструментах -> параметри Інтернету -> конфіденційність -> сайти: somedomain.com -> дозволити -> ОК.


23
Так, якщо ви тільки дбаєте про те, що він працює на вашому комп’ютері. Не зовсім практично пропонувати це кожному відвідувачеві.
Пісквор вийшов з будівлі

3

Ця публікація містить коментар до P3P та скорочене рішення, яке зменшує проблеми з IE7 та IE8.


1
Цитуючи статтю: "в основному сказано:" Ми не збираємо жодних ваших особистих даних "" - удачі з цим. Я бачив нульові сайти, які насправді відповідають маркерам, встановленим у цій політиці (взагалі не збирають жодних даних , навіть анонімних статистичних даних - журнали доступу до сервера, будь-хто?). Іншої пропонованої політики також досить важко досягти (у вас є будь-яка веб-аналітика? Бам, ви просто порушили свою політику P3P). Отже, статтю можна підсумувати як "просто брехати кричуще, все одно ніхто не хвилює". Дійсно, найкорисніша стаття у всьому Інтернеті .
Пісквор вийшов з будівлі

Напрошуючи ще одну частину статті: "В Інтернеті є мало дивовижної, безкоштовної інформації про P3P, компактну політику та вимоги IE7 - і IE7 абсолютно не дає корисних результатів налагодження, наприклад, чому ваш cookie був заблокований". Це здається цілком правдивим! Провівши більшу частину свого дня, намагаючись дізнатися, чому IE7 / 8 поводився інакше, ніж будь-який інший браузер, я був надзвичайно радий, що знайшов цю публікацію. Напевно, час зрозуміти, що P3P - це мертва специфіка, і що більшість людей воліє просто обійтись. Цей пост є, мабуть, найбільш корисним з цього питання.
Henrik Aasted Sørensen

"В Інтернеті є напрочуд мало хорошої, безкоштовної інформації" - це могло бути правдою в 2007 році (коли це було написано), але в Інтернеті зараз дуже багато інформації, навіть безкоштовні інструменти, які допоможуть вам розробити політику P3P відповідно до Ваша конкретна ситуація. Я не захищаю P3P, але мовляв, "так, викрутіть його, просто змусьте піти", це може мати дорогі наслідки (оскільки ви робите дуже однозначні претензії щодо свого сайту). я ще не був протестований (IIRC), але я не хотів би бути в кінці цього позову.
Пісквор вийшов з будинку

1
@Piskvor - опублікуйте безкоштовні інструменти P3P. Усі ті, до яких я намагаюся поїхати, були куплені на фермах посилань та підробленим пошуком. IBM витягнув свій безкоштовний інструмент. Підтримка P3P схожа на траву, яка загинула під час посухи в 2012 році.
Лабораторії Фіаско

2
Знайдено редактор IBM Alphaworks p3p тут у софтпедії: softpedia.com/get/Security/Security-Related/…
Fiasco Labs

3

Одне з рішень, про яке я не бачив тут, - це використання сеансового зберігання замість cookies. Звичайно, це може не відповідати всім вимогам, але в деяких випадках це легко виправити.


1
Гарна думка. Зауважте, що під час опублікування цього питання підтримка зберігання сеансу не існувала, особливо в IE. Але часи вони змінюються;)
Пісквор покинув будівлю

3

Я розслідував цю проблему щодо виходу з системи керування доступом Azure, і не зміг підключити голову і хвости нічого.

Потім, наткнувшись на цю публікацію 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, але не хотів знову переживати проблеми з новим проектом, над яким я працював. Я вважав це посилання корисним для простого вирішення проблеми, лише маючи вказати мінімальну компактну політику 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


Це надсилає заголовок із 304 запитами? Деякі версії IE фактично видалять файли cookie, якщо ви надсилаєте заголовок P3P із номером 304.
Джошуа

Вибачте, я не знаю, оскільки я більше не працюю над цим кодом. Якщо це проблема, ви, ймовірно, можете примусити код статусу в Apache до 200.
Kris

1

Якщо у вас є домен, який потрібно вбудувати , то ви можете, перш ніж викликати сторінку, що включає IFrame, перенаправити на той домен, який створить файл cookie та переадресацію, як пояснено тут: http: //www.mendoweb. be / blog / internet-explorer-safari-third-party-cookie-problem /

Це буде працювати і для Internet Explorer, але і для Safari (оскільки Safari також блокує сторонні файли cookie).


1

Я знаю, що трохи пізно викласти свій внесок на цю тему, але я втратив стільки годин, що, можливо, ця відповідь комусь допоможе.

Я намагався зателефонувати на файл cookie третьої сторони на своєму сайті, і, звичайно, він не працює в Internet Explorer 10, навіть при низькому рівні безпеки ... не питайте мене, чому. У iframe я закликав ajax read_cookie.php (echo $ _COOKIE).

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

Під час мого пошуку я побачив щось про те, щоб cookie в JSON працював. Я навіть не намагаюся, бо думав, що якщо файл cookie не пройде через iframe, він більше не пройде через масив ...

Здогадайтесь, що це робить! Тож якщо ви json_encode ваш файл cookie та розшифруєте після вашого запиту ajax, ви отримаєте його!

Можливо, є щось, що я пропустив, і якщо я це зробив, то всі свої вибачення, але я ніколи не бачив чогось такого дурного. Заблокуйте сторонні файли cookie для безпеки, чому б ні, але нехай вони передаються, якщо закодовані? Де зараз безпека?

Я сподіваюся, що цей пост допоможе комусь і знову, якщо я щось пропустив і я німий, будь ласка, навчайте мене!


Цікаво ... значить, ви розшифровуєте файли cookie в JS?
Пісквор вийшов з будинку

Ні, я просто записую файли cookie в масив JSON з функцією php json_encode (), а потім повертаюся через дзвінок Ajax JSON.
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>

Він переходить до dir-сервера батьківського вікна або до dir-сервера iframe?
JackTheKnife


0

Для тих, хто намагається отримати P3P Compact Policy, що працює зі статичним вмістом:

Це можливо лише в тому випадку, якщо ви можете надіслати власні заголовки відповідей на стороні сервера зі статичним вмістом.

Для більш детального пояснення дивіться мою відповідь тут: Встановіть код P3P в HTML



-1

Кращим рішенням було б здійснити дзвінок Ajax всередині iframe на сторінку, яка отримає / встановить файли cookie ...


1
AJAX тут не допоможе: будь-яке обробка файлів cookie всередині iframe менш довіряє ("сторонні файли cookie"), і в IE потрібно пройти через фільтр Політики конфіденційності - незалежно від того, чи встановлюєте Ви файли cookie з дзвінками AJAX, документуйте .копірування файлів cookie або через звичайні сторінки (тестовано).
Пісквор вийшов з будівлі

ні, якщо ви здійснюєте ajax-виклик, який встановлює файли cookie з HTTP (всередині iframe), Ie6 обходить політику безпеки та встановлює файл cookie. Будь ласка, переконайтесь, що моє рішення неправильне перед тим, як подати заяву.
Лука Маттейс

Дивіться newmoon.wz.cz/test/page.php. Ви можете встановити файли cookie через AJAX, але ви або: a) запустити новий сеанс, або b) встановити ідентифікатор сеансу від JS - величезна дірка безпеки (XSRF). Мій попередній коментар був неправильно, прошу вибачення. Але ваше рішення виглядає гнівніше, ніж раніше: зробити отвір у безпеці мені здається поганим.
Пісквор вийшов з будівлі

(Все, що "обходить політику безпеки", схоже, на мене помилка - якщо є політика, вона є чомусь. Говорити "викрутити політику безпеки / налаштування користувача, ми знаємо краще" - це небезпечний слизький схил. Також , чи дозволите ви функціональності залежати від (поки що) нефіксованих відомих помилок?)
Piskvor вийшов із будинку

Встановити новий сеанс? Про що ти говориш? Більшість браузерів підтримують це, не маючи заголовка p3p, тому я не розумію, як це робиться через Ajax - це інше ...
Лука Маттейс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.