Cookie, iframe 与 P3P 的那点事儿

| 8 Comments

且说我使用有些网络服务的时候常常能遇到比较怪异的问题。昨天在某个页面遇到个 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 Comments

cookie现在难吃了?

这个错误应该和设置了错误的header有关-某个页面不断地重定向到自身,和cookie、iframe和p3p应该没什么关系吧。

在PHP设置一个header就能使Firefox出现这个错误:
header('Location:'.$_SERVER['PHP_SELF']);

你发现问题的过程是什么?

@丁宇

当然不是你说的重定向到自身。否则在 IE 下怎么可能正确显示?

Google 能Google清楚的问题,我就不写了

我每天都在 关注 支付志 ,了解支付宝 每天所发生的一些事情。

我在java里都是加:
response.setHeader("P3P", "CP=CAO PSA OUR");

以前也莫名其妙的以为啥问题的呢。

这里的第三方cookie是指的保存在本地的cookie,你禁掉应该就只能用session cookie了(就是浏览器内存cookie)。

P3P主要是隐私协议,现在很多网站滥用P3P协议,导致类似IE在iframe等标签里设置的cookie同源策略完全不起作用,从CSRF攻击的角度来说,是有很大风险的。Firefox完全没有这种策略,所以Firefox这点的安全做的没有IE好。

如果需要跨域,或者是在iframe里跨域是可以有其他方式实现的,不一定需要用到P3P。而且最头疼的是现在用P3P设置的cookie很多下放的权力都过大了,所以我是很不推荐用P3P的。

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