Hap*_*eer 6 java aop spring aspectj
我想拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数,并阻止任何文件名包含".."(以防止路径遍历攻击)或"\ 0"(以防止文件名空字符攻击).
我有另一个关于如何使用SecurityManager做同样事情的开放性问题,但还没有人回答它,所以我希望这种替代方法能够起作用.
这是tomcat上的spring webapp.
我知道我可以通过创建自己的SafeFile,SafeFileReader等类并修改代码来手动执行此操作.但是,我们的代码中有960个地方使用这些对象的构造函数,所以我宁愿避免这种情况,除非这是唯一的方法.
尽管 Sotirios Delimanolis 链接到这里的答案是正确的(我自己写的),因为 AspectJ 而不是基于代理的 Spring AOP 是必要的,但请注意,您不能用于execution(*.new(..))JDK 类,因为默认情况下这些类被排除在方面编织之外。为了编织到 JDK 类中(执行连接点逻辑上位于被调用者代码中),您需要修改 JDK 的 rt.jar 或至少将修改后的 JDK 类放在 JDK 本身之前的 bootclasspath 上。这是可能的,但并非那么微不足道。
但有一个更简单的选择:通过编织到调用者(您自己的代码)中,而不是被调用者中- 请注意和call(*.new(..))之间的区别。这反过来意味着您无法拦截对不是由您自己编写的代码或 JDK 本身发出的 JDK 类的调用。因此,如果您需要 100% 的解决方案,即使代码不在您自己的控制之下,您最终也会编织 JDK。如果您只想保护自己的课程,则可能没有必要。:-)call()execution()
尽管我是 AspectJ 的忠实粉丝,但我想强调的是,我也是干净代码和重构的坚定支持者。任何像 IntelliJ IDEA 或 Eclipse 这样的像样的 IDE 都应该使重构 960 调用变得非常简单,以使用您建议的安全包装类。如果这件事如此重要,你为什么不这样做呢?IDEA 的结构搜索和替换可以在几分钟(甚至几秒)内为您完成此操作。AOP 可以但不应该用来修补您自己代码的缺陷。所以请去重构,之后你会更快乐。
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |