Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Java 小程序写入临时文件必须授予哪些权限?_Java_Security_File_Permissions_Applet - Fatal编程技术网

Java 小程序写入临时文件必须授予哪些权限?

Java 小程序写入临时文件必须授予哪些权限?,java,security,file,permissions,applet,Java,Security,File,Permissions,Applet,我们正在开发一个小程序,需要它能够读取/写入用户临时文件目录中的文件(例如C:\Documents and Settings\USERNAME\Local Settings\Temp) 小程序已签名,用户在小程序启动时单击“允许”选项,Java控制面板已启用“允许用户向签名内容授予权限”和“允许用户向不受信任的机构授予内容权限” 但是,在启动时,我们会得到一个SecurityException: java.lang.SecurityException: Unable to create temp

我们正在开发一个小程序,需要它能够读取/写入用户临时文件目录中的文件(例如C:\Documents and Settings\USERNAME\Local Settings\Temp)

小程序已签名,用户在小程序启动时单击“允许”选项,Java控制面板已启用“允许用户向签名内容授予权限”和“允许用户向不受信任的机构授予内容权限”

但是,在启动时,我们会得到一个SecurityException:

java.lang.SecurityException: Unable to create temporary file
at java.io.File.checkAndCreate(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at com.jniwrapper.util.AppletHelper.b(SourceFile:104)
at com.jniwrapper.util.AppletHelper.a(SourceFile:79)
at com.jniwrapper.util.AppletHelper.b(SourceFile:50)
at com.jniwrapper.util.AppletHelper.init(SourceFile:122)
at com.x.Y.init(Y.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception: java.lang.SecurityException: Unable to create temporary file

如果我们编辑java.policy文件以将所有内容都授予所有内容,则小程序工作正常,但这显然是不安全的。我们必须授予哪些最低权限才能允许小程序读取/写入/创建用户临时文件目录中的文件?

使用策略文件可以进行测试,但您不应该依赖它来完成代码,尤其是在授予文件权限时,这是危险的

要与文件交互,您需要执行以下操作

  • 签署你的jar-tons教程,就像,你可以做一个自我签署的

  • 将文件创建代码添加到特权块,下面是一个示例

    File myFile = (File) AccessController.doPrivileged(new PrivilegedAction() {
    public Object run() 
    {
        return new File("C:\\MyFolder\\MyFile");
    }
    
    });
    

  • 到了同一点。要授予尽可能接近所需的权限,您可以在
    ${java.io.tmpdir}-
    上通过操作
    读、写、删除
    授予
    文件权限
    。这对我有用

    当然,您必须用系统属性
    java.io.tmpdir
    的值替换
    ${…}
    java.io.File.createTempFile
    使用此属性

    注意:使用
    someDir\-
    可以对
    someDir
    路径的所有子目录进行递归访问。此时,您可以使用
    someDir\*
    ,但我还没有测试它


    如果使用策略文件授予权限,则这些文件很可能已经支持引用系统属性。但谷歌再次证实了这一点。如果使用自定义策略实现,则可以轻松创建权限
    java.io.FilePermission

    您知道此权限的策略文件条目吗?我有我不能更改的代码,我需要应用这个策略。应该是这样的,授予{permission java.io.FilePermission”/directory,“read,write”};如果你不想留下这个巨大的漏洞,因为它是一个巨大的安全漏洞,你应该在jar上签名,然后执行一个授权原则,或者至少授权代码库。