我想要做的是通过不仅检查哪个类调用特定方法,还检查该类的哪个实例来实现一些基本安全性。
我试过
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
但显然只给我一个班级名称。允许/要求呼叫者发送自身或个人ID的问题是所有呼叫者都需要访问所有其他呼叫者的详细信息。有人可以帮忙吗?
编辑:更多信息:
所以我们有一个与多个代理连接的服务器。代理发送包含其CLAIM所具有的名称的信息包。有一个特殊的代理人决定人们是否应该在每个特定情况下对此撒谎。
代理与服务器上的Agent类实例建立连接,但某些代理也可能会本机运行。我对这种方法感兴趣的原因是我稍后需要这种技术(提取调用给定方法的特定实例)
我希望这更好,并且抱歉没有提供足够的信息:/
答案 0 :(得分:4)
这整个攻击线都无法保证任何安全。如果用户可以控制运行的代码,他们可以运行codegen库并编辑代码。如果用户无法控制代码,那么这一切都是不必要的。
如果您无法抗拒这种冲动,一种方法是将所有内容包装在Proxies中,以传达您需要的信息。
通过代理,我的意思是java.lang.reflect.Proxy
。也就是说,将这些对象中的每一个包装在代理中。代理人的工作是将this
存储在您自己的堆栈中,以便被访问者查询。
这实质上是AOP(面向方面编程)的重新发明,所以你可能想要了解它。看看Spring框架。
答案 1 :(得分:1)
你没有得到这样的保障。
我认为对于这些问题,只需检查所有有用的代码都来自签名的jar。
答案 2 :(得分:0)
查找Capability-based security。您应该为每个客户端提供单独的功能对象(实际上是具有不同权限的代理对象),而不是知道哪个客户端正在做什么。