日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

IE userdata

發布時間:2025/5/22 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IE userdata 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Internet Explorer 5中,Microsoft提供了名為userData的客戶端持久存儲功能。它是通過對CSS行為進行特殊擴展來實現的。這些擴展完全都是非標準的,是 90年代后期瀏覽器大戰遺留下來的產物。由于它概念模糊、使用困難,并且只能用于Internet Explorer,所以很少有Web開發人員會使用這種存儲方式,大多數的開發人員甚至完全不知道存在這種技術。

IE的userData能 夠存儲完整的XML文檔,并且會將復雜的數據類型轉換為XML存儲起來。通過這種方 式,數據會被插入到XML數據島(另一項只有IE中才存在的功能)中。然后整個XML數據島再被存入userData中。不過,像 Dojo.Storage這樣的存儲框架屏蔽了userData中的這些XML功能,通常只將名/值對以字符串的形式暴露出去。

在某些情況 下,userData可以比其他存儲方式存儲更多的數據。Internet Explorer中不僅對每頁數據的大小作出了限制,同時也對整個域的大小進行了限制。如果試圖存儲的數據容量超過了允許的大小,就會導致 JavaScript拋出一個異常。表8-2顯示了Internet Explorer不同安全域中userData的存儲能力。

表8-2? Internet Explorer不同安全區域中的userData存儲能力

安 全 區 域

頁大小限制

域大小限制

Intranet

512KB

10MB

本機、可信任區域及Internet

128KB

1MB

受限制區域

64KB

640KB

表 中兩個關系最緊密的域就是Internet和 Intranet。對于互聯網上的普通網站來說,IE本身允許的存儲容量要大于Flash的LSO,但是小于Mozilla的DOM存儲。而對于 Intranet中的應用程序來說,userData的存儲能力遠遠超過其他存儲方式,10MB的存儲容量可以存儲下整個數據表、樹型結構及其他體積更大 的數據結構。開發人員必須記住,userData是一種持久化存儲方式,而不是駐留在內存中,因此關閉瀏覽器并不會刪除這些數據。當使用userData 存儲體積較大的數據結構時,開發人員需要格外小心。因為這些數據結構中可能會存有身份認證這樣的敏感數據,如果被持久保存在客戶端很可能被攻擊者所利用。

由于名/值對是作為XML節點的屬性存儲在userData的XML文檔中,因此Internet Explorer可以自動將某些特殊字符轉義為XML中的對應字符。例如,雙引號(”)會被替換為",而連字符(&)會被替換 為&。由于這些自動轉義的字符會增加實際存儲的數據大小,因此開發人員必須確保有足夠的空間來存儲轉義后的數據。

使用 userData將會使數據共享受到極大的限制。不同域、甚至同一域下的不同子域之間都不能共享數據。此 外,同一主機不同端口上的應用程序之間也無法共享數據。我們只能在同域同目錄下的不同頁面之間共享數據。例如,http://company.com /Storage/ Checkout.html可以訪問http://company.com/Storage/ UserData.html,以及任何/Storage/目錄下網頁所存儲的數據。如果試圖從其他頁面訪問,僅會返回一個null。這些默認的限制是無法 改變的,并且幾乎與cookie的默認規則恰恰相反。這也使得userData成為了Internet Explore 5中少數幾個較為安全的功能之一。

我們無法通過編程手段來刪除掉存儲在userData中的所有數據,只能對使用.userData樣式的 HTML元素調用其removeAttribute()方法,來刪除相應的名/值對。但是,我們無法遍歷刪除userData中實際存儲的名/值對。雖然 開發人員應該知道存儲在客戶端的所有名/值對,但是,我們畢竟都是人,總會忘記一些事情,并且由于我們無法像為DOM存儲編寫一個clear()方法那 樣,所以那些應該被刪除的數據很可能被遺留在userData中。幸好,userData元素的expires屬性可以提供一些幫助,開發人員可以通過它 來設置自動刪除數據的過期時間。在默認情況下,存儲在userData中的所有數據永遠都不會過期。Interner Explorer不僅無法提供網站使用userData存儲數據的時間,也沒有提供任何關于userData的可視化界面,即使刪除瀏覽器中的 cookie、緩存、歷史記錄和離線內容,也無法刪除userDat中存儲的數據。這些因素都增加了竊取客戶端機器中數據的可能性。一旦確保不再需要使用 應用程序中的某些數據,開發人員就應該立即將它們刪除掉。

