当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Cookie已阻止/未保存在InternetExplorer的IFRAME中》经验,为你挑选了8个好方法。

我有两个网站,让我们说他们是example.comanotherexample.net.上anotherexample.net/page.html,我有一个IFRAME SRC="https://img.devbox.cn/3cccf/16086/243/367c4539743ff9b8.png" alt="邪恶的眼睛">
(来源:piskvor.org)

在这种情况下,当cookie被阻止时,不会发送会话标识符,并且目标脚本会抛出"找不到会话"错误.

(我已经尝试将会话标识符设置为表单并从POST变量加载它.这本来有用,但出于政治原因,我不能这样做.)

可以使IFRAME 内的页面更加可信:如果内页发送带有IE可接受的隐私策略的P3P标头,则将接受cookie.

如何解决它

创建一个p3p策略

一个很好的起点是W3C教程.我已经浏览了它,下载了IBM隐私政策编辑器,在那里我创建了隐私政策的表示,并给它起了一个名称来引用它(现在是policy1).

注意:此时,您实际上需要了解您的网站是否有隐私政策,如果没有,请创建它 - 是否收集用户数据,什么类型的数据,它使用它做什么,谁有权访问它,等你需要找到这些信息并考虑一下.只是拼凑几个标签不会削减它.这个步骤不能仅仅在软件中完成,并且可能具有高度政治性(例如"我们应该销售点击统计数据吗?").

(例如"该网站由ACME有限公司运营,它使用匿名的每会话标识符进行操作,仅在明确允许的情况下收集用户数据,仅用于以下目的,数据仅在必要时存储,仅限我们的公司可以访问它等.").

(使用此工具进行编辑时,可以查看策略中的错误/遗漏.同样非常有用的是"HTML政策"选项卡:在底部,它有一个"政策评估" - 快速检查政策是否会被阻止按IE的默认设置)

编辑器导出到.p3p文件,该文件是上述策略的XML表示形式.此外,它可以导出此策略的"紧凑版本".

链接到该政策

