Pis*_*3.0 391 cookies internet-explorer privacy p3p
我有两个网站,让我们说他们是example.com和anotherexample.net.上anotherexample.net/page.html,我有一个IFRAME SRC="http://example.com/someform.asp".IFRAME显示用户填写并提交的表单http://example.com/process.asp.当我someform.asp在自己的浏览器窗口中打开表单(" ")时,一切正常.但是,当我someform.asp在IE 6或IE 7中作为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头.
Edit3:一些AJAX +服务器端脚本显然能够回避这个问题,但这看起来非常像一个bug,而且还会打开一组全新的安全漏洞.我不希望我的应用程序使用bug +安全漏洞的组合只是因为它很容易.
编辑:P3P政策是根本原因,下面有完整的解释.
Pis*_*3.0 427
我得到了它的工作,但解决方案有点复杂,所以忍受我.
实际上,Internet Explorer对IFRAME页面提供较低级别的信任(IE称之为"第三方"内容).如果IFRAME内的页面没有隐私政策,则其cookie将被阻止(状态栏中的眼睛图标表示,当您单击它时,它会显示被阻止的URL列表).

(来源:piskvor.org)
在这种情况下,当cookie被阻止时,不会发送会话标识符,并且目标脚本会抛出"找不到会话"错误.
(我已经尝试将会话标识符设置为表单并从POST变量加载它.这本来有用,但出于政治原因,我不能这样做.)
可以使IFRAME 内的页面更加可信:如果内页发送带有IE可接受的隐私策略的P3P标头,则将接受cookie.
一个很好的起点是W3C教程.我已经浏览了它,下载了IBM隐私政策编辑器,在那里我创建了隐私政策的表示,并给它起了一个名称来引用它(现在是policy1).
注意:此时,您实际上需要了解您的网站是否有隐私政策,如果没有,请创建它 - 是否收集用户数据,什么类型的数据,它使用它做什么,谁有权访问它,等你需要找到这些信息并考虑一下.只是拼凑几个标签不会削减它.这个步骤不能仅仅在软件中完成,并且可能具有高度政治性(例如"我们应该销售点击统计数据吗?").
(例如"该网站由ACME有限公司运营,它使用匿名的每会话标识符进行操作,仅在明确允许的情况下收集用户数据,仅用于以下目的,数据仅在必要时存储,仅限我们的公司可以访问它等.").
(使用此工具进行编辑时,可以查看策略中的错误/遗漏.同样非常有用的是"HTML政策"选项卡:在底部,它有一个"政策评估" - 快速检查政策是否会被阻止按IE的默认设置)
编辑器导出到.p3p文件,该文件是上述策略的XML表示形式.此外,它可以导出此策略的"紧凑版本".
然后需要一个Policy Reference文件(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>
Run Code Online (Sandbox Code Playgroud)
该<INCLUDE>节目将使用此策略(在我的情况,整个网站)所有的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
Run Code Online (Sandbox Code Playgroud)
policyref是策略引用文件的相对URI(后者又引用隐私策略),CP是紧凑的策略表示.请注意,示例中的P3P标头组合可能不适用于您的特定网站; 您的P3P标题必须如实地代表您自己的隐私政策!
在此配置中,Evil Eye不会出现,即使在IFRAME中也会保存Cookie,并且应用程序可以正常运行.
有几个人建议"只需将一些标签贴在你的P3P标题上,直到邪恶的眼睛放弃".
标签不仅是一堆,它们具有现实世界的含义,它们的使用为您提供了现实世界的责任!
例如,假装您从不收集用户数据可能会使浏览器满意,但如果您实际收集用户数据,则P3P与现实冲突.简单明了,你故意对用户撒谎,这可能是某些国家的犯罪行为.如同,"去监狱,不要收200美元".
一些例子(参见完整标签集的p3pwriter):
STP但没有保留政策,您可能会进行欺诈.这有多酷?根本不存在.)我不是律师,但是我不愿意去法庭看看P3P标题是否真的具有法律约束力,或者你是否可以向用户承诺任何事情而不愿意兑现你的承诺.
Rub*_*ben 167
我花了很大一部分时间研究这个P3P的事情,我觉得有必要分享我发现的东西.
我注意到P3P概念已经过时,似乎只是被Internet Explorer(IE)真正使用/强制执行.
最简单的解释是:如果您使用cookie,IE希望您定义P3P标头.
这是一个不错的主意,幸运的是大多数时候不提供此标题不会导致任何问题(阅读浏览器警告).除非您的网站/网络应用程序使用(i)框架加载到其他网站.这就是IE成为***的巨大痛苦的地方.除非设置了P3P标头,否则它不允许您设置cookie.
知道了这一点,我想找到以下两个问题的答案:
我的发现是:
这个概念诞生于2002年,令我感到困惑的是,这个过时的,法律上未实现的概念仍然强加于IE中的开发人员.如果此标头没有任何合法后果,则应忽略此标头(或者,在控制台中生成警告或通知).没有强制执行!我现在被迫在我的代码中添加一行(并向客户端发送一个标题),它绝对没有任何作用.
简而言之 - 保持IE的快乐 - 在PHP代码中添加以下行(其他语言应该类似)
header('P3P: CP="Potato"');
Run Code Online (Sandbox Code Playgroud)
问题解决了,IE很满意这个土豆.
Hel*_*elo 55
通过简单地将这个小标题添加到IFrame(PHP解决方案)中的网站,我就能够消除邪恶之眼:
header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');
Run Code Online (Sandbox Code Playgroud)
请记住按ctrl + F5重新加载您的网站,或者资源管理器可能仍然显示邪恶的眼睛,尽管它工作正常.这可能是我遇到这么多问题的主要原因.
根本没有必要的政策文件.
编辑:我找到了一个很好的博客文章,解释了IFrame中的cookie问题.它还可以快速修复C#代码: Frames,ASPX Pages和Rejected Cookies
Dav*_*ond 21
这隐藏在其他答案的评论中,但我几乎错过了它,所以看起来它应该得到自己的答案.
要查看:为了让IE接受第三方cookie,您需要使用名为p3p的http标头以下列格式提供文件:
CP="my compact p3p policy"
Run Code Online (Sandbox Code Playgroud)
但是,p3p在这一点上几乎已经死了,你可以轻松地让IE工作,而无需投入时间和法律资源来创建真正的p3p策略.这是因为如果您的压缩p3p策略标头无效,IE实际上将其视为一个好的策略并接受第三方cookie.所以你可以使用像这样的p3p头
CP="This site does not have a p3p policy."
Run Code Online (Sandbox Code Playgroud)
您可以选择添加指向页面的链接,以解释您没有p3p政策的原因,如Google和Facebook所做的那样(他们在此处指出:https://support.google.com/accounts/answer/151657此处:https ://www.facebook.com/help/327993273962160/).
最后,重要的是要注意从第三方站点提供的所有文件都需要有p3p标头,而不仅仅是设置cookie的文件,因此您可能无法在PHP,asp.net等中执行此操作.码.您可能最好在Web服务器级别(即在IIS或Apache中)进行设置.
dan*_*lmb 20
我也有这个问题,以为我会发布我在MVC2项目中使用的代码.在页面生命周期中添加标题时要小心,否则会出现HttpException" 服务器在发送HTTP标头后无法追加标头." 我在OnActionExecuting方法上使用了自定义ActionFilterAttribute(在执行操作之前调用).
/// <summary>
/// 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.
/// </summary>
/// <remarks>
/// More info http://www.oreillynet.com/lpt/a/1554
/// </remarks>
public class P3PAttribute : ActionFilterAttribute
{
/// <summary>
/// On Action Executing add a compact policy "p3p" HTTP header
/// </summary>
/// <param name="filterContext"></param>
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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用示例:
[P3P]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome!";
return View();
}
public ActionResult About()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 14
这是关于这个问题的一个很好的主题,但是我发现一个重要的细节(至少在我的情况下是必不可少的)没有在这里或其他任何地方发布(如果我错过它,我道歉)是P3P线必须是从第三方服务器发送的每个文件的标题中传递,甚至文件没有设置或使用诸如Javascript文件或图像之类的cookie.否则cookie将被阻止.我在这里的帖子中有更多内容:http://posheika.net/?p = 110
任何在node.js中遇到此问题的人.
然后添加此p3p模块,并在中间件上启用此模块.
npm install p3p
Run Code Online (Sandbox Code Playgroud)
我正在使用快递,所以我在app.js中添加它
首先要求app.js中的模块
var express = require('express');
var app = express();
var p3p = require('p3p');
Run Code Online (Sandbox Code Playgroud)
然后用它作为中间件
app.use(p3p(p3p.recommended));
Run Code Online (Sandbox Code Playgroud)
它将在res对象中添加p3p标头.不需要做任何额外的事情.
您将获得更多信息:
https://github.com/troygoode/node-p3p
| 归档时间: |
|
| 查看次数: |
223968 次 |
| 最近记录: |