也谈IE浏览器P3P隐私策略

作者:nunumick 发布时间:18 Nov 2011 分类: front-end

P3P是什么

P3P(Platform for Privacy Preferences Project)是W3C公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。现在有越来越多的网站在消费者访问时,都会收集一些用户信息。制定P3P标准的出发点就是为了减轻消费者因网站收集个人信息所引发的对于隐私权可能受到侵犯的忧虑。P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然后决定是否接受cookie或是否使用该网站。

为什么要了解P3P

W3C公布这项协议之后,仅IE系列浏览器支持该协议,一直从版本6至目前的版本9乃至以后版本都支持,IE浏览器设置里有一个隐私选项就是这个了,如图:

可以看到,隐私策略设置默认阻止不受信任的第三方网站的cookie。这里需要明白一点什么是“第三方”,这是词是相对的指代,举个例子:用户在浏览A网站域下的页面,A就是第一方,同一个进程里除A以外的就是第三方网站。假设是在浏览B网站,那B网站之外的就是第三方网站。简单理解:被嵌套或被引用的非同域网站即为第三方网站。如果按照IE浏览器的默认隐私协议,第三方的cookie设置会受到限制,会出现cookie拿不到的情况。

在当今复杂多样的web世界,网站页面之间互相引用、嵌套的情况多有发生,没准就会碰到A嵌套B,B的cookie设置实效的情况,当然,这种情况目前只会发生在IE浏览器下,不过没准以后chrome、firefox也发个支持p3p的版本出来,那世界就和谐了。

隐私策略设置有多个级别,最高级的情况是阻止所有一二三方的cookie,等于是禁用了cookie,这种情况下,会发生什么,大家都懂的。鉴于目前动荡的网络世界和IE浏览器的使用占比,P3P这个玩意儿还是很有必要去了解一下的。

P3P引发的问题

显然,能引发的问题就是网站被第三方后,页面无法正常拿到cookie或者session,导致页面功能失效。举个例子:

A域网站a页面:test-a.php(nunumick.me域)

<?php
    session_start();
    $_SESSION['p3p'] = 'hello p3p';//设置session值
?>

A域网站b页面:test-b.php(nunumick.me域)

<?php
    session_start();
    echo($_SESSION['p3p']);//打印session
?>

B域网站页面:test-main.php

<body>
<iframe src="A域a页面URL"></iframe>
<iframe src="A域b页面URL"></iframe>
</body>

A域页面被第三方,访问B域页面,预期结果是输出”hello p3p”,实际在IE浏览器会报php错误

解决方案

1.设置P3P头

给被嵌套、引用页面设置P3P header

<?php
    @header("P3P: CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'");
    session_start();
    $_SESSION['p3p'] = 'hello p3p';
?>

需要注意的是,一定要在设置cookie或者session之前设置好P3P header。

2.使用隐私配置XML

延伸知识

下面是摘抄的一段Compact Policies的具体取值范围和设值含义。

Compact Policies

Compact policies are essentially summaries of P3P policies. They can be used by user agents to quickly get approximate information about P3P policies, therefore improving performance. For an in-depth explanation of compact policies, we refer to the P3P1.0[4] specification. Here, we limit to stating the syntax: compact-policy-field = CP=" compact-policy "

compact-policy = compact-token *(“ “ compact-token)

compact-token = compact-access | compact-disputes | compact-remedies | compact-non-identifiable | compact-purpose | compact-recipient | compact-retention | compact-categories | compact-test

compact-access = “NOI” “ALL” “CAO” “IDC” “OTI” “NON”

compact-disputes = “DSP”

compact-remedies = “COR” “MON” “LAW”

compact-non-identifiable = “NID”

compact-purpose = “CUR” “ADM” [creq] “DEV” [creq] “TAI” [creq]
“PSA” [creq] “PSD” [creq] “IVA” [creq] “IVD” [creq]
“CON” [creq] “HIS” [creq] “TEL” [creq] “OTP” [creq]
creq = “a” “i” “o”
compact-recipient = “OUR” “DEL” [creq] “SAM” [creq] “UNR” [creq]
“PUB” [creq] “OTR” [creq]    
compact-retention = “NOR” “STP” “LEG” “BUS” “IND”
compact-category = “PHY” “ONL” “UNI” “PUR” “FIN” “COM”
“NAV” “INT” “DEM” “CNT” “STA” “POL”
“HEA” “PRE” “LOC” “GOV” “OTC”  

compact-test = “TST”

延伸阅读

标签: p3p , privacy , browser
<<< EOF

文章评论