internet-explorer - Cookie阻止/未保存在Internet Explorer的IFRAME中




cookies privacy p3p (19)

这终于为我工作了(经过大量的ha and并使用IBM策略生成器生成一些策略)。 您可以在此下载策略生成器: softpedia.com/get/Security/Security-Related/… : softpedia.com/get/Security/Security-Related/…

我无法再从官方IBM网站下载生成器。

我在我的Web-App的根文件夹中创建了这些文件

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php:只需发送一个额外的标题:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. p3p.xml的内容
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. 我的policy.html文件的内容

<html>
<head>
<STYLE type="text/css">
title { color: #3333FF}
</STYLE>
<title>Privacy Statement for YOUR COMPANY NAME</title>
</head>
<body>
<h1 class="title">Privacy Policy</h1>
<!-- "About Us" section of privacy policy -->
<h2>About Us</h2>
<p>This is a privacy policy for YOUR COMPANY NAME.
Our homepage on the Web is located at <a href="YOURWEBSITE">
YOURWEBSITE</a>.
The full text of our privacy policy is available on the Web at 
<a href="ABSOLUTE URL OF THIS FILE">
ABSOLUTE URL OF THIS FILE</a>
This policy does not tell users where they can go to exercise their opt-in or opt-out options.
<p>We invite you to contact us if you have questions about this policy.
You may contact us by mail at the following address:
<pre>FIRSTNAME LASTNAME
YOUR ADDRESS HERE
</pre>
<p>You may contact us by e-mail at 
<a href="mailto:[email protected]">
[email protected]</a>. 
You may call us at TELEPHONENUMBER.
<!-- "Privacy Seals" section of privacy policy -->
<h2>Dispute Resolution and Privacy Seals</h2>
<p>We have the following privacy seals and/or dispute resolution mechanisms.
If you think we have not followed our privacy policy in some way, they can help you resolve your concern.
<ul>
<li>
<b>Dispute</b>:
Contact us for further information
</ul>
<!-- "Additional information" section of privacy policy -->
<h2>Additional Information</h2>
<p>
This policy is valid for 1 day from the time that it is loaded by a client.
</p>
<!-- "Data Collection" section of privacy policy -->
<h2>Data Collection</h2>
<p>P3P policies declare the data they collect in groups (also referred to as "statements").
This policy contains 1 data group.
<hr width="50%" align="center">
<h3>Group "App control data"</h3>
<p>We collect the following information:
<ul>
<li>HTTP cookies</li>
</ul>
<p>This data will be used for the following purposes:</p>
<ul>
<li>Completion and support of the current activity.</li>
<li>Web site and system administration.</li>
<li>Research and development.</li>
<li>Historical preservation.</li>
<li>Other purposes<p>Control Flow of the application</p></li>
</ul>
<p>This data will be used by ourselves and our agents.
<p>The data in this group has been marked as non-identifiable. This means that there is no
reasonable way for the site to identify the individual person this data was collected from.
<p>The following explanation is provided for why this data is collected:</p>
<blockquote>This cookie data is only used to control the application within an iframe (e.g. a Facebook App)</blockquote>
<!-- "Use of Cookies" section of privacy policy -->
<hr width="50%" align="center">
<h2>Cookies</h2>
<p>Cookies are a technology which can be used to provide you with tailored information from a Web site. A cookie is an element of data that a Web site can send to your browser, which may then store it on your system. You can set your browser to notify you when you receive a cookie, giving you the chance to decide whether to accept it.
<p>Our site makes use of cookies.
Cookies are used for the following purposes:
<ul>
<li>Site administration
<li>Completing the user's current activity
<li>Research and development
<li>Other
(Control Flow of the application)
</ul>
<!-- "Compact Policy Explanation" section of privacy policy -->
<hr width="50%" align="center">
<h2>Compact Policy Summary</h2>
<p>The compact policy which corresponds to this policy is:
<pre>
    CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV"
</pre>
<p>The following table explains the meaning of each field in the compact policy.
<center><table width="80%" border="1" cols="2">
<tr><td align="center" valign="top" width="20%"><b>Field</b></td><td align="center" valign="top" width="80%"><b>Meaning</b></td></tr>
<tr><td align="left" valign="top" width="20%"><tt>CP=</tt></td>
<td align="left" valign="top" width="80%">This is the compact policy header; it indicates that what follows is a P3P compact policy.</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>ALL</tt></td>
<td align="left" valign="top" width="80%">
Access to all collected information is available.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>DSP</tt></td>
<td align="left" valign="top" width="80%">
The policy contains at least one dispute-resolution mechanism.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NID</tt></td>
<td align="left" valign="top" width="80%">
The information collected is not personally identifiable.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>CURa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for completion of the current activity.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>ADMa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for site administration.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>DEVa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for research and development.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>HISa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for historical archival purposes.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>OTPa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for other purposes.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>OUR</tt></td>
<td align="left" valign="top" width="80%">
The data is given to ourselves and our agents.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NOR</tt></td>
<td align="left" valign="top" width="80%">
The data is not kept beyond the current transaction.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NAV</tt></td>
<td align="left" valign="top" width="80%">
Navigation and clickstream data is collected.
</td></tr>
</table></center>
<p>The compact policy is sent by the Web server along with the cookies it describes.
For more information, see the P3P deployment guide at <a href="http://www.w3.org/TR/p3pdeployment">http://www.w3.org/TR/p3pdeployment</a>.
<!-- "Policy Evaluation" section of privacy policy -->
<hr width="50%" align="center">
<h2>Policy Evaluation</h2>
<p>Microsoft Internet Explorer 6 will evaluate this policy's compact policy whenever it is used with a cookie.
The actions IE will take depend on what privacy level the user has selected in their browser (Low, Medium, Medium High, or High; the default is Medium.
In addition, IE will examine whether the cookie's policy is considered satisfactory or unsatisfactory, whether the cookie is a session cookie or a persistent cookie, and whether the cookie is used in a first-party or third-party context.
This section will attempt to evaluate this policy's compact policy against Microsoft's stated behavior for IE6.
<p><b>Note:</b> this evaluation is currently experimental and should not be considered a substitute for testing with a real Web browser.
<p><b>Satisfactory policy</b>: this compact policy is considered <em>satisfactory</em> according to the rules defined by Internet Explorer 6.
IE6 will accept cookies accompanied by this policy under the High, Medium High, Medium, Low, and Accept All Cookies settings.
</body></html>

  1. Content of policy.p3p
<?xml version="1.0"?>
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1">
    <!-- Generated by IBM P3P Policy Editor version Beta 1.12 built 2/27/04 1:19 PM -->

    <!-- Expiry information for this policy -->
    <EXPIRY max-age="86400"/>

<POLICY
    name="App"
    discuri="ABSOLUTE URL TO policy.html"
    xml:lang="de">
    <!-- Description of the entity making this policy statement. -->
    <ENTITY>
    <DATA-GROUP>
<DATA ref="#business.name">COMPANY NAME</DATA>
<DATA ref="#business.contact-info.online.email">[email protected]</DATA>
<DATA ref="#business.contact-info.online.uri">YOURWEBSITE</DATA>
<DATA ref="#business.contact-info.telecom.telephone.number">YOURPHONENUMBER</DATA>
<DATA ref="#business.contact-info.postal.organization">FIRSTNAME LASTNAME</DATA>
<DATA ref="#business.contact-info.postal.street">STREET</DATA>
<DATA ref="#business.contact-info.postal.city">CITY</DATA>
<DATA ref="#business.contact-info.postal.stateprov">STAGE</DATA>
<DATA ref="#business.contact-info.postal.postalcode">POSTALCODE</DATA>
<DATA ref="#business.contact-info.postal.country">Germany</DATA>
    </DATA-GROUP>
    </ENTITY>

    <!-- Disclosure -->
    <ACCESS><all/></ACCESS>


    <!-- Disputes -->
    <DISPUTES-GROUP>
        <DISPUTES resolution-type="service" service="YOURWEBSITE CONTACT FORM" short-description="Dispute">
            <LONG-DESCRIPTION>Contact us for further information</LONG-DESCRIPTION>
    <!-- No remedies specified -->
        </DISPUTES>
    </DISPUTES-GROUP>

    <!-- Statement for group "App control data" -->
    <STATEMENT>
        <EXTENSION optional="yes">
            <GROUP-INFO xmlns="http://www.software.ibm.com/P3P/editor/extension-1.0.html" name="App control data"/>
        </EXTENSION>

    <!-- Consequence -->
    <CONSEQUENCE>
This cookie data is only used to control the application within an iframe (e.g. a Facebook App)</CONSEQUENCE>

    <!-- Data in this statement is marked as being non-identifiable -->
    <NON-IDENTIFIABLE/>

    <!-- Use (purpose) -->
    <PURPOSE><admin/><current/><develop/><historical/><other-purpose>Control Flow of the application</other-purpose></PURPOSE>

    <!-- Recipients -->
    <RECIPIENT><ours/></RECIPIENT>

    <!-- Retention -->
    <RETENTION><no-retention/></RETENTION>

    <!-- Base dataschema elements. -->
    <DATA-GROUP>
    <DATA ref="#dynamic.cookies"><CATEGORIES><navigation/></CATEGORIES></DATA>
    </DATA-GROUP>
</STATEMENT>

<!-- End of policy -->
</POLICY>
</POLICIES>

我有两个网站,假设他们是example.comanotherexample.net 。 在anotherexample.net/page.html ,我有一个IFRAME SRC="http://example.com/someform.asp" 。 该IFRAME显示一个表格供用户填写并提交至http://example.com/process.asp 。 当我在自己的浏览器窗口中打开表单(“ someform.asp ”)时,一切正常。 但是, 当我在IE 6或IE 7中以IFRAME的形式加载someform.asp时,不会保存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 +服务器端脚本显然能够避开这个问题,但这看起来非常像一个bug,再加上它会打开一整套新的安全漏洞 。 我不希望我的应用程序使用错误+安全漏洞的组合,只是因为它很容易。

编辑: P3P政策是根本原因 ,下面有完整的解释。


您也可以像这样组合p3p.xml和policy.xml文件:

/home/ubuntu/sites/shared/w3c/p3p.xml

<META xmlns="http://www.w3.org/2002/01/P3Pv1">
  <POLICY-REFERENCES>
    <POLICY-REF about="#policy1">
      <INCLUDE>/</INCLUDE>
      <COOKIE-INCLUDE/>
    </POLICY-REF>
  </POLICY-REFERENCES>
  <POLICIES>
    <POLICY discuri="" name="policy1">
      <ENTITY>
        <DATA-GROUP>
          <DATA ref="#business.name"></DATA> 
          <DATA ref="#business.contact-info.online.email"></DATA> 
        </DATA-GROUP>
      </ENTITY>
      <ACCESS>
        <nonident/>
      </ACCESS>
      <!-- if the site has a dispute resolution procedure that it follows, a DISPUTES-GROUP should be included here -->
      <STATEMENT>
        <PURPOSE>
          <current/>
          <admin/>
          <develop/>
        </PURPOSE>
        <RECIPIENT>
          <ours/>
        </RECIPIENT>
        <RETENTION>
          <indefinitely/>
        </RETENTION>
        <DATA-GROUP>
          <DATA ref="#dynamic.clickstream"/>
          <DATA ref="#dynamic.http"/>
        </DATA-GROUP>
      </STATEMENT>
    </POLICY>
  </POLICIES>
</META>

我发现添加头文件的最简单方法是通过Apache进行代理,并使用mod_headers,如下所示:

<VirtualHost *:80>
  ServerName mydomain.com

  DocumentRoot /home/ubuntu/sites/shared/w3c/

  ProxyRequests off
  ProxyPass /w3c/ !
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
  ProxyPreserveHost on

  Header add p3p 'P3P:policyref="/w3c/p3p.xml", CP="NID DSP ALL COR"'
</VirtualHost>

因此,我们将除了那些/w3c/p3p.xml以外的所有请求都委托给我们的应用程序服务器。

您可以使用W3C验证器对其进行全部测试



我得到它的工作,但解决方案有点复杂,所以请忍受我。

发生了什么

实际上,Internet Explorer对IFRAME页面的信任程度较低(IE称为“第三方”内容)。 如果IFRAME中的页面没有隐私政策,则其Cookie被阻止(状态栏中的眼睛图标表示它,当您点击它时,它会显示一个阻止的URL列表)。

邪恶之眼http://stuff.piskvor.org/cookies_blocked_MSIE_eye.png

在这种情况下,当cookie被阻塞时,会话标识符不会被发送,并且目标脚本会引发'未找到会话'错误。

(我已经尝试将会话标识符设置为表单并从POST变量中加载它, 这可能会起作用 ,但出于政治原因,我无法做到这一点。)

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

如何解决它

创建一个p3p策略

一个好的起点是W3C教程 。 我已经完成了它,下载了IBM隐私策略编辑器,并且在那里我创建了一个隐私策略的表示,并给它一个名称以引用它(这里是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上设置了web服务器来发送带有响应的紧凑标题,如下所示:

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

利润!

在这种配置下,邪恶之眼不会出现,cookie即使在IFRAME中也会保存,并且应用程序可以正常工作。

编辑:除非你喜欢从法律诉讼中捍卫,否则不要做

有几个人建议“只需将一些标签放入P3P标头,直到邪恶之眼放弃”。

标签不仅仅是一堆,它们具有真实的世界意义 ,它们的使用赋予您真正的世界责任

例如,假装你从不收集用户数据可能会使浏览器感到高兴,但如果你真正收集用户数据,P3P就会与现实相冲突。 简单而简单, 你有意向用户说谎 ,这在某些国家可能是犯罪行为。 如在“入狱,不要收200美元”。

一些例子( 见全套标签的p3pwriter ):

  • NOI :“网站不收集识别的数据。” (只要有任何定制,登录或任何数据收集(*****分析,任何人?),您必须在您的P3P中承认)
  • STP :保留信息以符合规定的目的。 这要求信息在尽可能早的时候被丢弃。 网站必须有保留策略来建立销毁时间表。 保留策略必须包含在网站的人们可以阅读的隐私政策中,或者链接到该网站的隐私政策。“(因此,如果您发送STP但没有保留策略,那么您可能会犯下欺诈行为,这是多么酷?完全没有。)

我不是律师,但我不愿意上法庭看看P3P标题是否真的具有法律约束力,或者如果您可以向您的用户承诺任何内容而实际上不愿意兑现承诺。



这是埋在其他答案的评论,但我几乎错过了,所以它似乎值得它自己的答案。

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

CP="my compact p3p policy"

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

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

您可以选择包含一个指向页面的链接,解释为什么您没有p3p政策,就像Google和Facebook一样(他们在这里指出: https://www.facebook.com/help/327993273962160/https://support.google.com/accounts/answer/151657 ,这里是: https://www.facebook.com/help/327993273962160/ )。

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


我也有过这个问题,我以为我会发布我在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);
    }
}

使用示例:

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

        return View();
    }

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


我在这里没有提到的一个解决方案是使用会话存储而不是cookie。 当然这可能不符合每个人的要求,但在某些情况下,这是一个简单的解决方法。


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

我注意到P3P概念非常过时,似乎只能被Internet Explorer(IE)真正使用/强制执行。

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

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

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

  1. 谁在乎? 换句话说,如果我在标题中加入“土豆”一词,我可以被起诉吗?
  2. 其他公司做什么?

我的发现是:

  1. 没人在乎。 我无法找到表明此技术具有任何法定权重的单个文档。 在我的研究期间,我没有发现世界各地的一个国家采取了一项法律,禁止您在P3P标题中加入“土豆”一词
  2. Google和Facebook都在他们的P3P头部字段中加入了一个链接,指向描述为什么他们没有P3P头部的页面。

这个概念诞生于2002年,令我感到困惑的是,这种过时的,合法的未实现的概念仍然被IE中的开发者强加于人。 如果这个头文件没有任何合法的分支,这个头文件应该被忽略(或者,在控制台中生成一个警告或通知)。 没有强制执行! 我现在不得不在我的代码中插入一行(并向客户端发送一个头文件),它绝对没有任何问题。

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

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

问题解决了,IE对这个马铃薯很满意。


这篇文章提供了一些关于P3P的评论和一个捷径解决方案,可以减少IE7和IE8的问题。


