2016-02-11 2 views
1

Пользователь-наблюдатель, который вошел в систему, может просматривать своих подчиненных в таблице html. У каждого элемента есть ссылка, и супервизор может просмотреть выбранный подчиненный подробно, как персональная информация и т. Д. Когда супервизор нажимает на ссылку, он будет перенаправлен на /view/123, где 123 является идентификатором выбранного подчиненного. Контроллер будет обрабатывать запрос GET '/view/{id}'.Весенняя безопасность запрещает пользователю манипулировать URL-адресом

Проблема заключается в том, что руководитель может угадывать любые числа после /view/. Возможные решения:

  1. Изменить его на POST, который более безопасен, однако клиент все еще может создать фиктивный почтовый запрос, который все еще небезопасен.
  2. Добавить маркер в URL '/view/123?token=54gX23r' для дополнительной проверки, например, супервизор изменил его на '/view/456?token=54gX23r'. Идентификатор и токен не совпадают, и запрос будет отклонен сервером.

Я думаю, что решение нет. 2 разрешит проблему, но я не уверен, имеет ли пружина встроенный механизм, похожий на него, как токен CSRF.

+0

Используйте '@ PreAuthorize' и chec k, если зарегистрированному пользователю разрешен доступ к указанному usr. –

+0

@ M.Deinum спасибо, я проверю его, но у вас есть связанные статьи, которые точно соответствуют моей проблеме? – fuzzy28

+0

Это справочное руководство по безопасности весны. http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#access-control-using-preauthorize-and-postauthorize. Однако это использует весенний контроль ACL. Вы можете сделать простую проверку, если запрашиваемый пользователь имеет текущего пользователя в качестве менеджера. что-то вроде '# user.manager == authentication.name' или что-то в этом роде. –

ответ

0

подписанию стратегического идентификатор будет решением (путем добавления маркеров/подписи), но я предпочел бы предложить, чтобы выполнить проверку того, пользователь может просматривать этот подчиненный

Маркер мог только быть создан, как:

DigestUtils.md5DigestAsHex(("123" + "MY_SECRET").getBytes()) 

при доступе к ресурсу, вы можете просто воссоздать маркер и проверить это то же самое, как послал по запросу

1

Spring Security имеет встроенные лексем решения CSRF. Чтобы применить его, вам необходимо прикрепить тег <csrf/> внутри тега Spring Security , где вы можете установить защищенные URL-адреса и другие материалы, а затем в свою jsp или любую другую форму, включая те теги.

Если вы используете Spring MVC <form:form> тег или Thymeleaf 2.1+ и использованием @EnableWebSecurity, то CsrfToken автоматически включается для вы

Подробнее: https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html

О, <csrf/> тегов применяется по умолчанию, также при использовании Spring Security

+0

Я не ищу решение CSRF. – fuzzy28

Смежные вопросы