【问题标题】:Java SecurityManager to prevent .. directory usageJava SecurityManager 防止 .. 目录使用
【发布时间】:2014-06-23 23:56:25
【问题描述】:

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

显然,首先要做的是在用户信息在文件路径中使用之前进行清理。但是,应用程序中有数百个地方进行文件访问,手动验证所有地方是否都正确实现需要花费大量精力。

我只想做一些事情,比如添加或修改 Java SecurityManager 以防止文件名中包含“..”。

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

我认为另一种可能性是使用 aspectj,但如果我能让 SecurityManager 工作,这似乎是一个更好的主意。

那么,我能做的最简单的事情是在所有文件名中禁止“..”吗?是否有任何我可以安装和使用的 SecurityManager 实现来提高 web 应用程序的安全性?

【问题讨论】:

  • 我认为安全管理器无法做到这一点。它将检查规范化路径上的文件权限。然而这实际上更好,无论有人如何尝试访问文件,只有在正确的位置才会被允许。

标签: java spring tomcat securitymanager


【解决方案1】:

使用.. 意味着它使用了一些父目录。您可以使用 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");
     }
}

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 2017-11-16
    • 2011-01-21
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多