/ / Профілактика підробки між веб-сайтом з використанням токенів stuts - java, struts, крос-домен, struts-1

Запобігання підробці запитів між сайтами з використанням підказки tock - java, struts, cross-domain, struts-1

Я хочу здійснити підробку запиту на різних сторінкахзапобігання моєму веб-застосунку, який базується на структурах 1.x. Я знаю, що структура struts 2 забезпечує перехоплювач токенів для цього, і я можу реалізувати подібну функціональність за допомогою фільтрів.

Я трохи заплутаний у кількох думках 1) як я можу генерувати унікальний маркер прямим способом? (чи можу я використовувати маркер класу Action для цієї мети, яка використовується для уникнення подання дублікатів форми)

Чи є якісь проблеми у використанні механізмів токенів 1.x frame Framework для запобігання CSRF

Відповіді:

17 за відповідь № 1

Методи жетонів дії Struts 1 діють якПерехоплювач токенів Struts 2 тим, що він додасть маркер до вашого сеансу і перевірить його при поданні форми, але це набагато більш ручний процес. Основний робочий процес:

  1. Користувач потрапляє до форми за допомогою дії Struts Action (не безпосередньо до JSP). Дія Struts зателефонує saveToken(request) перед пересиланням на JSP, що містить форму.
  2. Форма на JSP повинна використовувати <html:form> тег
  3. Ваша дія, яку подає форма, спочатку зателефонує 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);
}