我正在使用EJB容器和EJB开发JavaEE应用程序。
假设我有班级学生:
class Student{
private int id;
private String resume;
public void clearXss(){
///some logic to clear resume from js scripts
}
}
我有一个独立的客户端和JavaEE服务器。客户端通过RMI连接到EJB容器。客户端传递Student类的对象。
我的问题:在对象方法上调用clearXss
是否安全,或者必须执行外部方法?我的意思是:
class MyBean{
private void save(Student student){...}
public void saveStudent(Student student){
sudent.clearXss();
save(student);
}
}
VS
class MyBean{
private void save(Student student){...}
private String purifyXss(String string){...}
public void saveStudent(Student student){
student.setResume(purifyXss(student.getResume()))
save(student);
}
}
我担心的是调用从不受信任的客户端获取的对象的安全方法。这就是为什么这是主要的安全问题。
答案 0 :(得分:0)
这不是一个简单的问题。一方面你很担心服务器端的代码注入。另一方面,据我所知,在RMI技术中,客户端对象将仅在客户端无需方法的类数据序列化,并在服务器端使用类的服务器版本进行恢复(反序列化),然后这两种变体都可以安全地防止服务器上的方法注入侧。
答案 1 :(得分:0)
我不理解问题的两个部分。
关于对象内安全方法的问题。通常,与安全性有关的一切都不应该与不涉及安全域的对象有关。从什么时候开始,学生对象应该处理其简历在某些情况下的安全或不安全的方式。
RMI序列化和反序列化对象。通常这意味着不会传输任何类型的字节码,也不会加载任何类。您所指的是来自类(文件)服务器的按需下载类文件。我知道你控制着这些服务器。您可以阻止客户端表单向您发送未签名的类。所以这无关紧要。
作为结论我会说: