最近在做一个流量统计的东西的时候,偶然发现IE在对iframe里面的页面写Cookie的时候有一些安全限制,导致读取Cookie不成功,找了好长时间的解决办法,重要找到如下的办法:
1.页面里的COOKIE不能是浏览器进程的COOKIE(包括验证票和不设置超时时间的COOKIE),否则跨域会取不到.这点做跨域COOKIE的人比较少提到.不过实际上留意下几家大学做的方案,有细微的提到他们的验证模块里的COOKIE是有设置超时时间的.
2.当利用IFRAME时,记得要在相应的动态页的页头添加一下P3P的信息,否则IE会自觉的把IFRAME框里的COOKIE给阻止掉,产生问题.本身不保存自然就取不到了.这个其实是FRAMESET和COOKIE的问题,用FRAME或者IFRAME都会遇到.
3.测试时输出TRACE,会减少很多测试的工作量.
只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。他们所用的内容是:
P3P: CP=’CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR’
ASP直接在头部加了头部申明,测试有效。
<!--sponse.AddHeader "P3P", "CP=CAO PSA OUR-->
php的话,应该是如下写法:
header(’P3P: CP=CAO PSA OUR’);
ASP.NET的话
通过在代码上加Response.AddHeader(”P3P”, “CP=CAO PSA OUR”)或者在Window服务中将ASP.NET State Service 启动。
JSP:
response.setHeader(”P3P”,”CP=CAO PSA OUR”)
You can add a P3P compact policy header to your child content, and you can declare that no malicious actions are performed with the data of the user. If Internet Explorer detects a satisfactory policy, then Internet Explorer permits the cookie to be set.
Visit the following MSDN Web site for a complete list of satisfactory and unsatisfactory policy codes:
Privacy in Internet Explorer 6
http://msdn.microsoft.com/workshop/security/privacy/overview/privacyie6.asp (http://msdn.microsoft.com/workshop/security/privacy/overview/privacyie6.asp)
A simple compact policy that fulfills this criteria follows:
P3P: CP=”CAO PSA OUR”
This code sample shows that your site provides you access to your own contact information (CAO), that any analyzed data is only “pseudo-analyzed”, which means that the data is connected to your online persona and not to your physical identity (PSA), and that your data is not supplied to any outside agencies for those agencies to use (OUR).
You can set this header if you use the Response.AddHeader method in an ASP page. In ASP.NET, you can use the Response.AppendHeader method. You can use the IIS Management Snap-In (inetmgr) to add to a static file.
Follow these steps to add this header to a static file:
Click Start, click Run, and then type inetmgr.
In the left navigation page, click the appropriate file or directory in your Web site to which you want to add the header, right-click the file, and then click Properties.
Click the HTTP Headers tab.
In the Custom HTTP Headers group box, click Add.
Type P3P for the header name, and then for the compact policy string, type CP=…, where “…” is the appropriate code for your compact policy.
Alternatively, Internet Explorer users can modify their privacy settings so that they are prompted to accept third party content. The following steps show how to modify the privacy settings:
Run Internet Explorer.
Click Tools, and then click Internet Options.
Click the Privacy tab, and then click Advanced.
Click to select the Override automatic cookie handling check box.
To allow ASP and ASP.NET session cookies to be set, click to select the Always allow session cookies check box.
To receive a prompt for any type of third party cookie, click Prompt in the Third-party Cookies list.
关于IE6 IFrame或Frame中读写cookie的问题分析
一、起因
信通宝在客户网站上浮动窗口的实现是通过在客户的网站上加上一段链接脚本,脚本在客户网站上写入一IFrame,此Iframe中的内容src=”"是指向信通宝网站,如src=”www.xtb.com/script.js”。 信通宝的功能需求中有一项是要求记录用户访问此网站的次数的,这就要求必须在访客的电脑中保存cookie才能实现。但是在IE6中,Frame和 IFrame中无法按常规方法来读写cookies。因为IE6加入了以PlatformforPrivacyPreferences(P3P)为基础的 隐私保护功能,有关此功能的说明请参阅“微软公布IE6新增隐私保护功能的详情”
文章出处:http://hi.baidu.com/wuchangx
email:wuchang@guet.edu.cn
IE6中的隐私保护设置:
在“工具”菜单下选择“Internet选项”。点击“隐私”标签。IE 6的缺省隐私等级设置为“中”——即“阻止没有合同隐私策略的第三方cookie;阻止使用个人可标识信息而没有您的隐含许可的第三方cookie;限制使用个人可标识信息而没有隐含许可的第一方cookie”。见下图:
在ie6中Cookie被分成了first party cookie和third party cookie,即第一方Cookie和第三方Cookie,所谓的第三方Cookie是指在Frame或者Iframe中嵌套页面的Cookie。举例来 说,ABC公司购买了我们的信通宝产品,并在其公司网站http://www.abc.com/上加上了信通宝的链接脚本(www.xtb.com/test.js),这个脚本在abc公司的网站上加上一个IFrame,此Iframe的内容为xtb.com上的某个页面如(www.xtb.com/List.aspx?cid=1234),而这个List.aspx页面需要在读写cookie以便记录访客的次数等信息。当访客在访问ABC公司的网站时,http://www.abc.com/即为第一方站点,信通宝视为第三方站点,当List.aspx试图读写cookie时,IE6就会自动拦截(在状态栏下显示红色禁止图标),可以通过查看得到类似如下图的隐私报告:
以下是凌风现在使用的解决方法:
—————————————————-
凌风(33446***) 09:28:58
信通宝代码在平台中可用部分之一:
//添加P3P到HTTP头输出流,用于解决IFrame下不能设置cookie的问题
Response.AddHeader(”P3P”, “CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”);
凌风(3344***) 09:31:16
在IE下是不能在IFrame中设置cookie的,在FF下可以,但将以上代码拷贝到Page_Load中,即可解决该问题。
—————————————
此方法应用在信通宝第2版中,并通过测试。
二、P3P
什么是P3P?
P3P是万维网联盟(W3C)公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。现在有越来越多的网站在消费者访问时,都 会收集一些用户信息。制定P3P标准的出发点就是为了减轻消费者因网站收集个人信息所引发的对于隐私权可能受到侵犯的忧虑。P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然 后决定是否接受cookie或是否使用该网站。
访问官方P3P网页以获取更多技术信息:http://www.w3.org/P3P。
三、相关技术文章
Help! IE6 Is Blocking My Cookies[1],[2]
a).What is P3P?
b).Why Does IE6 Block My Cookies?
c).What are Third-Party Cookies?
e).How Can I Prevent IE6 from Blocking My Cookies?
f).How Do I P3P Enable My Web Site and Use Compact Policies?
g).I P3P-Enabled My Site, But My Cookies are Still Being Blocked by IE6
h).My Cookies aren’t being Blocked, But Users are Not Able to View an i).IE6 Privacy Report for My Site
The Platform for Privacy Preferences 1.0 Deployment Guide
Make Your Web Site P3P Compliant
此文通过6个简单的步骤介绍如何在网站上实施P3P策略。
四、“官方”的解决方法
看完了第三节的文章你会发现,所谓P3P策略实际就是一个部署在Web服务器上的简单XML文件,指明网站打算使用哪些cookie以及派什么用途。这个XML文件类似这种格式
name="*"
value="*"
domain="*"
path="*"/>
可以使用IBM的P3P策略编辑器IBM’s P3P Policy Editor来编写这个文件。
三种部署方式:
Well-Know location
/w3c/p3p.xml
将P3P Reference File档案更名为p3p.xml,并放置在/w3c目录当中
HTTP 头
P3P:policyref=”http://www.mysite.com/w3c/p3p.xml” CP=”ALL DSP COR NID CUR OUR IND PUR”
CP是由3字符代码组成的列表(相关信息已经在W3C网站上进行了说明)。在上例中,该网站不定期地(INDefinite)为OUR公司收集购买商品项 目(PURchasing)或完成当前活动(CURrent)的有关数据。有疑问(DiSPutes)、不可识别(Nonidentifiable)的数 据作为cookie存储(NID)。由于我们的网站以cookie的方式存储客户号,所以NID应该从列表中删除。
CP应该匹配完整的策略;因此,如果你在CP中使用了NID,那么你应该在你的策略文件中包括标签。为了匹配这些设置 而在下一节介绍的校验工具会对以上代码进行检查,如果有差异的话,Internet Explorer 6.0浏览器也会检查策略文件并且令策略文件无效
如果是asp/asp.net/jsp/php等动态页面,也可以添加类似以下代码:
response.setHeader(”P3P”,”policyref=”http://www.mysite.com/w3c/p3p.xml” CP=”ALL DSP COR CUR OUR IND PUR”");
在HTML内容中嵌入Link标签
分享到:
相关推荐
JQuery的跨域解决方案主要依赖于JSONP(JSON with Padding)技术。JSONP是一种绕过同源策略的方式,它利用HTML中的`<script>`标签没有同源策略限制的特点。当jQuery使用`dataType: 'jsonp'`时,它实际上是在做以下几...
ssm跨域问题解决方案
### 跨域访问解决方案与Cookie处理 在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地...
### ASP.NET跨域SSO解决方案 #### 一、引言 在现代企业级应用开发中,随着业务系统越来越复杂,各个子系统之间的交互也日益频繁。为了提高用户体验并简化管理流程,单点登录(Single Sign-On,简称SSO)成为了一个...
**Ajax跨域访问解决方案** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,提升用户体验。然而,由于浏览器的同源策略限制,Ajax请求只能向同源(协议、域名和端口相同)...
JavaScript跨域访问解决方案 在Web开发中,JavaScript的同源策略是浏览器为了保障用户安全而实施的一项重要机制。它限制了脚本只能访问与当前页面具有相同协议(如http或https)、主机名和端口号的资源。然而,在...
本篇文章将详细介绍如何解决Geoserver的跨域问题。 首先,我们需要理解跨域问题的背景。根据同源策略,浏览器只允许与同一源(协议+域名+端口)的请求进行通信。但在实际应用中,比如一个网站前端和Geoserver不在同...
"跨域请求解决方案源代码(JSONP, CORS)"这个主题主要关注如何绕过同源策略,实现跨域数据交互。以下是对这两个常见跨域解决方案的详细解释: **JSONP(JSON with Padding)** JSONP是一种早期的跨域数据交互方式...
总结起来,SignalR 跨域问题的解决方案主要依赖于 CORS 配置,同时可以结合其他技术如 JSONP、代理服务器、IFrame 和 PostMessage,以及 WebSocket 协议,根据实际项目需求选择合适的解决方案。正确配置后,SignalR ...
本文将深入探讨JS跨域的解决方案,帮助开发者理解并解决这个问题。 首先,我们需要了解什么是同源策略。同源策略是浏览器为了保护用户数据安全而实施的一项机制,它限制了来自不同源的脚本之间进行交互。然而,这在...
跨域请求是Web开发中一个常见的挑战,尤其是在使用Ajax进行异步数据交互时。这个问题源自浏览器的同源策略,该策略限制了...如果需要更深入的了解或实践代码示例,可以查看压缩包中的“java跨域请求解决方案”文件。
为了解决这个问题,润乾报表提供了一种解决方案,即通过设置`document.domain`属性来实现跨域资源共享(CORS)。首先,需要确保在web.xml配置文件中使用域名而不是IP地址,例如将`reportPath`的值改为`...
前后端分离H5 跨域解决方案 提供多种解决方法 详情请下载文件 自己看 100%可以解决你的问题
跨域及其解决方案.xmind
JS 跨域访问解决方案总结 JS 跨域访问解决方案总结是指在不同域名站点之间进行资源访问的解决方案。默认情况下,脚本访问文档属性等数据采用的是同源策略(Same origin policy),即如果两个页面的协议、域名和端口...
JavaScript跨域访问解决方案 在Web开发中,由于同源策略的限制,JavaScript通常只能与同一协议、域名和端口的服务器进行通信。然而,随着Web应用程序的复杂性和交互性增加,跨域请求变得越来越普遍,比如加载外部...
本文将深入探讨JavaScript跨域问题的原因、影响以及多种解决方案,帮助开发者理解和解决这个问题。 ### 1. 同源策略 同源策略是浏览器为了安全考虑而实施的一项机制,它规定了只有相同协议(http、https等)、相同...
Vue+SpringBoot前后端分离工程跨域问题解决方案解析 本文主要介绍了Vue+SpringBoot前后端分离工程跨域问题解决方案解析,通过示例代码详细介绍了跨域问题的解决方案,对大家的学习或者工作具有一定的参考学习价值。...