Ответ 1
Методы токенов Struts 1 работают подобно перехватчику токенов Struts 2 в том, что он добавит токен на ваш сеанс и проверит его при отправке формы, но это гораздо более ручной процесс. Основной рабочий процесс:
- Пользователь получает форму через действие Struts (не непосредственно в JSP). Действие Struts вызывается
saveToken(request)
перед пересылкой на JSP, который содержит форму. - Форма на JSP должна использовать тег
<html:form>
. - Ваше действие, которое отправляет форма, сначала вызовет
isTokenValid(request, true)
, и вы должны перенаправить на первое действие с сообщением об ошибке, если оно вернетfalse
. Это также сбрасывает токен для следующего запроса.
Выполнение этого не только предотвратит дублирование форм, но любой script должен будет нажать первое действие Struts и получить сеанс, прежде чем он сможет отправить на второе действие Struts, чтобы отправить форму. Поскольку сайт не может установить сеанс для другого сайта, это должно предотвратить CSRF.
Если вы обычно отправляете пользователей прямо на свой JSP, не делайте этого. Вместо этого создайте новый класс, наследующий от ActionForward
, и установите его как метод execute()
:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}