2013-05-31 61 views
0

我想從MJPG獲取URLStream,但我在發佈版本中收到錯誤#2048:安全沙箱違例錯誤。Flex URLStream安全沙箱違例

我想要做的事:

Security.allowDomain("*"); 
Security.allowInsecureDomain("*"); 

var stream:URLStream = new URLStream(); 
//receiving this error event in onStreamSecurityError handler: 
//Error #2048: Security sandbox violation: {swf} cannot load data from {url} 
stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onStreamSecurityError); 
//load method have no loader context option 
stream.load(new URLRequest("http://anydomain.com/mjpg/video.mjpg")); 

設置的crossdomain.xml不是解決導致應用程序應該能夠從任何遠程服務器加載流。

正如我記得使用flash.display.Loader類,我設置了LoaderContext和應用程序域。之後,Flex應用程序可以從任何域加載資源。但我不知道如何處理URLStream。

您是否有任何解決方案或錯誤#2048的解決方法?

+2

我認爲這是crossdomain文件的全部要點 - 你不能從任何服務器加載。 – ethrbunny

+0

謝謝,但爲什麼我可以使用Loader或$ .ajax從任何服務器加載?可能會禁用安全性?如果服務器管理員不想共享每個人的資源,他可以設置身份驗證。 – 2xMax

+2

您要求的內容可以改爲「如何使用Flash Player進行跨站點腳本攻擊」:http://en.wikipedia.org/wiki/XXS,答案是Flash做的一切都是權力爲了防止這一點。如果您想從基於瀏覽器的Flash應用程序中的任何服務器加載數據,則必須創建您有權訪問的各種代理。 – JeffryHouser

回答

5

這是不可能的。您無法遠程授予對另一個域的訪問權限,因爲它不是您授予的權限。該allowDomain()功能沒有做到這一點,但它確實它周圍的其他方法:

允許所包含allowDomain()調用的SWF文件中標識的域中訪問對象和變量的SWF文件。

如果您的SWF是在域a.com,你要添加的行Security.allowDomain("b.com")在裏面,比允許訪問域b.com的SWF到您的SWF。它不會授予您訪問域名b.com的權限。

可以在the documentation of allowDomain()

AJAX找到更多這方面的詳細信息,不會讓你做,要麼,或更好的說,瀏覽器不會放過你的。他們都在玩相同的規則。

爲了克服這個問題,您必須通過坐在與SWF相同的域上的服務器端腳本代理請求。它可以在PHP中使用curl,或者任何你更容易找到的東西。 This video解釋如何和爲什麼。

+0

> AJAX不會讓你這樣做,或者更好地說,瀏覽器不會讓你。他們都在玩相同的規則。誰阻止我撥打$ .ajax('http://extdomain.com')? – 2xMax

+0

在大多數情況下,瀏覽器不會允許它。沒有人會阻止你這樣做,但瀏覽器只是拒絕這樣做。嘗試一下。 – evilpenguin