最近在做一個(gè)流量統(tǒng)計(jì)的東西的時(shí)候,偶然發(fā)現(xiàn)IE在對(duì)iframe里面的頁(yè)面寫Cookie的時(shí)候有一些安全限制,導(dǎo)致讀取Cookie不成功,找了好長(zhǎng)時(shí)間的解決辦法,重要找到如下的辦法:
1.頁(yè)面里的COOKIE不能是瀏覽器進(jìn)程的COOKIE(包括驗(yàn)證票和不設(shè)置超時(shí)時(shí)間的COOKIE),否則跨域會(huì)取不到.這點(diǎn)做跨域COOKIE的人比較少提到.不過(guò)實(shí)際上留意下幾家大學(xué)做的方案,有細(xì)微的提到他們的驗(yàn)證模塊里的COOKIE是有設(shè)置超時(shí)時(shí)間的.
2.當(dāng)利用IFRAME時(shí),記得要在相應(yīng)的動(dòng)態(tài)頁(yè)的頁(yè)頭添加一下P3P的信息,否則IE會(huì)自覺(jué)的把IFRAME框里的COOKIE給阻止掉,產(chǎn)生問(wèn)題.本身不保存自然就取不到了.這個(gè)其實(shí)是FRAMESET和COOKIE的問(wèn)題,用FRAME或者IFRAME都會(huì)遇到.
3.測(cè)試時(shí)輸出TRACE,會(huì)減少很多測(cè)試的工作量.
只需要設(shè)置 P3P HTTP Header,在隱含 iframe 里面跨域設(shè)置 cookie 就可以成功。他們所用的內(nèi)容是:
P3P: CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'
ASP直接在頭部加了頭部申明,測(cè)試有效。
<%Response.AddHeader "P3P", "CP=CAO PSA OUR"%>
php的話,應(yīng)該是如下寫法:
header('P3P: CP=CAO PSA OUR');
ASP.NET的話
通過(guò)在代碼上加Response.AddHeader("P3P", "CP=CAO PSA OUR")或者在Window服務(wù)中將ASP.NET State Service 啟動(dòng)。
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:
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.
關(guān)于IE6 IFrame或Frame中讀寫cookie的問(wèn)題分析
一、起因
信通寶在客戶網(wǎng)站上浮動(dòng)窗口的實(shí)現(xiàn)是通過(guò)在客戶的網(wǎng)站上加上一段鏈接腳本,腳本在客戶網(wǎng)站上寫入一IFrame,此Iframe中的內(nèi)容src=""是指向信通寶網(wǎng)站,如src="www.xtb.com/script.js"。 信通寶的功能需求中有一項(xiàng)是要求記錄用戶訪問(wèn)此網(wǎng)站的次數(shù)的,這就要求必須在訪客的電腦中保存cookie才能實(shí)現(xiàn)。但是在IE6中,F(xiàn)rame和 IFrame中無(wú)法按常規(guī)方法來(lái)讀寫cookies。因?yàn)镮E6加入了以PlatformforPrivacyPreferences(P3P)為基礎(chǔ)的 隱私保護(hù)功能,有關(guān)此功能的說(shuō)明請(qǐng)參閱“微軟公布IE6新增隱私保護(hù)功能的詳情”
文章出處:http://hi.baidu.com/wuchangx
email:wuchang@guet.edu.cn
IE6中的隱私保護(hù)設(shè)置:
在“工具”菜單下選擇“Internet選項(xiàng)”。點(diǎn)擊“隱私”標(biāo)簽。IE 6的缺省隱私等級(jí)設(shè)置為“中”——即“阻止沒(méi)有合同隱私策略的第三方cookie;阻止使用個(gè)人可標(biāo)識(shí)信息而沒(méi)有您的隱含許可的第三方cookie;限制使用個(gè)人可標(biāo)識(shí)信息而沒(méi)有隱含許可的第一方cookie”。見下圖:
在ie6中Cookie被分成了first party cookie和third party cookie,即第一方Cookie和第三方Cookie,所謂的第三方Cookie是指在Frame或者Iframe中嵌套頁(yè)面的Cookie。舉例來(lái) 說(shuō),ABC公司購(gòu)買了我們的信通寶產(chǎn)品,并在其公司網(wǎng)站http://www.abc.com/上加上了信通寶的鏈接腳本(www.xtb.com/test.js),這個(gè)腳本在abc公司的網(wǎng)站上加上一個(gè)IFrame,此Iframe的內(nèi)容為xtb.com上的某個(gè)頁(yè)面如(www.xtb.com/List.aspx?cid=1234),而這個(gè)List.aspx頁(yè)面需要在讀寫cookie以便記錄訪客的次數(shù)等信息。當(dāng)訪客在訪問(wèn)ABC公司的網(wǎng)站時(shí),http://www.abc.com/即為第一方站點(diǎn),信通寶視為第三方站點(diǎn),當(dāng)List.aspx試圖讀寫cookie時(shí),IE6就會(huì)自動(dòng)攔截(在狀態(tài)欄下顯示紅色禁止圖標(biāo)),可以通過(guò)查看得到類似如下圖的隱私報(bào)告:
以下是凌風(fēng)現(xiàn)在使用的解決方法:
----------------------------------------------------
凌風(fēng)(33446***) 09:28:58
信通寶代碼在平臺(tái)中可用部分之一:
//添加P3P到HTTP頭輸出流,用于解決IFrame下不能設(shè)置cookie的問(wèn)題
Response.AddHeader("P3P", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
凌風(fēng)(3344***) 09:31:16
在IE下是不能在IFrame中設(shè)置cookie的,在FF下可以,但將以上代碼拷貝到Page_Load中,即可解決該問(wèn)題。
---------------------------------------
此方法應(yīng)用在信通寶第2版中,并通過(guò)測(cè)試。
二、P3P
什么是P3P?
P3P是萬(wàn)維網(wǎng)聯(lián)盟(W3C)公布的一項(xiàng)隱私保護(hù)推薦標(biāo)準(zhǔn),旨在為網(wǎng)上沖浪的Internet用戶提供隱私保護(hù)?,F(xiàn)在有越來(lái)越多的網(wǎng)站在消費(fèi)者訪問(wèn)時(shí),都 會(huì)收集一些用戶信息。制定P3P標(biāo)準(zhǔn)的出發(fā)點(diǎn)就是為了減輕消費(fèi)者因網(wǎng)站收集個(gè)人信息所引發(fā)的對(duì)于隱私權(quán)可能受到侵犯的憂慮。P3P標(biāo)準(zhǔn)的構(gòu)想是:Web 站點(diǎn)的隱私策略應(yīng)該告之訪問(wèn)者該站點(diǎn)所收集的信息類型、信息將提供給哪些人、信息將被保留多少時(shí)間及其使用信息的方式,如站點(diǎn)應(yīng)做諸如 “本網(wǎng)站將監(jiān)測(cè)您所訪問(wèn)的頁(yè)面以提高站點(diǎn)的使用率”或“本網(wǎng)站將盡可能為您提供更合適的廣告”等申明。訪問(wèn)支持P3P網(wǎng)站的用戶有權(quán)查看站點(diǎn)隱私報(bào)告,然 后決定是否接受cookie或是否使用該網(wǎng)站。
訪問(wèn)官方P3P網(wǎng)頁(yè)以獲取更多技術(shù)信息:http://www.w3.org/P3P。
三、相關(guān)技術(shù)文章
- 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
此文通過(guò)6個(gè)簡(jiǎn)單的步驟介紹如何在網(wǎng)站上實(shí)施P3P策略。
四、“官方”的解決方法
看完了第三節(jié)的文章你會(huì)發(fā)現(xiàn),所謂P3P策略實(shí)際就是一個(gè)部署在Web服務(wù)器上的簡(jiǎn)單XML文件,指明網(wǎng)站打算使用哪些cookie以及派什么用途。這個(gè)XML文件類似這種格式
<META xmlns="http://www.w3.org/2000/12/P3Pv1">
<POLICY-REFERENCES>
<POLICY-REF about="/P3P/Policy1.xml">
<COOKIE-INCLUDE
name="*"
value="*"
domain="*"
path="*"/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>
可以使用IBM的P3P策略編輯器IBM's P3P Policy Editor來(lái)編寫這個(gè)文件。
三種部署方式:
- Well-Know location
/w3c/p3p.xml
將P3P Reference File檔案更名為p3p.xml,并放置在/w3c目錄當(dāng)中
- HTTP 頭
P3P:policyref="http://www.mysite.com/w3c/p3p.xml" CP="ALL DSP COR NID CUR OUR IND PUR"
CP是由3字符代碼組成的列表(相關(guān)信息已經(jīng)在W3C網(wǎng)站上進(jìn)行了說(shuō)明)。在上例中,該網(wǎng)站不定期地(INDefinite)為OUR公司收集購(gòu)買商品項(xiàng) 目(PURchasing)或完成當(dāng)前活動(dòng)(CURrent)的有關(guān)數(shù)據(jù)。有疑問(wèn)(DiSPutes)、不可識(shí)別(Nonidentifiable)的數(shù) 據(jù)作為cookie存儲(chǔ)(NID)。由于我們的網(wǎng)站以cookie的方式存儲(chǔ)客戶號(hào),所以NID應(yīng)該從列表中刪除。
CP應(yīng)該匹配完整的策略;因此,如果你在CP中使用了NID,那么你應(yīng)該在你的策略文件中包括<nonident/>標(biāo)簽。為了匹配這些設(shè)置 而在下一節(jié)介紹的校驗(yàn)工具會(huì)對(duì)以上代碼進(jìn)行檢查,如果有差異的話,Internet Explorer 6.0瀏覽器也會(huì)檢查策略文件并且令策略文件無(wú)效
如果是asp/asp.net/jsp/php等動(dòng)態(tài)頁(yè)面,也可以添加類似以下代碼:
response.setHeader("P3P","policyref="http://www.mysite.com/w3c/p3p.xml" CP="ALL DSP COR CUR OUR IND PUR"");
- 在HTML內(nèi)容中嵌入Link標(biāo)簽
<link rel="P3Pv1" href="/w3c/p3p.xml"></link>