Пользователь-наблюдатель, который вошел в систему, может просматривать своих подчиненных в таблице html. У каждого элемента есть ссылка, и супервизор может просмотреть выбранный подчиненный подробно, как персональная информация и т. Д. Когда супервизор нажимает на ссылку, он будет перенаправлен на /view/123
, где 123 является идентификатором выбранного подчиненного. Контроллер будет обрабатывать запрос GET '/view/{id}'
.Весенняя безопасность запрещает пользователю манипулировать URL-адресом
Проблема заключается в том, что руководитель может угадывать любые числа после /view/
. Возможные решения:
- Изменить его на POST, который более безопасен, однако клиент все еще может создать фиктивный почтовый запрос, который все еще небезопасен.
- Добавить маркер в URL
'/view/123?token=54gX23r'
для дополнительной проверки, например, супервизор изменил его на'/view/456?token=54gX23r'
. Идентификатор и токен не совпадают, и запрос будет отклонен сервером.
Я думаю, что решение нет. 2 разрешит проблему, но я не уверен, имеет ли пружина встроенный механизм, похожий на него, как токен CSRF.
Используйте '@ PreAuthorize' и chec k, если зарегистрированному пользователю разрешен доступ к указанному usr. –
@ M.Deinum спасибо, я проверю его, но у вас есть связанные статьи, которые точно соответствуют моей проблеме? – fuzzy28
Это справочное руководство по безопасности весны. http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#access-control-using-preauthorize-and-postauthorize. Однако это использует весенний контроль ACL. Вы можете сделать простую проверку, если запрашиваемый пользователь имеет текущего пользователя в качестве менеджера. что-то вроде '# user.manager == authentication.name' или что-то в этом роде. –