然后需要一个Policy Reference文件(http://example.com/w3c/p3p.xml)(该站点使用的隐私策略索引):


  
    
      /
      
    
  

节目将使用此策略(在我的情况,整个网站)所有的URI.我从编辑器导出的策略文件已上传到http://example.com/w3c/example-com.p3p

发送带有响应的紧凑标题

我在example.com上设置了webserver,发送带有响应的紧凑头,如下所示:

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标题必须如实地代表您自己的隐私政策!

利润!

在此配置中,Evil Eye不会出现,即使在IFRAME中也会保存Cookie,并且应用程序可以正常运行.

编辑:什么不该做,除非你喜欢辩护诉讼

有几个人建议"只需将一些标签贴在你的P3P标题上,直到邪恶的眼睛放弃".

标签不仅是一堆,它们具有现实世界的含义,它们的使用为您提供了现实世界的责任!

例如,假装您从不收集用户数据可能会使浏览器满意,但如果您实际收集用户数据,则P3P与现实冲突.简单明了,你故意对用户撒谎,这可能是某些国家的犯罪行为.如同,"去监狱,不要收200美元".

一些例子(参见完整标签集的p3pwriter):

NOI:"网站没有收集确定的数据." (只要有任何自定义,登录或任何数据收集(*****Analytics,任何人?),您必须在P3P中确认它)

STP:保留信息以满足规定的目的.这要求尽可能早地丢弃信息.站点必须具有建立销毁时间表的保留策略.保留政策必须包含在网站的人类可读隐私政策中或与之相关联."(因此,如果您发送STP但没有保留政策,您可能会进行欺诈.这有多酷?根本不存在.)

我不是律师,但是我不愿意去法庭看看P3P标题是否真的具有法律约束力,或者你是否可以向用户承诺任何事情而不愿意兑现你的承诺.


关于这个主题的一些新闻:-IBM编辑器可以在以下网址找到:http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml -P3P标准似乎已经"死了".像google和facebook这样的大公司现在使用无效的P3P标头来绕过IE安全性.请参阅以下帖子:http://www.cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html http://www.zdnet.com/blog/facebook/facebook-to-microsoft-p3p-is-outdated -what-else-ya-got/9332 http://www.techpolicy.com/Cranor_InternetExplorerPrivacyProtectionsBeingCircumvented-by-Google.aspx
另一个可以帮助有类似问题的人的信息:从我的测试中,如果域位于不同的安全区域(例如,第一方是互联网,第三方是内联网),如果P3P正确,则无法接受第三方cookie配置.cookie始终被阻止.
IBM编辑器的链接不再起作用.通过自由之路机,我能够找到这个工作环节:https://www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/Xb.NoLhAb4K_rojPMDtnyyo2JnmTVdfbD3Atd9mbtycww/Xc.p3peditor/p3pExecutableJar.zip /Xd./Xf.LPr.U1ay/Xg.6235844/Xi.AW-033/XY.regsrvs/XZ.5bFtxV6ua5i-evcgQ4iqnCWRip4/p3pExecutableJar.zip

2> Ruben..:

我花了很大一部分时间研究这个P3P的事情,我觉得有必要分享我发现的东西.

我注意到P3P概念已经过时,似乎只是被Internet Explorer(IE)真正使用/强制执行.

最简单的解释是:如果您使用cookie,IE希望您定义P3P标头.

这是一个不错的主意,幸运的是大多数时候不提供此标题不会导致任何问题(阅读浏览器警告).除非您的网站/网络应用程序使用(i)框架加载到其他网站.这就是IE成为***的巨大痛苦的地方.除非设置了P3P标头,否则它不允许您设置cookie.

知道了这一点,我想找到以下两个问题的答案:

    谁在乎?换句话说,如果我在标题中加上"马铃薯"这个词,我可以被起诉吗?

    其他公司做什么?

我的发现是:

    没人在乎.我无法找到一个表明该技术具有任何法定重量的文件.在我的研究期间,我没有发现世界各地的一个国家采用了一项法律,阻止你在P3P标题中加入"Potato"一词

    谷歌和Facebook都在他们的P3P标题字段中添加了一个链接,引用了一个页面,描述了他们没有P3P标头的原因.

这个概念诞生于2002年,令我感到困惑的是,这个过时的,法律上未实现的概念仍然强加于IE中的开发人员.如果此标头没有任何合法后果,则应忽略此标头(或者,在控制台中生成警告或通知).没有强制执行!我现在被迫在我的代码中添加一行(并向客户端发送一个标题),它绝对没有任何作用.

简而言之 - 保持IE的快乐 - 在PHP代码中添加以下行(其他语言应该类似)

header('P3P: CP="Potato"');

问题解决了,IE很满意这个土豆.


哦,伙计,这是隐藏的互联网资源管理器之一!HttpContext.Current.Response.AddHeader("p3p","CP = \"Internet Explorer由白痴编程\""); 那一个适合我!
事实上,自2008年发布以来,这个问题发生了重大变化.网络已经发展,对P3P的共识已经解决了"无人问津"的问题.很高兴知道IE在这种情况下对无效输入做了什么.
@Mvision不要责怪开发者,这是一个与律师和管理有关的问题?我猜大多数开发人员都意识到该功能会导致*Potato*之类的解决方案:-)
对于ASP.Net,您可以将其添加到您的Web配置:' '

3> Helo..:

通过简单地将这个小标题添加到IFrame(PHP解决方案)中的网站,我就能够消除邪恶之眼:

header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');

请记住按ctrl + F5重新加载您的网站,或者资源管理器可能仍然显示邪恶的眼睛,尽管它工作正常.这可能是我遇到这么多问题的主要原因.

根本没有必要的政策文件.

编辑:我找到了一个很好的博客文章,解释了IFrame中的cookie问题.它还可以快速修复C#代码: Frames,ASPX Pages和Rejected Cookies