任何在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


A better solution would be to make an Ajax call inside the iframe to the page that would get/set cookies...


For anyone trying to get the P3P Compact Policy working with static content:

It is only possible if you are able to send custom server-side response headers with the static content.

For a more detailed explanation see my answer here: Set P3P code in HTML


我之前实施了一项完整的P3P政策,但又不想再为我正在开发的一个新项目再次经历麻烦。 我发现这个链接对问题的简单解决方案很有用,只需指定一个“CAO PSA OUR”的最小紧凑P3P策略:

http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html

该文章引用了一个(现在已断开)链接到Microsoft kb文章。 该政策为我做了诡计!



这是一个关于这个问题的重要话题,但是我发现一个重要的细节(至少对我来说至关重要)没有在这里或其他任何地方发布(我很抱歉,如果我错过了),P3P行必须是通过从第三方服务器发送的每个文件的头文件,甚至没有设置或使用cookies文件(如Javascript文件或图像)的文件。 否则,Cookie将被阻止。 我在这里的帖子中有更多内容: http://posheika.net/?p=110 : http://posheika.net/?p=110


我能够通过简单地将这个小标题添加到IFrame(PHP解决方案)中的站点来让邪恶的眼睛消失:

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

请记住按Ctrl + F5重新加载您的网站或资源管理器可能仍然显示邪恶的眼睛,尽管事实证明它的工作正常。 这可能是我为什么有这么多问题得到它工作的主要原因。

