Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 安全性:限制插件对文件系统和网络的访问_Actionscript 3 - Fatal编程技术网

Actionscript 3 安全性:限制插件对文件系统和网络的访问

Actionscript 3 安全性:限制插件对文件系统和网络的访问,actionscript-3,Actionscript 3,在插件上下文(由另一个swf加载的swf)中,是否有任何方法将对文件系统和网络的访问同时限制到加载的swf 编译器选项“-use network=true | false”不适用,因为您不能同时限制文件/网络 代码示例: 空中应用程序: 加载的swf: 加载的swf位于用户的文档文件夹“outside Air app”文件夹中。目前,加载的swf缩写为加载“c:/Windows/regedit.exe”,我不想要它(也不在网络上发送信息)。除非您部署为AIR应用程序 但是,即使使用-use ne

在插件上下文(由另一个swf加载的swf)中,是否有任何方法将对文件系统网络的访问同时限制到加载的swf

编译器选项“-use network=true | false”不适用,因为您不能同时限制文件/网络

代码示例:

空中应用程序:

加载的swf:


加载的swf位于用户的文档文件夹“outside Air app”文件夹中。目前,加载的swf缩写为加载“c:/Windows/regedit.exe”,我不想要它(也不在网络上发送信息)。

除非您部署为AIR应用程序

但是,即使使用
-use network=true
进行部署,也可以将一些数据存储在中。这应该适用于存储游戏状态等

编辑


在空中,来自不同域的内容之间的安全性通过使用来调节。这应该给你所有你需要的杠杆作用

除非部署为AIR应用程序,否则不会

但是,即使使用
-use network=true
进行部署,也可以将一些数据存储在中。这应该适用于存储游戏状态等

编辑


在空中,来自不同域的内容之间的安全性通过使用来调节。这应该给你所有你需要的杠杆作用

我在空气中找到了一种解决方案,我不喜欢,但它很有效。其想法是拥有一个小型http服务器,并从该服务器加载内容

我使用以下内容加载目标文件:

新的URL请求(“http://localhost:1111/Content.swf")

通过这样做,flash将“Content.swf”作为远程文件加载,并将其放置在远程安全沙箱中。加载的swf将无法访问任何本地文件,也无法访问网络

如果有人有一个更干净的解决方案来获得这个远程安全沙盒,我会很高兴

/**
 * HTTP server original idea :
 * http://coenraets.org/blog/2009/12/air-2-0-web-server-using-the-new-server-socket-api/
 */
package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.events.ServerSocketConnectEvent;
    import flash.net.ServerSocket;
    import flash.net.Socket;
    import flash.utils.ByteArray;

    public class TestContentSecurity extends Sprite
    {
        private var l :Loader = new Loader;
        private var serverSocket:ServerSocket;

        public function TestContentSecurity()
        {
            init();
            l.load(new URLRequest("http://localhost:1111/Content.swf"));
        }


        private function init():void
        {
            // Initialize the web server directory (in applicationStorageDirectory) with sample files
            listen(1111);
        }

        private function listen(port : uint):void
        {
            try
            {
                serverSocket = new ServerSocket();
                serverSocket.addEventListener(Event.CONNECT, socketConnectHandler);
                serverSocket.bind(port, "127.0.0.1");
                serverSocket.listen();
                trace("Listening on port " + port + "...\n");
            }
            catch (error:Error)
            {
                trace("Port " + port +
                    " may be in use. Enter another port number and try again.\n(" +
                    error.message +")", "Error");
            }
        }

        private function socketConnectHandler(event:ServerSocketConnectEvent):void
        {
            var socket:Socket = event.socket;
            socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        }

        private function socketDataHandler(event:ProgressEvent):void
        {
            try
            {
                var socket:Socket = event.target as Socket;
                var bytes:ByteArray = new ByteArray();
                socket.readBytes(bytes);
                var request:String = "" + bytes;

                var filePath:String = request.substring(5, request.indexOf("HTTP/") - 1);
                var file:File = File.applicationDirectory.resolvePath(filePath);
                if (file.exists && !file.isDirectory)
                {
                    var stream:FileStream = new FileStream();
                    stream.open( file, FileMode.READ );
                    var content:ByteArray = new ByteArray();
                    stream.readBytes(content);
                    stream.close();
                    socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                    socket.writeUTFBytes("Content-Type: application/x-shockwave-flash\n\n");
                    socket.writeBytes(content);
                }
                else
                {
                    socket.writeUTFBytes("HTTP/1.1 404 Not Found\n");
                    socket.writeUTFBytes("Content-Type: text/html\n\n");
                    socket.writeUTFBytes("<html><body><h2>Page Not Found</h2></body></html>");
                }
                socket.flush();
                socket.close();
            }
            catch (error:Error)
            {
                trace("Error");
            }
        }
    }
}
/**
*HTTP服务器的原始想法:
* http://coenraets.org/blog/2009/12/air-2-0-web-server-using-the-new-server-socket-api/
*/
包裹
{
导入flash.display.Loader;
导入flash.display.Sprite;
导入flash.filesystem.File;
导入flash.filesystem.FileMode;
导入flash.filesystem.FileStream;
导入flash.net.URLRequest;
导入flash.events.Event;
导入flash.events.ProgressEvent;
导入flash.events.ServerSocketConnectEvent;
导入flash.net.ServerSocket;
导入flash.net.Socket;
导入flash.utils.ByteArray;
公共类TestContentSecurity扩展了Sprite
{
私有变量l:装入器=新装入器;
私有var-serverSocket:serverSocket;
公共函数TestContentSecurity()
{
init();
l、 加载(新URL请求(“http://localhost:1111/Content.swf"));
}
私有函数init():void
{
//使用示例文件初始化web服务器目录(在ApplicationStorage目录中)
倾听(1111);
}
专用函数侦听(端口:uint):无效
{
尝试
{
serverSocket=新的serverSocket();
serverSocket.addEventListener(Event.CONNECT,socketConnectHandler);
绑定(端口,“127.0.0.1”);
serverSocket.listen();
跟踪(“侦听端口“+端口+”…\n”);
}
捕获(错误:错误)
{
跟踪(“端口”+端口+
“可能正在使用中。请输入另一个端口号,然后重试。\n(”+
error.message+”,“error”);
}
}
专用函数socketConnectHandler(事件:ServerSocketConnectEvent):无效
{
var socket:socket=event.socket;
socket.addEventListener(ProgressEvent.socket_数据,socketDataHandler);
}
私有函数socketDataHandler(事件:ProgressEvent):void
{
尝试
{
var socket:socket=event.target作为套接字;
变量字节:ByteArray=newbytearray();
socket.readBytes(字节);
var请求:String=”“+字节;
var filePath:String=request.substring(5,request.indexOf(“HTTP/”)-1);
var file:file=file.applicationDirectory.resolvePath(filePath);
if(file.exists&&!file.isDirectory)
{
var-stream:FileStream=new FileStream();
打开(文件,FileMode.READ);
变量内容:ByteArray=新的ByteArray();
stream.readBytes(内容);
stream.close();
socket.writeUTFBytes(“HTTP/1.1200正常\n”);
socket.writeUTFBytes(“内容类型:application/x-shockwave-flash\n\n”);
socket.writeBytes(内容);
}
其他的
{
socket.writeUTFBytes(“未找到HTTP/1.1 404\n”);
socket.writeUTFBytes(“内容类型:text/html\n\n”);
socket.writeUTFBytes(“未找到页面”);
}
socket.flush();
socket.close();
}
捕获(错误:错误)
{
跟踪(“错误”);
}
}
}
}

我在空气中找到了一种解决方案,我不喜欢它,但它很有效。其想法是拥有一个小型http服务器,并从该服务器加载内容

我使用以下内容加载目标文件:

新的URL请求(“http://localhost:1111/Content.swf")

通过这样做,flash将“Content.swf”作为远程文件加载,并将其放置在远程安全沙箱中。加载的swf将无法访问任何本地文件,也无法访问网络

如果有人有一个更干净的解决方案来获得这个远程安全沙盒,我会很高兴

/**
 * HTTP server original idea :
 * http://coenraets.org/blog/2009/12/air-2-0-web-server-using-the-new-server-socket-api/
 */
package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.events.ServerSocketConnectEvent;
    import flash.net.ServerSocket;
    import flash.net.Socket;
    import flash.utils.ByteArray;

    public class TestContentSecurity extends Sprite
    {
        private var l :Loader = new Loader;
        private var serverSocket:ServerSocket;

        public function TestContentSecurity()
        {
            init();
            l.load(new URLRequest("http://localhost:1111/Content.swf"));
        }


        private function init():void
        {
            // Initialize the web server directory (in applicationStorageDirectory) with sample files
            listen(1111);
        }

        private function listen(port : uint):void
        {
            try
            {
                serverSocket = new ServerSocket();
                serverSocket.addEventListener(Event.CONNECT, socketConnectHandler);
                serverSocket.bind(port, "127.0.0.1");
                serverSocket.listen();
                trace("Listening on port " + port + "...\n");
            }
            catch (error:Error)
            {
                trace("Port " + port +
                    " may be in use. Enter another port number and try again.\n(" +
                    error.message +")", "Error");
            }
        }

        private function socketConnectHandler(event:ServerSocketConnectEvent):void
        {
            var socket:Socket = event.socket;
            socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        }

        private function socketDataHandler(event:ProgressEvent):void
        {
            try
            {
                var socket:Socket = event.target as Socket;
                var bytes:ByteArray = new ByteArray();
                socket.readBytes(bytes);
                var request:String = "" + bytes;

                var filePath:String = request.substring(5, request.indexOf("HTTP/") - 1);
                var file:File = File.applicationDirectory.resolvePath(filePath);
                if (file.exists && !file.isDirectory)
                {
                    var stream:FileStream = new FileStream();
                    stream.open( file, FileMode.READ );
                    var content:ByteArray = new ByteArray();
                    stream.readBytes(content);
                    stream.close();
                    socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                    socket.writeUTFBytes("Content-Type: application/x-shockwave-flash\n\n");
                    socket.writeBytes(content);
                }
                else
                {
                    socket.writeUTFBytes("HTTP/1.1 404 Not Found\n");
                    socket.writeUTFBytes("Content-Type: text/html\n\n");
                    socket.writeUTFBytes("<html><body><h2>Page Not Found</h2></body></html>");
                }
                socket.flush();
                socket.close();
            }
            catch (error:Error)
            {
                trace("Error");
            }
        }
    }
}
/**
*HTTP服务器的原始想法:
* http://coenraets.org/blog/2009/12/air-2-0-web-server-using-the-new-server-socket-api/
*/
派克靴
/**
 * HTTP server original idea :
 * http://coenraets.org/blog/2009/12/air-2-0-web-server-using-the-new-server-socket-api/
 */
package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.events.ServerSocketConnectEvent;
    import flash.net.ServerSocket;
    import flash.net.Socket;
    import flash.utils.ByteArray;

    public class TestContentSecurity extends Sprite
    {
        private var l :Loader = new Loader;
        private var serverSocket:ServerSocket;

        public function TestContentSecurity()
        {
            init();
            l.load(new URLRequest("http://localhost:1111/Content.swf"));
        }


        private function init():void
        {
            // Initialize the web server directory (in applicationStorageDirectory) with sample files
            listen(1111);
        }

        private function listen(port : uint):void
        {
            try
            {
                serverSocket = new ServerSocket();
                serverSocket.addEventListener(Event.CONNECT, socketConnectHandler);
                serverSocket.bind(port, "127.0.0.1");
                serverSocket.listen();
                trace("Listening on port " + port + "...\n");
            }
            catch (error:Error)
            {
                trace("Port " + port +
                    " may be in use. Enter another port number and try again.\n(" +
                    error.message +")", "Error");
            }
        }

        private function socketConnectHandler(event:ServerSocketConnectEvent):void
        {
            var socket:Socket = event.socket;
            socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        }

        private function socketDataHandler(event:ProgressEvent):void
        {
            try
            {
                var socket:Socket = event.target as Socket;
                var bytes:ByteArray = new ByteArray();
                socket.readBytes(bytes);
                var request:String = "" + bytes;

                var filePath:String = request.substring(5, request.indexOf("HTTP/") - 1);
                var file:File = File.applicationDirectory.resolvePath(filePath);
                if (file.exists && !file.isDirectory)
                {
                    var stream:FileStream = new FileStream();
                    stream.open( file, FileMode.READ );
                    var content:ByteArray = new ByteArray();
                    stream.readBytes(content);
                    stream.close();
                    socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                    socket.writeUTFBytes("Content-Type: application/x-shockwave-flash\n\n");
                    socket.writeBytes(content);
                }
                else
                {
                    socket.writeUTFBytes("HTTP/1.1 404 Not Found\n");
                    socket.writeUTFBytes("Content-Type: text/html\n\n");
                    socket.writeUTFBytes("<html><body><h2>Page Not Found</h2></body></html>");
                }
                socket.flush();
                socket.close();
            }
            catch (error:Error)
            {
                trace("Error");
            }
        }
    }
}