我有两个网站,假设它们是example.com
和anotherexample.net
。
在anotherexample.net/page.html
,我有一个IFRAME SRC="http://example.com/someform.asp"
。该IFRAME显示一个表格,让用户填写并提交到http://example.com/process.asp
。当我在自己的浏览器窗口中打开这个表单("someform.asp
")时,一切都很顺利。
然而,当我在IE 6或IE 7中把someform.asp
作为IFRAME加载时,example.com的cookies没有被保存。在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头。
编辑3:一些AJAX+serverside脚本显然能够避开这个问题,但这看起来非常像一个bug,另外它还打开了一整套新的安全漏洞。我不希望我的应用程序使用错误+安全漏洞的组合,只是因为它很容易。
编辑:P3P政策是根本原因,完整解释如下。
policy1
)。
注意:在这一点上,你实际上需要找出你的网站是否有隐私政策,如果没有,就创建它--它是否收集用户数据,什么样的数据,用它做什么,谁可以访问它,等等。你需要找到这些信息并思考。只是拍打几个标签是不行的。**这一步不能纯粹用软件来完成,可能会有很强的政治性(例如:"我们是否应该出售我们的点击统计资料?")。
(例如,"该网站由ACME有限公司运营,它使用匿名的每次会话标识符进行操作,只在明确允许的情况下收集用户数据,并且只用于以下目的,数据只在必要时储存,只有我们公司可以访问它,等等,")。)
(当用这个工具编辑时,可以查看政策中的错误/遗漏。同样非常有用的是标签"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标头必须真实地代表你自己的隐私政策!。
利润!有几个人建议"只需在你的P3P标题上贴上一些标签,直到邪恶之眼放弃"。 这些标签不仅是一堆比特,它们还有现实世界的意义,使用它们会给你带来现实世界的责任。 例如,假装你从不收集用户数据可能会让浏览器高兴,但如果你真的收集了用户数据,P3P就与现实相冲突了。简单地说,你是在故意欺骗你的用户,而这在某些国家可能是犯罪行为。就像,"去坐牢吧,不要收200美元"。 几个例子(见p3pwriter的全套标签)。