根本没有任何政策文件是必要的。

编辑:我发现了一个很好的博客条目,解释了IFrame中cookie的问题。 它还可以快速修复C#代码: 框架,ASPX页面和拒绝Cookies


在JWTs的背景下 ,Stormpath写了一篇相当有用的文章,概述了可能的存储方法以及与每种方法有关的(dis-)优点。

它还简要介绍了XSS和CSRF攻击,以及如何对付它们。

我附上了以下文章的一些简短摘要,以防他们的文章脱机/他们的网站停止运行。

本地存储

问题:

Web存储(localStorage / sessionStorage)可以通过JavaScript在同一个域上访问。 这意味着您网站上运行的任何JavaScript都将有权访问Web存储,并且因此可能容易受到跨站点脚本攻击(XSS)的攻击。 简而言之,XSS是一种攻击者可以注入将在您的页面上运行的JavaScript的漏洞。 基本的XSS攻击尝试通过表单输入注入JavaScript,攻击者在这里输入警报('你被黑客攻击'); 转换成表格以查看它是否由浏览器运行并且可以被其他用户查看。

预防:

为了防止XSS,常见的反应是转义和编码所有不可信的数据。 但这远不是完整的故事。 2015年,现代网络应用使用托管在CDN或外部基础架构上的JavaScript。 现代Web应用程序包括用于A / B测试,漏斗/市场分析和广告的第三方JavaScript库。 我们使用像Bower这样的包管理器将其他人的代码导入到我们的应用程序中。

