Cookie, iframe 与 P3P 的那点事儿

且说我使用有些网络服务的时候常常能遇到比较怪异的问题。昨天在某个页面遇到个 Redirect Loop 错误提示:

Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

同样的问题,同样的页面,同样是 Firefox 浏览器,以前就遇到过,提交给相关负责人之后没了响应,后来也忘掉了。同事说是我浏览器版本的问题,后来发现这和”是否接受第三方 Cookie” 的设置有关:

[x] Accept cookies from sites
[ ] Accept third-party cookies

我的浏览器不接受第三方 Cookie。设置接收后该页面显示正常。

搜索了一下,发现之所以该页面是这样,还是因为页面用了 iframe 而导致的问题,比较通用的办法是设置 p3p http header

这个 P3P(Platform for Privacy Preferences Project),要搞明白,可真是有点小孩没娘,说来话长。简单的说,就是个协议,通过其声明它是好人,允许我收集浏览器用户行为吧… 可现实中,大家都可以说自己是好人,背地里没准儿干啥坏事呢。这就是其分歧所在。[参考] 国内多数网站,都不关注这个 P3P。隐私问题可能没国外(微软的隐私声明)重视吧。

再说 Firefox ,过去的几个大版本中,对 Cookie 的处理方式还是有很大变化的。

这个问题影响最大的还是 Facebook 等开放平台的应用,使用了 iframe 就会遇到(eg: FriendFeed 遇到过,估计还比较头疼)。

对于浏览器来说,第三方 Cookie ,默认情况下,浏览器接受与否,是个大问题。如果不接受,会给很多用户带来混淆,如果接受,则在隐私问题上,有很大的挑战。

实际上,Firefox 的开发者在这个地方的处理方式也在摇摆当中(参见), 不过能确定的是 “the ability to make decisions based on p3p policies was removed for firefox 3″。

各家浏览器在这个地方都可能有 Bug。比如 IE7 曾经有的 Cookie 问题,IE8 Beta 也有类似问题

或许,最好的办法就是别去种这个 Cookie 了… 网站开发者,你们愿意么?

EOF

更多阅读:Windows Internet Explorer (Pre-Release Version 8) Privacy Statement
微软 Cookie 说明

另请参见文本后面 axis 同学的留言。


8 thoughts on “Cookie, iframe 与 P3P 的那点事儿

  1. 丁宇

    这个错误应该和设置了错误的header有关-某个页面不断地重定向到自身,和cookie、iframe和p3p应该没什么关系吧。
    PHP设置一个header就能使Firefox出现这个错误:
    header(‘Location:’.$_SERVER[‘PHP_SELF’]);
    你发现问题的过程是什么?

    Reply
  2. Fenng

    @丁宇
    当然不是你说的重定向到自身。否则在 IE 下怎么可能正确显示?
    Google 能Google清楚的问题,我就不写了

    Reply
  3. axis

    这里的第三方cookie是指的保存在本地的cookie,你禁掉应该就只能用session cookie了(就是浏览器内存cookie)。
    P3P主要是隐私协议,现在很多网站滥用P3P协议,导致类似IE在iframe等标签里设置的cookie同源策略完全不起作用,从CSRF攻击的角度来说,是有很大风险的。Firefox完全没有这种策略,所以Firefox这点的安全做的没有IE好。
    如果需要跨域,或者是在iframe里跨域是可以有其他方式实现的,不一定需要用到P3P。而且最头疼的是现在用P3P设置的cookie很多下放的权力都过大了,所以我是很不推荐用P3P的。

    Reply
  4. King

    p3p还是有用的,康盛的discuz,uchome,ucenter的跨站同步登陆退出都是依靠p3p了,如果没有p3p,还真很多应用实现起来很困难。当然任何事务都有利有弊,就看如何取舍了。我认为浏览器不支持p3p一定不行!

    Reply
  5. https://me.yahoo.com/a/XCENkC1tz.ZveT_xiPkyotGLO8lHYJUa#2ff74

    恩.
    我终于了解P3P了.
    谢谢.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *