Безопасность и GET-параметр или параметр страницы в Seam/JSF

Параметр страницы (в Seam) или параметр GET (общий) часто упоминаются как подходящее средство для передачи информации из одного представления в другое. Но очевидно, что не рекомендуется помещать в URL конфиденциальные данные, например, //myserver/show.jsf?userId=12, поскольку эти параметры легко манипулировать и просматривать данные, на которые не разрешено смотреть.

До сих пор я использовал то, что показывают примеры и литературу (до сих пор это было не важно):

<s:link..>
<f:param value="#{user.id}" name="userId" /> 
</s:link>

в JSF-файле и в соответствующем целевом page.xml

<param name="userId" value="#{userHome.userId}" />   

Я заинтересован в двух вещах (все еще новичок в Seam):

1) Какие разные возможные стратегии защиты недопустимого доступа, например, к различным учетным записям пользователей, вы используете, если хотите придерживаться параметра страницы? Я уверен, что некоторые из вас уже столкнулись с этой проблемой. И каковы плюсы и минусы этих стратегий.

2) Я хочу использовать объекты Seam EntityHome здесь и там в проекте, так как это удобная обработка сущностей и вид структуры DAO - но как эффективно работать с HomeObjects, если не используется параметр страницы?

Буду признателен за некоторые мысли и опыт от вас, ребята. Большое спасибо.

мистифицировать

1 ответ

Параметры GET не являются небезопасными, все службы REST полагаются на данные, помещаемые в URL. Параметры (GET или POST) небезопасны, если ваша страница сведений о пользователе, в вашем примере, не проверяет, есть ли у вас доступ к учетной записи пользователя "12". Кроме того, не думайте, что параметрами POST сложнее манипулировать, чем параметрами GET.

Итак, ваш код должен проверить, имеете ли вы право просматривать конфиденциальные данные. Для обработки несанкционированного доступа, вы можете просто бросить org.jboss.seam.security.AuthorizationException в setUserId() метод, если пользователь устанавливает идентификатор, на который у него нет прав. Запуск этого исключения заставляет Seam следовать механизму обработки исключений, описанному в pages.xml (по умолчанию он перенаправляет на /error.xhtml страница с сообщением об ошибке).

@In Identity identity;  // The standard Seam Identity component
@In Long sessionUserId; // You should outject this during user login

public void setUserId(Long userId) {
  // Grant access is user is an admin or his id is the same as the one
  // he is trying to set. Otherwise, exception.
  if (!identity.hasRole('admin') && !sessionUserId.equals(userId)) {
    throw new AuthorizationException("Not authorized");
  }
  this.userId = userId;
}
Другие вопросы по тегам