您好,登錄后才能下訂單哦!
小編給大家分享一下FlexSocket安全沙箱沖突怎么處理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
FlexSocket安全沙箱沖突及解決方案
這是FP被廣為唾罵的特性之一,其設(shè)計(jì)糟糕至極。Adobe貌似認(rèn)為9秒時(shí)間對(duì)用戶(hù)來(lái)說(shuō)很短。
1,糟糕的設(shè)計(jì)可能使用戶(hù)浪費(fèi)9秒時(shí)間
FlexSocket連接SocketServer時(shí),javaSocket、c++Socket,抑或其它,首先會(huì)開(kāi)一個(gè)Socket連接主機(jī)的843端口請(qǐng)求安全策略文件,這個(gè)時(shí)間為3秒;如果此步未能成功,則看開(kāi)發(fā)者是否顯式調(diào)用了Security.loadPolicyFileAPI,如下
Security.loadPolicyFile("xmlsocket://127.0.0.1:1843");
如有,則再次嘗試從這個(gè)端口加載策略數(shù)據(jù),又是3秒。如果此步又未能OK,則嘗試從開(kāi)發(fā)者定義的FlexSocket主機(jī)端口再次加載安全策略,此時(shí)會(huì)發(fā)送這樣一個(gè)請(qǐng)求:
<policy-file-request/>
如果SocketServer沒(méi)有處理這個(gè)請(qǐng)求,客戶(hù)端將無(wú)法進(jìn)一步完成FlexSocket連接。這個(gè)過(guò)程又是3秒。如果軟件設(shè)計(jì)不當(dāng),客戶(hù)端將浪費(fèi)9秒的時(shí)間才能知道它有沒(méi)有獲得Server的連接許可,這張門(mén)票有點(diǎn)貴了。FP如能成功加載到安全策略數(shù)據(jù),會(huì)把所用socket拋棄(即使從主機(jī)端口請(qǐng)求亦是如此),然后執(zhí)行開(kāi)發(fā)者的socket連接邏輯。
2,合理的方案,用java實(shí)現(xiàn)
在SocketServer端單開(kāi)一個(gè)843端口,用于專(zhuān)門(mén)向客戶(hù)端提供安全策略文件,java示例代碼如下:
packagesban.socketServer; importjava.io.BufferedInputStream; importjava.io.BufferedReader; importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.InputStreamReader; importjava.io.PrintWriter; importjava.net.InetSocketAddress; importjava.net.ServerSocket; importjava.net.Socket; importjava.net.SocketAddress; importjava.net.URL; /** *sbanpolicyserverforflex/flashsocket * *@authorsban<http://sban.biz/> * */ publicclassSbanSocketPolicyServer{ publicSbanSocketPolicyServer(){ } publicstaticStringreadFileAsString(Stringurl) throwsjava.io.IOException{ byte[]buffer=newbyte[(int)newFile(url).length()]; BufferedInputStreamf=newBufferedInputStream( newFileInputStream(url)); f.read(buffer); f.close(); returnnewString(buffer); } publicstaticvoidmain(String[]args)throwsIOException{ ServerSocketserver=newServerSocket(); SocketAddressendpoint=newInetSocketAddress("127.0.0.1",843); server.bind(endpoint); Stringpath=SbanSocketPolicyServer.class.getResource("../../crossdomain.xml").getPath(); System.out.println(path); Stringpolicy=readFileAsString(path); while(true){ System.out.println("waitforclient..."); Socketsocket=server.accept(); BufferedReaderin=newBufferedReader(newInputStreamReader( socket.getInputStream())); PrintWriterout=newPrintWriter(socket.getOutputStream()); Strings=in.readLine(); System.out.println(s); if(s.indexOf("policy-file-request")>-1){ out.print(policy+'\0'); out.flush(); in.close(); out.close(); System.out.println("sendedpolicycontext."); socket.close(); } } } }
而crossdomain.xml文件的示例代碼為:
<cross-domain-policy> <site-controlpermitted-cross-domain-policiessite-controlpermitted-cross-domain-policies="all"/> <allow-access-fromdomainallow-access-fromdomain="*"to-ports="*"/> </cross-domain-policy>
將crossdomain.xml文件與執(zhí)行文件放置一起
3,你可以借用的jar執(zhí)行文件
sban把上述java導(dǎo)出為jar可執(zhí)行文件:
SbanSocketPolicyServer.zip5.8KB
在Windows下,確定已安裝java環(huán)境,并已設(shè)定環(huán)境變量,在命令行窗口中執(zhí)行如下命令:
java-jarSbanSocketPolicyServer.jar
說(shuō)明:該java程序未經(jīng)優(yōu)化,僅作為教程示例,不建議在商業(yè)項(xiàng)目中使用。
以上是“FlexSocket安全沙箱沖突怎么處理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。