魔王Flash Cookie Stuffing方法

用flash 來做Flash Cookie Stuffing 他是本地共享對象并不是基于瀏覽器的,所以一但插入,就永久存在。而且還具有可操作性、比普通HTTPCookies有著更大存儲空間、更好的隱蔽性等優點。加上現在FlashPlayer已經成為互聯網用戶標配之一,不存在兼容性的問題。一般情況下,flash cookie保存在系統的如下位置,你可以去看看有沒有被別人Flash Cookie Stuffing:

C:\Documents and Settingsyourusername\Application Data\MacromediaFlash Player\SharedObjects

下面是一個Flash Cookie Stuffing 的程序編寫。首先是基礎建設,在Flash端,我們使用的是ActionScript3來編程,下面實現了一個基本的Flash Cookies存儲的類,在接下來的過程當中,我們將通過這個類來實現對Flash Cookies的操作。當然,這里只是把流程以及關鍵的技術講清楚,涉及到具體的操作,則需要您自己來實現。

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
/**
Flash Cookie Stuffing
 **/package laohan.flashcookie { //注:由于我沒有裝Flex,所以只好使用Flash CS3來嵌入。 //如果使用Flash Developer,則MovieClip這個包可以不包含。 import flash.display.MovieClip; import flash.net.SharedObject; import flash.external.ExternalInterface; public class myFlashCookie extends MovieClip {//如果使用Flex,可以不繼承這個類。 private var cookieTimeOut:uint; private var cookieName:String; private var cookieSharedObj:SharedObject; private var currentCookie:Object; private var cookieValue:String; //構造函數。 public function myFlashCookie(cName:String = "hunsimowang", timeOut:uint=3600) { cookieName = cName; cookieTimeOut = timeOut; cookieSharedObj = SharedObject.getLocal(cName, "/" ); if(isCookieExist(cName)){//如果FlashCookies存在。 currentCookie = getCookies(cName); //調用JavaScript里的jsSetCookies方法來設置HTTPCookie ExternalInterface.call("jsSetCookies",{fcookie:currentCookie}); //trace(currentCookie); } } //到期刪除Cookies public function clearTimeOut():void { var obj:* = cookieSharedObj.data.cookie; if(obj == undefined){ return; } for(var key in obj){ if(obj[key] == undefined || obj[key].time == undefined || isTimeOut(obj[key].time)){ delete obj[key]; } } cookieSharedObj.data.cookie = obj; cookieSharedObj.flush(); } //添加Cookies( key-value ) public function saveCookies(key:String, value:*):void { var today :D ate = new Date(); key = "key_"+key; value.time = today.getTime(); if(cookieSharedObj.data.cookie == undefined){ var obj:Object = {}; obj[key] = value; cookieSharedObj.data.cookie = obj; }else{ cookieSharedObj.data.cookie[key] = value; } cookieSharedObj.flush(); } //刪除當前Cookies public function removeCookies(key:String):void { if (isCookieExist(key)) { delete cookieSharedObj.data.cookie["key_" + key]; cookieSharedObj.flush(); } } //通過Key來獲取Cookies值。 public function getCookies(key:String):Object{ return isCookieExist(key)?cookieSharedObj.data.cookie["key_"+key]:null; } //檢查Cookies是否存在。 public function isCookieExist(key:String):Boolean{ key = "key_" + key; return cookieSharedObj.data.cookie != undefined && cookieSharedObj.data.cookie[key] != undefined; } //檢查Cookies的到期時間 private function isTimeOut(time:uint):Boolean { var today :D ate = new Date(); return time + cookieTimeOut * 1000 < today.getTime(); } //取得Cookies的到期時間; public function getTimeOut():uint { return cookieTimeOut; } //取得Cookies名稱。 public function getName():String { return cookieName; } //清除所有的Cookies值。 public function clearCookies():void { cookieSharedObj.clear(); } }}

將所有的模塊編譯成SWF文件,我們將其命名為:hsmw.swf,在上面的代碼中,我們首先在構造函數里檢查了Flash Cookie是否存在,如果存在,則會調用一個叫jsSetCookies的JavaScript方法來設置HTTP Cookie。那么,我們接下來要使用JavaScript來實現此SWF的調用以及互動。

JavaScript的實現:
1)首先要預定義一個供ActionScript3調用的方法,即上面說過的jsSetCookies方法。

1234567
//先定義一個全局變量var flashCookiesValue = Null;var jsSetCookies = function(flahCookieValue){ var o = arguments[0]; flashCookiesValue = o.fcookie;//在SWF執行時傳遞過來的值。 document.cookie="hunsimowang="+flashCookiesValue+";path=/;expires=Fri, 04-Dec-2005 08:44:07 GMT;domain=26836659.blogcn.com";};

2)檢查特定的HTTPCookies是否存在,如果不存在,則在頁面上生成Object Dom節點,把hsmw.swf加載進來。此時SWF會去檢查Flash Cookies是否存在,如果存在,則去取得Flash Cookies,并且通過調用jsSetCookies來設置HTTP Cookies:

  1. if(document.cookie.indexOf(“hunsimowang=”)<0){
  2. ? ? //先去load hsnw.swf,即在頁面上生成Object對象:
  3. ? ? var?jsLoadFlash = function(){
  4. ? ? ? ? var?myFlashURL = “hsmw.swf”;
  5. ? ? ? ? var?myFlashObj = document.createElement(“object”);
  6. ? ? ? ? myFlashObj.setAttribute(“id”,”myFlash”);
  7. ? ? ? ? myFlashObj.setAttribute(“classid”,”clsid?:D?27CDB6E-AE6D-11cf-96B8-444553540000″);
  8. ? ? ? ? myFlashObj.setAttribute(“width”,0);
  9. ? ? ? ? myFlashObj.setAttribute(“height”,0);
  10. ? ? ? ? var?flahParamObj = document.createElement(“param”);
  11. ? ? ? ? flahParamObj.setAttribute(“name”,”movie”);
  12. ? ? ? ? flahParamObj.setAttribute(“value”,myFlashURL);
  13. ? ? ? ? var?subMyFlashObj = document.createElement(“object”);
  14. ? ? ? ? subMyFlashObj.setAttribute(“type”,”application/x-shockwave-flash”);
  15. ? ? ? ? subMyFlashObj.setAttribute(“data”,myFlashURL);
  16. ? ? ? ? subMyFlashObj.setAttribute(“width”,0);
  17. ? ? ? ? subMyFlashObj.setAttribute(“height”,0);
  18. ? ? ? ? myFlashObj.appendChild(flahParamObj);
  19. ? ? ? ? myFlashObj.appendChild(subMyFlashObj);
  20. ? ? ? ? var?myDHTMLBody = document.body;
  21. ? ? ? ? if(myDHTMLBody){
  22. ? ? ? ? ? ? myDHTMLBody.appendChild(myFlashObj);
  23. ? ? ? ? }
  24. ? ? };
  25. ? ? jsLoadFlash();
  26. }

倘若Flash Cookies里也沒有存儲我們想要的數據呢?那么,此時就必須通過JS去請求特定的URL,然后使用JavaScript去調用AS3的方法來設置Flash Cookies吧。

那么到這里,基本上就實現了使用Flash Cookies來永久保存客戶端數據的全過程。

版權聲明:admin 發表于 2020-06-09 19:28:23。
轉載請注明:魔王Flash Cookie Stuffing方法 | 贏在起跑線

暫無評論

暫無評論...