要查看userData中存儲的數據不是不可行,但需要一些技巧。首先,在 Windows Explorer(隨便打開一個Windows文件窗口)的文件夾選項中切換到“查看”選項卡,勾選“顯示所有文件和文件夾”復選框,并取消選擇“隱藏受 保護的操作系統文件(推薦)”選項。然后我們打開userData目錄,在Windows XP系統中即為C:\Documents and Settings\USER_NAME\UserData。雖然userData都存儲在XML文件中,但是Internet Exploerer使用緩存的存儲機制來存儲這些XML。例如,用一個名為index.dat的索引文件來存儲所有的元數據(Metadata),然后將 其中的元素(即不同域用來存儲userData的XML)分別存儲在5個隨機生成的目錄下。我們可以通過查看index.dat索引文件,以及目錄中的所 有XML文件,來確定具體使用的userData存儲系統。

不過,要想修改userData中存儲的內容卻是非常復雜的,因為我們無法直 接修改緩存目錄中的XML文件。 如果真這么做,那么JavaScript在加載修改后的數據時,會拋出一個數據格式錯誤的異常。這意味著在index.dat文件中保存了某些哈希散列 值,或者XML文件的長度。不幸的是,index.dat不是一種開放的文件格式。在互聯網上,只有很少一些網站詳細描述了該文件結構的內部結構。我們 (本書作者)經過一晚上大量的嘗試和失敗,終于發現XML文件的長度的確存儲在index.dat文件中。注意,index.dat里 的+0x20偏移量就用來保存文件的長度,當前值為136字節,也正是我們用來存儲持久化userData的XML文件的長度。

于是,現在攻擊者可以任意修改userData中存儲的持久化數據,只要最后更新index.dat文件中的 XML文件長度即可。

我們再一次重申,任何形式的客戶端存儲都可以被用戶查看并修改。開發人員永遠都不能相信任何來自客戶端的數據。

總結

l???? userData提供了持久化存儲功能。如果要模擬非持久化存儲,開發人員可以使用瀏覽器的unload()方法來清除userData數據。

l?????可以指定userData是否自動過期。在默認情況下,userData中的數據永遠不會過期。

l???? 只有滿足以下3個條件,頁面之間才能共享userData數據:同一端口、同一服務器、同一目錄下。必須遵守該規定,并且域和域之間也無法共享數據。

l????userData可以存儲XML或者字符串數據。開發人員必須將復雜的數據類型進行序列化,轉化為這兩種格式,并實現相應的反序列化功能。

l????通過文本編輯器就可以查看userData中的數據,而修改其中的數據需要十六進制編輯器。

?

程序代碼封裝:

/** @class 定義userdata的操作 */
var UserData = {
?// 定義userdata對象
?o : null,
?// 設置文件過期時間 單位:天
?defExps : 365,
?// 初始化userdate對象
?init : function(){
??if(!UserData.o){
???try{
????UserData.o = document.createElement('input');
????UserData.o.type = "hidden";
????//UserData.o.style.behavior = "url('#default#userData')" ;
????UserData.o.addBehavior ("#default#userData");
????document.body.appendChild(UserData.o);
???}catch(e){
????return false;
???}
??};
??return true;
?},
?// 保存文件到userdata文件夾中 f-文件名,c-文件內容,e-過期時間
?save : function(f, c, e){
??try{
???if(UserData.init()){
????var o = UserData.o;
????// 保持對象的一致
????o.load(f);
????// 將傳入的內容當作屬性存儲
????if(c) o.setAttribute("code", c);
????// 設置文件過期時間
????var d = new Date(), e = (arguments.length == 3) ? e : UserData.defExps;
????d.setDate(d.getDate()+e);
????o.expires = d.toUTCString();
????// 存儲為制定的文件名
????o.save(f);
???}
??}catch (ex){}
?},
?// 從uerdata文件夾中讀取指定文件,并以字符串形式返回。f-文件名
?load : function(f){
??if(UserData.init()){
???try{
????var o = UserData.o;
????// 讀取文件
????o.load(f);
????// 返回文件內容
????return o.getAttribute("code");
???}catch (ex){
????return null;
???}
??}
?},
?// 檢查userdata文件是否存在 f-文件名
?exist : function(f){
??return UserData.load(f) != null;
?},
?// 刪除userdata文件夾中的指定文件 f-文件名
?remove : function(f){
??UserData.save(f, false, -UserData.defExps);
?}
?// UserData函數定義結束
};

//調用方式

UserData.save(fileName,"存儲內容");

var "存儲內容"=UserData.load(fileName);

轉載于:https://www.cnblogs.com/tiwlin/archive/2012/05/10/2494125.html

總結

以上是生活随笔為你收集整理的IE userdata的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。