Я хочу здійснити підробку запиту на різних сторінкахзапобігання моєму веб-застосунку, який базується на структурах 1.x. Я знаю, що структура struts 2 забезпечує перехоплювач токенів для цього, і я можу реалізувати подібну функціональність за допомогою фільтрів.
Я трохи заплутаний у кількох думках 1) як я можу генерувати унікальний маркер прямим способом? (чи можу я використовувати маркер класу Action для цієї мети, яка використовується для уникнення подання дублікатів форми)
Чи є якісь проблеми у використанні механізмів токенів 1.x frame Framework для запобігання CSRF
Відповіді:
17 за відповідь № 1Методи жетонів дії Struts 1 діють якПерехоплювач токенів Struts 2 тим, що він додасть маркер до вашого сеансу і перевірить його при поданні форми, але це набагато більш ручний процес. Основний робочий процес:
- Користувач потрапляє до форми за допомогою дії Struts Action (не безпосередньо до JSP). Дія Struts зателефонує
saveToken(request)
перед пересиланням на JSP, що містить форму. - Форма на JSP повинна використовувати
<html:form>
тег - Ваша дія, яку подає форма, спочатку зателефонує
isTokenValid(request, true)
, і вам слід повернутись до першої дії із повідомленням про помилку, якщо воно повернетьсяfalse
. Це також скидає маркер для наступного запиту.
Це не дозволить запобігти лише повторенню формиподання, але будь-який сценарій повинен буде натиснути на першу дію Struts і отримати сеанс, перш ніж він може подати до другої дії Struts, щоб надіслати форму. Оскільки сайт не може встановити сеанс для іншого сайту, це повинно запобігти CSRF.
Якщо ви зазвичай надсилаєте користувачів безпосередньо на свій JSP, не «створюйте» новий клас, який успадковується з ActionForward
і встановити це як "s execute()
спосіб:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}