我必须承认,我真的不在乎它意味着什么,我只需要在资源管理器中工作.这些网站是我们自己的非公共网站,其中一个使用cookie来"记住"显示该网站的样式.所以,是的,我只是混合标签,直到邪恶的眼睛消失.
IANAL,但P3P政策似乎具有法律约束力.你是否意识到*你在这里向用户承诺的是什么,或者你只是混合标签直到EvilEye消失了?我认为浏览器缓存不会是你最大的问题:"**NOI**:网站不收集已识别的数据.**STP**:保留信息以满足规定的目的.这需要丢弃信息尽可能早.网站必须有一个建立销毁时间表的保留政策.保留政策必须包含在网站的人类可读隐私政策中或与之链接."
P3P越来越无关紧要.http://www.cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf如果它具有法律约束力,那么现在要证明这样的诉讼优先权.人们如此高度尊重它,除了我的一个竞争对手之外,其他所有竞争对手都打算首先发布一个.他们必须认为,如果他们的客户不能将IE设置保留在Medium上,他们就不值得付出努力.如果cookie不起作用,一个网站上的销售损失必须相当高,购物车在没有它们的情况下死亡.
[这个答案](http://stackoverflow.com/a/11462810/694469)建议使用像"CP ="This_is_not_a_privacy_policy"`这样的虚拟标题.这样做看起来似乎没有法律约束力,我认为(因为例如NOI和STP并没有提到任何类似的东西),并且显然让IE很开心:-)

4> David Hammon..:

这隐藏在其他答案的评论中,但我几乎错过了它,所以看起来它应该得到自己的答案.

要查看:为了让IE接受第三方cookie,您需要使用名为p3p的http标头以下列格式提供文件:

CP="my compact p3p policy"

但是,p3p在这一点上几乎已经死了,你可以轻松地让IE工作,而无需投入时间和法律资源来创建真正的p3p策略.这是因为如果您的压缩p3p策略标头无效,IE实际上将其视为一个好的策略并接受第三方cookie.所以你可以使用像这样的p3p头

CP="This site does not have a p3p policy."

您可以选择添加指向页面的链接,以解释您没有p3p政策的原因,如Google和Facebook所做的那样(他们在此处指出:https://support.google.com/accounts/answer/151657此处:https ://www.facebook.com/help/327993273962160/).

最后,重要的是要注意从第三方站点提供的所有文件都需要有p3p标头,而不仅仅是设置cookie的文件,因此您可能无法在PHP,asp.net等中执行此操作.码.您可能最好在Web服务器级别(即在IIS或Apache中)进行设置.



5> daniellmb..:

我也有这个问题,以为我会发布我在MVC2项目中使用的代码.在页面生命周期中添加标题时要小心,否则会出现HttpException" 服务器在发送HTTP标头后无法追加标头." 我在OnActionExecuting方法上使用了自定义ActionFilterAttribute(在执行操作之前调用).

/// 
/// Privacy Preferences Project (P3P) serve a compact policy (a "p3p" HTTP header) for all requests
/// P3P provides a standard way for Web sites to communicate about their practices around the collection, 
/// use, and distribution of personal information. It's a machine-readable privacy policy that can be 
/// automatically fetched and viewed by users, and it can be tailored to fit your company's specific policies.
/// 
/// 
/// More info http://www.oreillynet.com/lpt/a/1554
/// 
public class P3PAttribute : ActionFilterAttribute
{
    /// 
    /// On Action Executing add a compact policy "p3p" HTTP header
    /// 
    /// 
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext.Current.Response.AddHeader("p3p","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

        base.OnActionExecuting(filterContext);
    }
}

使用示例:

[P3P]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}



6> 小智..:

这是关于这个问题的一个很好的主题,但是我发现一个重要的细节(至少在我的情况下是必不可少的)没有在这里或其他任何地方发布(如果我错过它,我道歉)是P3P线必须是从第三方服务器发送的每个文件的标题中传递,甚至文件没有设置或使用诸如Javascript文件或图像之类的cookie.否则cookie将被阻止.我在这里的帖子中有更多内容:http://posheika.net/?p = 110



7> Harshal_m_jo..:

任何在node.js中遇到此问题的人.

然后添加此p3p模块,并在中间件上启用此模块.

npm install p3p

我正在使用快递,所以我在app.js中添加它

首先要求app.js中的模块

var express = require('express');
var app = express();
var p3p = require('p3p');

然后用它作为中间件

app.use(p3p(p3p.recommended));

它将在res对象中添加p3p标头.不需要做任何额外的事情.

您将获得更多信息:

https://github.com/troygoode/node-p3p



8> so_mv..:

如果有人在寻找Apache线; 我们用过这个.

标题设置P3P"CP = \"谢谢IE8 \""

只要有P3P标题,我们将CP值设置为什么并不重要.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有