flash安全策略的理解
一直以來對flash的安全策略是一頭霧水,什么安全沙箱,跨域策略文件一堆東西亂七八糟,搞不清楚。不過糾結到現在已經基本上理解了。
flash的安全問題在官方手冊上有足夠的解釋,這里我就不去去搬條文了,主要寫些自己的理解。
其實完全不需要去死啃手冊,我們只需要用常識就可以理解flash的安全策略。
所謂安全其實就是私人財產的保護問題,我們自己的財產不能隨便被別人侵占或者利用。別人的財產也不能被我們自己隨便的侵占和利用。
那么為了達到保護私人財產的目的,首先我們要把界限劃出來,也就是說什么是你的財產,什么是我的財產,這個要講清楚,否則其他都是白扯。
flash 的安全沙箱這一手段就是用來達到這個目的的。一個安全沙箱就劃定了一份私人財產。安全沙箱之間的財產是不能隨便(即無條件的)相互流通的。但安全沙箱之內的財產則可以(無條件,其實也不完全是無條件,一個例外是不同as版本的跨腳本訪問問題,其他例外暫時不知道)相互訪問。
當然上面說的只是概念,或者說只是一個虛無的法律,具體到實際則需要一個執法者,而這個執法者就是flashplayer(一定要與swf這個概念區分開)。而那些swf,圖片,文本等資源,則是我們的財產。fp加載這些財產時根據這些財產的來源在邏輯上將他們劃分到不同的安全域。
上面的文字已經將flash的安全策略問題解釋了大概。接下來的問題是不同沙箱之間的財產可以流通的具體的條件,這個也是復雜的地方所在。
具體的條件依賴于兩個方面:1、訪問者與被訪問者之間的關系;2、財產的具體類型。
為了解釋第一個方面,我們建立一個模型。一個最簡單但卻能完全解釋問題的模型如下:模型中有三個安全沙箱,其中一個是本地沙箱,另外兩個是不同的網絡沙箱。如圖:
在這個模型中共有三種訪問關系
1、本地訪問遠程
2、遠程訪問本地
3、遠程互訪
其中只有第二種訪問是被完全禁止的,即遠程沙箱中的資源無法訪問本地。
而其他兩種情況則要視具體情況而定,具體地:
首先要看加載的東西是內容還是數據(內容和數據這兩個概念的解釋官方文檔上有),如果是內容則fp不需要被加載方授權,如果是數據則需要被加載方授權。
然后看加載方式否是本地,如果是本地則fp需要主動加載方進行授權,如果是遠程之間加載則fp不需要主加載方授權。這是解釋得通的。因為如果swf資源在本地,那么它可能擁有(如果我們把他發布成只訪問本地的話)本地所有資源的訪問權限,這等于是給不法分子開了一個入口,但不要緊,只要我們沒有把這個swf設為信任的,那么他就逃不掉,也就是說資源有進口無出口。
當然我們也可以選擇將swf加入本地的另一種安全域,即發布成只訪問網絡的,但這是堵住了他的入口,開放了他的出口。依然是安全的。
當然我們也可以手動的將swf加入信任讓他進出口都開放,或者用應用程序來講swf加入信任。具體的可以看官方文檔上的說明。
最后如果資源都處于網絡沙箱中,則fp不需要主加載方授權,因為相對于本地,網絡沙箱中的資源都是他人的財產,沒有必要去關心他人的事情。