background: Я закодировал класс ActionSupport struts2 с ModelDriven. Это приложение hibernate/spring web, использующее OSIV и прикрепленные объекты в представлении (JSP).Интерфейс ModelDriven представляет собой взлом безопасности в struts2?
сегодня я получил это письмо от архитектора «карающего» меня для сдачи объекта , который имел ссылку на вложенное лицо на Struts2 valuestack через интерфейс ModelDriven<E>
. Он прав или что? Очевидно, это серьезная вещь, которую я делаю, но я не следую тому, что он говорит, и я действительно не хочу принимать его предложение и навещать его за своим столом после этого. О, парень. Время менять карьеру.
--- от архитектора ---
Билли, как мы ранее обсуждали, вы все еще те же ошибки в коде снова и снова. Это уже четвертый раз, когда вы сделали эту ошибку, и я заинтересован о качестве вашей работы. Одно дело сделать это один или даже два раза, но после четвертого времени, мне интересно, не можете ли вы понять то, что я говорю. Следующее изложит это для вас. Если вы не получите его после прочтения этого письма, зайдите на мой стол, и мы его рассмотрим. Это должно немедленно прекратиться, и я хочу, чтобы весь код обновлялся до конца дня, исправляя эту ошибку. Если какой-либо код, например , истекает в производство, у нас будет серьезная проблема безопасности на наших руках. Также обратите внимание, что я копирую Дэйва на это, чтобы можно было выдать надлежащий выговор. Я также порекомендую Дейву, чтобы вы перешли от разработчика уровня III к уровню II. Прочтите следующее и, пожалуйста, изучите его и переформатируйте весь свой код, как я указал.
О связывании объектов:
Когда класс действия Struts2 помечаются с интерфейсом ModelDriven, модель будет привязана к элементам формы на странице HTML. Например, если HTML форма имеет поле под названием имя_пользователя и класс действия определяется как:
общественный класс UserAction расширяет ActionSupport реализует ModelDriven
И UserModel является POJO следующим образом:
public class UserModel {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
Когда форма отправлена, пока Action содержит экземпляр UserModel, struts2 свяжет имя пользователя user_name с UserModel.userName, автоматически заполняя это значение.
У этой простоты высокая цена для вредоносных пользователей. Если объект объявлен как ModelDriven, конечный пользователь, просматривающий пользователя, имеет доступ к графику моделей через устройства настройки моделей. Возьмите этот случай, например:
общественный класс UserAction расширяет ActionSupport реализует ModelDriven
и ...
public class UserModel {
private String userName;
private UserEntity userEntity;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
pubic UserEntity getUserEntity() {
return userEntity;
}
}
и ...
@Entity
public class UserEntity {
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
предполагая шаблон OSIV используется , и прикрепляется объект UserEntity.
Хитрый пользователь с небольшим количеством передних знаний или времени на его руках может:
/myform?userName=billy&userEntity.password=newpassword
предполагая Entity сохраняется в конце сессии, приведенные выше результаты в изменении пароля Билли.
Дело в том, что график объекта доступен!
При использовании ModelDriven, и с использованием альтернативы является ужасным подход, вы должны определить мелкозернистых модели, которые размещаются на valuestack, а затем скопировать из модели целевого объекта перед отправкой ответа и позволяя сделки совершать.