我想禁止使用包含" .."的任何文件路径的spring webapp(在tomcat中运行)。在他们中间。
显然,首先要做的是在用户信息在文件路径中使用之前进行消毒。但是,应用程序中有数百个位置可以进行文件访问,手动验证所有这些位置是否正确实现都需要花费很多精力。
我想做一些事情,比如添加或修改Java SecurityManager,以防止文件名出现" .."在他们中间。
我的第一次尝试是创建自己的SecurityManager并覆盖checkRead和checkWrite等方法,但事实证明这还不够。方法的默认实现似乎不允许任何事情,所以我怀疑从头开始创建它并不是它应该完成的方式。
我认为另一种可能性是使用aspectj,但如果我能使SecurityManager工作看起来更好。
那么,我能做的最简单的事情就是禁止" ..."在所有文件名?是否有任何我可以安装和使用的SecurityManager实现,这些实现旨在使webapps更安全?
答案 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");
}
}