spring security-почему бы не использовать параметр' spring-security-redirect ' в формах входа для перенаправления на определенную страницу


По умолчанию, когда пользователь отправляет форму входа и проходит аутентификацию, он перенаправляется на последний URL-адрес, к которому он хотел получить доступ, прежде чем выйти из системы (извлеченный из кэша запросов ) или на корневой URL-адрес. Кроме того, если параметр 'spring-security-redirect' найден в запросе на отправку формы, мы перенаправляемся на значение этого параметра.

Я хотел бы использовать эту функцию, но в этой нити, Люк Тейлор упомянул, что это будет риск для безопасности, и мы должны используйте дополнительное поле формы для этой цели, а затем настройте наш LoginSuccessHandler для извлечения и использования этого поля формы по своему усмотрению.

Я не в состоянии понять риск безопасности, о котором он упомянул, и причину, по которой мы не должны использовать функцию, которую Spring Security уже предоставил, вместо того, чтобы использовать нашу собственную пользовательскую логику. Мои причины, по которым я хочу использовать функциональность, такие же, как и у OP в вышеупомянутом потоке.
1 4

1 ответ:

Атака позади-это своего рода подделка межсайтового запроса (CSRF-атака)

Если злоумышленник (а) отправит измененную ссылку какому-либо лицу (Б) и Б коротко взглянет на эту ссылку и увидит, что это ваше приложение, он может щелкнуть по этой ссылке.

Человек Б вводит свои учетные данные и получает доступ.

Но теперь перенаправление выполняется с учетными данными этого человека B!

Итак, представьте, что у вас есть приложение, в котором каждый пользователь может потратить немного денег на вызов http://yourApp/spendSomeMoney=100 -- (Первая ошибка в этом приложении будет заключаться в том, что это GET, а не POST )

Теперь представьте себе (а) отправить (б) эту ссылку: http://yourApp/login.jsp?spring-security-redirect=http: / / yourApp/spendSomeMoney=100

Вы видите проблему.

В общем, я бы настоятельно рекомендовал использовать какой-нибудь CSRF защитный фильтр, независимо от того, используете ли вы этот редирект или нет.