Internet Explorer中IFRAME中的Cookie被阻止/未保存

399
我有两个网站,假设它们是 example.comanotherexample.net。在 anotherexample.net/page.html 页面上,我有一个 IFRAME SRC="http://example.com/someform.asp",显示一个表单供用户填写并提交到http://example.com/process.asp。当我在单独的浏览器窗口中打开这个表单("someform.asp")时,一切正常。但是,在 IE 6 或 IE 7 中将 someform.asp 作为 IFRAME 加载时,导致了 example.com 的 cookie 无法保存。在 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+服务器端脚本似乎能够避开这个问题,但这看起来非常像一个漏洞,而且它会打开一整套安全漏洞。我不想让我的应用程序使用一个由于易用性而组合了漏洞和安全漏洞的方法。
编辑:P3P策略是根本原因,完整解释如下。

确实是一个好的解决方案。我尝试创建隐私政策,将其添加到我的上下文根中,在我的JSP页面中设置了头文件,但仍然无法摆脱那个红眼睛。你能帮我解决这个问题吗? - user902490
感谢@Piskvor提供的演示网站,我在这个Security.SE帖子中引用了它,该帖子列出了具有交互式浏览器测试的网站。 - makerofthings7
@makerofthings7:不客气。我会将其迁移到一个非临时(sic!)网站,并建议在Security.se上进行编辑,该页面是一种有点粗糙的概念证明。 - Piskvor left the building
2
不要试图在Windows 10 / Internet Explorer 11中运行P3P(https://msdn.microsoft.com/en-us/library/mt146424%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)。 P3P根本不起作用,因此无论您做什么,Cookie都不会被存储。这里也有证据http://www.enhanceie.com/test/cookie/。 - puco
22个回答

0

-1
更好的解决方案是在 iframe 内部进行 Ajax 调用,调用页面以获取/设置 cookies...

1
AJAX在这里无法帮助:iframe内部的任何cookie处理都不太可信(“第三方cookie”),并且在IE中需要通过隐私策略过滤器 - 无论您是使用AJAX调用设置cookie,document.cookie操作还是通过正常页面设置(已测试)。 - Piskvor left the building
不,如果您进行一个使用HTTP设置cookie的ajax调用(在iframe内部),IE6将绕过安全策略并设置cookie。在下投票之前,请确保我的解决方案是错误的。 - Luca Matteis
确实,大多数浏览器都支持此功能,但我无法强制用户切换。不管怎样,请检查测试页面:如果您使用AJAX请求set_cookie.php,则会话ID与在someform.php上看到的ID不同。请求set_cookie.php?sid = {something}将起作用,但将从任何站点起作用。不太理想。 - Piskvor left the building
我现在没有IE6进行测试,但是为什么使用Ajax会导致会话ID不同呢?无论如何,另外一件事是我正在使用“script”标签来设置cookie(而不是iframe),但是我似乎无法在Safari中使其工作,您能够使用此IFRAME方法在Safari中设置cookie吗? - Luca Matteis
我已经完成了我的字符,看看这个链接:https://dev59.com/lnRC5IYBdhLWcg3wG9Nb - Luca Matteis
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接