1. 程式人生 > >IE裡Iframe的Cookie問題解決辦法總結

IE裡Iframe的Cookie問題解決辦法總結

最近在做一個流量統計的東西的時候,偶然發現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直接在頭部加了頭部申明,測試有效。
<%Response.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)



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:

  1. Click Start, click Run, and then type inetmgr.
  2. 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.
  3. Click the HTTP Headers tab.
  4. In the Custom HTTP Headers group box, click Add.
  5. 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:

  1. Run Internet Explorer.
  2. Click Tools, and then click Internet Options.
  3. Click the Privacy tab, and then click Advanced.
  4. Click to select the Override automatic cookie handling check box.
  5. To allow ASP and ASP.NET session cookies to be set, click to select the Always allow session cookies check box.
  6. 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)為基礎的 隱私保護功能,有關此功能的說明請參閱“”

文章出處:http://hi.baidu.com/wuchangx
email:[email protected]

IE6中的隱私保護設定:
在“工具”選單下選擇“Internet選項”。點選“隱私”標籤。IE 6的預設隱私等級設定為“中”——即“阻止沒有合同隱私策略的第三方cookie;阻止使用個人可標識資訊而沒有您的隱含許可的第三方cookie;限制使用個人可標識資訊而沒有隱含許可的第一方cookie”。見下圖:

在ie6中Cookie被分成了first party cookie和third party cookie,即第一方Cookie和第三方Cookie,所謂的第三方Cookie是指在Frame或者Iframe中巢狀頁面的Cookie。舉例來 說,ABC公司購買了我們的信通寶產品,並在其公司網站www.abc.com上加上了信通寶的連結指令碼(www.xtb.com/test.js),這個指令碼在abc公司的網站上加上一個IFrame,此Iframe的內容為xtb.com上的某個頁面如(www.xtb.com/List.aspx?cid=1234),而這個List.aspx頁面需要在讀寫cookie以便記錄訪客的次數等資訊。當訪客在訪問ABC公司的網站時,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或是否使用該網站。

三、相關技術文章

  1. 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

四、“官方”的解決方法

看完了第三節的文章你會發現,所謂P3P策略實際就是一個部署在Web伺服器上的簡單XML檔案,指明網站打算使用哪些cookie以及派什麼用途。這個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來編寫這個檔案。

三種部署方式:

  1. Well-Know location
    /w3c/p3p.xml
    將P3P Reference File檔案更名為p3p.xml,並放置在/w3c目錄當中
  2. 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,那麼你應該在你的策略檔案中包括<nonident/>標籤。為了匹配這些設定 而在下一節介紹的校驗工具會對以上程式碼進行檢查,如果有差異的話,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"");
  3. 在HTML內容中嵌入Link標籤
    <link rel="P3Pv1" href="/w3c/p3p.xml"></link>

相關推薦

IEIframe的Cookie問題解決辦法總結

最近在做一個流量統計的東西的時候,偶然發現IE在對iframe裡面的頁面寫Cookie的時候有一些安全限制,導致讀取Cookie不成功,找了好長時間的解決辦法,重要找到如下的辦法: 1.頁面裡的COOKIE不能是瀏覽器程序的COOKIE(包括驗證票和不設定超時時間的COOK

(轉)啟動網卡報錯(Failed to start LSB: Bring up/down networking )解決辦法總結

deb contain ade nag disabled dev nta container save 啟動網卡報錯(Failed to start LSB: Bring up/down networking )解決辦法總結 原文:http://blog.51cto.com

Nginx伺服器出現502錯誤的原因和解決辦法總結

  一些執行在Nginx上的網站有時候會出現“502 Bad Gateway”錯誤,有些時候甚至頻繁的出現。有些站長是在剛剛轉移到Nginx之後就出現了這個問題,所以經常會懷疑這是不是Nginx的問題,但事實上這是個誤區。 以下是從張宴和Ayou的部落格蒐集整理的一些Ngin

【轉】【centos】啟動網絡卡報錯(Failed to start LSB: Bring up/down networking )解決辦法總結

今天一臺一直在用的虛擬機器重啟後,CRT連線不上,ip也ping不通,重啟網絡卡報錯,“Failed to start LSB: Bring up/down networking”,參考:http://blog.51cto.com/11863547/1905929,解決。 遇到這個錯誤好幾次,所以總結了一下

Matlab執行時出現“Out of Memory”問題,可能的解決辦法總結

1.在命令列中(不是在.m檔案)輸入“pack”命令,用以整理記憶體;    由於matlab是將連續記憶體塊分配給新建變數,當連續的記憶體塊不足以儲存資料時,系統就會報錯,利用“pack”命令可以將原來斷斷續續的記憶體整理成連續儲存塊,儘可能保證記憶體擁有足夠的連續記憶體

Access提示Insert Into 語法錯誤解決辦法總結

1.關鍵字:如果你的資料庫的表的設計包含了Access包含的關鍵字,則在插入的時候會出現“Insert Into 語法錯誤” 例如: string sqlText = String.Format("Insert into TestTable(Id,Order) values ({0},{1})",123,

J2EE專案記憶體溢位解決辦法總結

提示:Caused by: java.lang.OutOfMemoryError: PermGen space 前段時間,發現專案記憶體溢位了。apache+tomcat叢集。解決辦法如下: 1.  用jprofile工具查詢專案情況。或者用JDK自帶的工具。如:jcon

python學習--response亂碼問題解決辦法總結

python使用response.read()讀取請求結果時遇到中文會產生亂碼,有以下幾種可能: 1) IDE問題,我使用的是pycharm,在控制檯中輸出中文時產生亂碼,此時需要將pycharm的編碼方式改為'GBK'即可 2) reponse中headers包含'C

