Pay for Hesitation: Security Sandbox

Pages

2010年8月12日 星期四

Security Sandbox

  1. Four Types: remote, local-with-filesystem, local-with-networking, and local-trusted
  2. 一個swf的sandbox type是會變動的。首先Flash Player會先檢查該swf是從remote端或local端被存取。
  3. 若該swf是從remote端(相對存取它的swf而言),該swf的sandbox就會被assigned to remote(Developer無權變更)。反之,該swf在local端被載入存取,那它的sandbox就有可能被assigned to 另外三種之一。
  4. 當B是在local端,那他的sandbox就由它被編譯時的compiler setting, configuration files, installers, or instructions所決定。(換句話說,Developer可決定swf在local端被載入存取時的Sandbox)
  5. 下列幾種Operation必須考慮到Security Sandbox: 1. Loading Content, 2. Accessing Content as Data, 3. Cross Scripting, 4. Loading Data
  6. 假設A.swf operate B.swf。必須同時考慮A和B的Sandbox,以及operation type是上面哪一種。所以可能有4 * 4 * 4個組合。(不過其實有幾個組合是不可能發生的) 這些組合請參考p.419 ~ p.421
  7. local-with-filesystem, 顧名思義就是被拿掉網路存取權限,所以若A.swf是local-with-filesystem sandbox, 它通常同樣僅能存取local-with-filesystem sandbox的swf。以防A將其讀取到的local resource藉由跳板B上傳到網路上。
  8. local-with-networking,正好相反,它擁有網路存取權限,但沒有存取local端的權限,所以若A.swf是local-with-networking, 它同樣也僅能存取local-with-networking sandbox的swf。以防A藉由B先讀取local resource,再自己上傳至網路上。
  9. local-with-trusted,可以指定某些目錄下的swf可以合法載入自己。參p.428。
  10. Flex Builder會讓Project目錄下的output folder自動擁有local-with-trusted sandbox type,所以在output folder中剛被編譯好的swf,可以無限制的存取其它swf (有光環)。
  11. 但當該swf被搬出output folder而移到桌面上或其它目錄, 它的sandbox type 就可能會是local-with-filesystem或local-with-networking (由developer透過compiler setting指令 "-use-network"設置。)
  12. Default Local Security-Sandbox-Type: 上述的compiler setting 在不同環境下的default value亦不同。Flex Builder的compiler的default value是-use-network=true。而Flash Authoring Tool下的default value是在Republish Setting>Flash tab>Local playback security挑選,其預設值是"Access local files only"。
  13. 換句話說,當Flex Builder編譯的swf被搬到output folder之外的路徑時,若沒有額外設置"-use-network"compiler setting,它就是local-with-network sandbox type。而Flash Authoring Tool編譯出來的swf,預設是local-with-filesystem sandbox type。
  14. 原先A.swf (compiled by FlexBuilder)可以存取B.swf(compiled by Flash Authoring Tool),是因為output folder的光環籠罩A.swf。一旦output folder整個目錄複製到桌面上,A.swf失去光環,其預設為local-with-network sandbox type, 而B.swf其預設是local-with-filesystem sandbox type。所以A.swf便不能存取B.swf。
  15. 若要讓A.swf仍然可以在本地端存取B.swf,就必須將A.swf改成local-with-filesystem或將B.swf改成local-with-networking。

沒有留言: