2015-02-17 2 views
0

Я разрабатываю приложение JavaEE с использованием контейнера EJB и EJB.JavaEE - ввод кода RMI

Пусть у меня есть класс Student:

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); 
} 
} 

против

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

У меня нет хорошего ответа на этот вопрос, но я подозреваю, что во всех случаях небезопасно иметь ненадежный клиент RMI, особенно если вы включите удаленную загрузку классов из них. – eckes

+0

@eckes Спасибо за ваше время! –

ответ

0

Это не простой вопрос. С одной стороны, вы достаточно обеспокоены введением кода на стороне сервера. С другой стороны, насколько мне известно, в технологии RMI клиентский объект будет сериализовать только данные класса без методов на стороне клиента и восстановить (десериализован) на стороне сервера с серверной версией класса, а затем оба варианта безопасны против инъекции метода на сервере боковая сторона.

0

Я не понимаю две части вопросов.

  1. Вопрос о методах защиты внутри объектов. Обычно все, что связано с безопасностью, не должно беспокоить объект, не имеющий отношения к домену безопасности. С того момента, когда объект-ученик должен иметь дело с тем, как его резюме является безопасным или небезопасным в определенных обстоятельствах.

  2. RMI сериализует и десериализует объект. Обычно это означает, что вы не передаете какой-либо байт-код и не загружаете какой-либо класс вообще. То, что вы имеете в виду, это файлы классов загрузки по запросу с сервера классов (файлов). Насколько мне известно, вы контролируете эти серверы. Вы можете запретить клиентам отправлять вам неподписанные классы. Так что это не имеет никакого отношения.

В заключение я хотел бы сказать:

  • Сначала получите все аспекты безопасности из объектов предметной области (если они не принадлежат к этому домену). Создайте себе для этого класс утилиты/API.
  • Вторые проверки элементов управления сервером класса и их внедрение/настройка в системе RMI (http://docs.oracle.com/javase/tutorial/rmi/index.html). Они находятся под вашим контролем. Было бы большой проблемой, если бы какой-либо клиент мог отправлять ваши файлы классов серверов, и ваш сервер должен был их принять. Поэтому есть простые решения.
Смежные вопросы