Java SecurityManager防止..目录使用

时间:2014-06-23 23:56:25

标签: java spring tomcat securitymanager

我想禁止使用包含" .."的任何文件路径的spring webapp(在tomcat中运行)。在他们中间。

显然,首先要做的是在用户信息在文件路径中使用之前进行消毒。但是,应用程序中有数百个位置可以进行文件访问,手动验证所有这些位置是否正确实现都需要花费很多精力。

我想做一些事情,比如添加或修改Java SecurityManager,以防止文件名出现" .."在他们中间。

我的第一次尝试是创建自己的SecurityManager并覆盖checkRead和checkWrite等方法,但事实证明这还不够。方法的默认实现似乎不允许任何事情,所以我怀疑从头开始创建它并不是它应该完成的方式。

我认为另一种可能性是使用aspectj,但如果我能使SecurityManager工作看起来更好。

那么,我能做的最简单的事情就是禁止" ..."在所有文件名?是否有任何我可以安装和使用的SecurityManager实现,这些实现旨在使webapps更安全?

1 个答案:

答案 0 :(得分:0)

使用..表示使用某个父目录。您可以使用SecurityManager检查文件是否仅在允许的目录中允许时才允许:

@Override
public void checkPermission(Permission perm) {
    if( perm instanceof FilePermission ) {
        Path path = Paths.get(perm.getName()).normalize().toAbsolutePath();
        //TODO: check that path is in one of allowed directories
        if( !path.toString().startsWith( myAllowedRootDir ) ) 
            throw new SecurityException("Not allowed");
     }
}