如果只使用其中一个脚本受到攻击,该怎么办? 恶意JavaScript可能嵌入在页面中,Web存储受到威胁。 这些类型的XSS攻击可以在不知情的情况下获取访问您网站的所有人的网络存储。 这可能是为什么一些组织建议​​不要在Web存储中存储任何有价值的东西或信任任何信息。 这包括会话标识符和令牌。

作为存储机制,Web存储在传输过程中不执行任何安全标准。 无论谁读取Web Storage并使用它,都必须进行尽职调查,以确保他们始终通过HTTPS发送JWT,而不会使用HTTP。

饼干

问题:

Cookie与HttpOnly cookie标志一起使用时,不能通过JavaScript访问,并且不受XSS影响。 您还可以设置安全cookie标志以保证cookie仅通过HTTPS发送。 这是过去利用cookie存储令牌或会话数据的主要原因之一。 现代开发人员不愿意使用cookie,因为他们传统上要求将状态存储在服务器上,从而打破了RESTful最佳实践。 如果您要在Cookie中存储JWT,则作为存储机制的Cookie不需要将状态存储在服务器上。 这是因为JWT封装了服务器为请求提供服务所需的所有内容。

但是,Cookie容易受到不同类型的攻击:跨站请求伪造(CSRF)。 CSRF攻击是指当恶意网站,电子邮件或博客导致用户的Web浏览器在用户当前通过身份验证的受信任站点上执行不需要的操作时发生的一种攻击。 这是浏览器如何处理cookie的一个漏洞。 Cookie只能发送到允许的域名。 默认情况下,这是最初设置Cookie的域。 无论您是在galaxies.com还是hahagonnahackyou.com,Cookie都会发送请求。

预防:

通过使用同步的令牌模式可以防止CSRF。 这听起来很复杂,但所有现代Web框架都支持这一点。

例如,AngularJS有一个解决方案来验证该cookie只能被您的域访问。 直接从AngularJS文档:

执行XHR请求时,$ http服务从cookie(默认为XSRF-TOKEN)读取一个标记,并将其设置为HTTP标头(X-XSRF-TOKEN)。 由于只有在您的域上运行的JavaScript才能读取cookie,因此您的服务器可以确保XHR来自运行在您的域上的JavaScript。 您可以通过包含xsrfToken JWT声明来使此CSRF保护无状态:

{
  "iss": "http://galaxies.com",
  "exp": 1300819380,
  "scopes": ["explorer", "solar-harvester", "seller"],
  "sub": "[email protected]",
  "xsrfToken": "d9b9714c-7ac0-42e0-8696-2dae95dbc33e"
}

利用您的Web应用程序框架的CSRF保护功能,Cookie可以稳固地存储JWT。 通过检查API的HTTP Referer和Origin头,也可以部分阻止CSRF。 CSRF攻击将具有与您的应用程序无关的Referer和Origin标头。

完整的文章可以在这里找到: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ : https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/

他们也有关于如何最好地设计和实现JWT的有用文章,关于令牌本身的结构: https://stormpath.com/blog/jwt-the-right-way/ ://stormpath.com/blog/jwt-the-right-way/





internet-explorer cookies privacy p3p