error while loading shared libraries 錯誤解決辦法總結

最近安裝了裝了幾次ACE庫,裝起來會出現很多問題。 其實我發現直接按照ace的幫助文件進行編寫。就差不多。 安裝完成後,經常會遇到以下問題error while loading shared libraries,就是編譯器沒有找到相應的lib庫檔案。 從網際網路上找

防止表格被內容撐破的解決辦法總結

預設情況下,設定了表格大小,看起來沒什麼問題,但當表格裡裝了很多比表格寬度要寬的內容時就會發現表格自然的被撐大了。第一種情況是表格被英文單詞撐破了。解決辦法是在表格的屬性裡設定style="word-wrap:break-word;"但其實還是有問題。當往表格裡裝一長串的英文

IIS 403 錯誤詳細原因 及解決辦法總結

403.1 - 執行訪問被禁止 下面是導致此錯誤資訊的兩個常見原因: 1、您沒有足夠的執行許可   例如,如果試圖訪問的ASP頁所在的目錄許可權設為“無”,或者,試圖執行的CGI腳 本所在的目錄許可權為“只允許指令碼”,將出現此錯誤資訊。   若要修改執行許可權,請在Microsoft管理控制檯(MMC)中右

cxfreeze打包工程檔案生成.exe,執行exe出現閃退問題,相關解決辦法總結

cxfreeze打包工程檔案生成.exe,包含numpy,matplotlib, mutiprocess等工具包,執行exe出現閃退問題 使用cxfreeze打包,注意cxfreeze的版本要和pyt

關於LR錄製時不能自動啟動IE瀏覽器的解決方法總結

錄製環境:win7  64位作業系統  IE9  LR11 在使用loadrunner進行效能除錯時,錄製指令碼的時候,發現loadrunner不能呼叫IE、不能自動啟動IE,還有一種情況是可以啟動,但是錄製不到內容,事務數一直為0,action的內容為空。 一般遇到這種

Win10 系統安裝Sql Server2008 R2 資料庫遇到的問題及解決辦法總結

1.開始安裝時,提示要先安裝 “.NET Framework 3.5(包括.NET 2.0和3.0)”,之前已經下載好.NET Framework 3.5 sp1,安裝時還是提示要先安裝 “.NET Framework 3.5(包括.NET 2.0和3.0)”,結果還是要去

VS2010平臺下除錯視窗一閃而過的解決辦法總結

在VS底下執行程式的時候,除錯視窗可能會出現一閃而過的現象,以下是我自己對我電腦上安裝的VS2010對此情況的解決方法的總結: 一.在C檔案中: 1.執行時進行的操作是編譯(F5),若仍然一閃而過,則可先執行程式(Ctrl+F5)或者首先在程式頭新增標頭檔案

iOS APP打包遇到的問題和解決辦法總結 (待更新)

** 1.App提交報錯 -22421 ** 解決辦法:用Application Loader上傳包 遇到這樣的情況或者錯誤程式碼-22421錯誤,可直接點選Done 然後通過右邊的Export直接生成IPA包,然後下載Application Loa

IE11中OCX控制元件的事件不能夠被IE捕獲的解決辦法

寫了一個OCX控制元件,在OCX控制元件中觸發一事件,在IE11之前的版本使用attachEvent註冊一個回撥函式後IE11可以捕獲到事件,但IE11中提示attachEvent不支援. In IE11, the attachEvent has been droppe

SCRIPT65535: 意外地呼叫了方法或屬性訪問(ie不相容解決辦法)

在IE8下面,在使用jquery的時候可能會出現這種狀況,解決辦法有一下兩種: 1.凡是input,不管任何型別,不能用text()方法,只能用val()方法; 2.如果看不出來,在js程式碼上加debugger,一步一步除錯,看哪行出錯自然就知道這個方法不能用了

laravel框架使用中錯誤及解決辦法總結

auto laravel 輸入 裏的 原因 情況 autoload san 錯誤 1.Laravel訪問出錯錯誤信息:`Warning: require(/vendor/autoload.php):failed to open stream: No such file or

android 開發中遇到錯誤及解決辦法總結(在別處看到的)

一、dialog.show()引起的android.view.WindowManager$BadTokenException錯誤錯誤日誌 android.view.WindowManager$BadTokenException: Unable to add window -