初識P3P

Google 標籤: P3P, 第三方cookie, 隱私策略, http head

P3P主要應用於網站跨域訪問方面,全稱為隱私偏好設定平台(platform for privacy preference, P3P)。而談到P3P就不得不提cookie。目前大部分網站應用都使用cookie進行某種行為,比如用戶資訊收集、用戶上網行為分析以及session保持等等。但是在某些情況下,用戶是不願意使用cookie的。而禁止cookie又會妨礙用戶使用某些重要的網站比如在線銀行、網上購物等。所以微軟從ie6開始啟用P3P並可以自定義隱私策略來使用cookie,而Netscape 公司早在2002 年5 月便發布了Netscape Navigator 7 軟體的測試版,該軟體包括與IE6十分相近的P3P功能。

以IE7為例,我們來看看隱私策略的設置:

默認情況下,ie7啟用隱私策略為中。可以看到有兩個阻止一個限制。

這裡解釋一下第一方cookie和第三方cookie。第一方cookie是指你當前訪問的站點的cookie。而第三方cookie是指不是你當前訪問的站點的cookie。比如你當前訪問的是[url]www.abc.com[/url],但是在這個網站上嵌入了其他網站(比如[url]www.xyz.com[/url]),那麼屬於abc.com這個域cookie就是第一方cookie,而屬於xyz.com這個域的cookie就屬於第三方cookie。

再來解釋有兩個阻止一個限制: 第一個阻止(阻止沒有緊湊隱私策略的第三方cookie),即為ie7發現存在沒有緊湊隱私策略的第三方cookie時就將這個cookie在http的request中刪除然後進行http請求(get或者post),「沒有緊湊隱私策略」是指沒有被P3P聲明; 第二個阻止(阻止保存…),即不保存這樣的第三方cookie,因為有些cookie是有有效期的; 第一個限制(限制保存…),即不保存這樣的第一方cookie。

使用「中」的隱私策略等級,可以阻止任何沒有被P3P聲明的第三方cookie。可以通過ie瀏覽器的任務欄上面的「眼睛」來查看都阻止了哪些cookie。而有些業務又必須保證這些cookie不被攔劫,那這個時候就需要使用P3P了。

P3P通過為隱私策略提供一個標準的可機讀格式,以及一個能使Web瀏覽器自動讀取和處理策略的協議解決了這個問題。正因為此,萬維網聯盟(World Wide Web Consortium,W3C)制定了P3P,並把它作為Web 站點與它們的隱私策略相聯繫的標準方法。P3P可以啟用可機讀的隱私策略,而該隱私策略可以由Web瀏覽器和那些能顯示符號、提示用戶或採取其他適當行動的用戶代理工具來自動獲取。其中的一些工具也可以將各個策略與用戶的隱私偏好相比較,並幫助用戶決定何時與Web站點交換數據。

那麼P3P到底是怎樣工作的呢?這裡只涉及到P3P的工作原理,如何實現P3P是需要寫程式的,而程式本人一竅不通,所以不做介紹,有興趣的可以google一下,到處都是。

上面提到了第三方cookie被P3P聲明。P3P聲明是什麼意思呢?其實就是指在某一個HTTP的response的頭部插入一個P3P的頭,而在同一個response中的cookie就都被此P3P聲明了。這個可以通過httpwatch來查看到。

IE瀏覽器看到這個response中包含有P3P的頭,默認就將後面的cookie(cookie1,cookie2等第三方cookie)全部認為可信,後續的request中就會帶下這些cookie一起下發請求。但是如果後續的某一個response中沒有P3P頭部,而同樣設置了cookie1,那麼在此response後續的request中就不會帶有這個cookie1了。所以如果需要使得每次request都帶有這些cookie,有兩種方法:一是在一個response里插入P3P的同時插入所有相關的cookie,而後續的response中不要在插入這些cookie;而是在每個response中都是插入P3P頭。一般情況下使用第二種比較保險。

P3P就介紹到這裡,更多請參考[url]http://www.w3.org/P3P/[/url]