JSP проверяет пользователя с предыдущей страницы

В моем веб-приложении JSP я хочу проверить, что пользователь пришел с определенной моей страницы, http://myapplication.com/foo.jsp, На странице проверки я мог сделать:

String ref = request.getHeader("referer");

Тогда сравните ref в http://myapplication.com/foo.jsp

Тем не менее, эта проверка может быть легко подделана. Какие еще методы используются для проверки того, что клиент приходит с ожидаемого URL?

Я полагаю, что это уже было в SO. Спасибо

PR

2 ответа

Решение

Пусть сервлет предварительной обработки первого JSP сгенерирует уникальный токен.

String token = UUID.randomUUID().toString();

Сохраните это в сессии

session.setAttribute("token", token);

Передайте это как скрытое значение ввода формы

<input type="hidden" name="token" value="${token}" />

или как параметр запроса ссылки, когда вы используете ссылки вместо форм

<a href="second.jsp?token=${token}">link</a>

Позвольте сервлету предварительной обработки второго JSP сравнить его с тем, что в сеансе

String token = (String) session.getAttribute("token");
session.removeAttribute("token");

if (token != null && token.equals(request.getParameter("token"))) {
    // Valid, continue requesst.
} else {
    // Invalid, block request.
}

Это была базовая концепция, предполагающая единый постраничный разговор. Чтобы охватить несколько страниц / вкладок браузера, которые вы хотите использовать Set<String> или, может быть Map<String, Set<String>> вместо этого как токен (с URI в качестве ключей и токенов в качестве значений).

Единственный способ убедиться в этом - сохранить "последнюю посещенную страницу" в сеансе. Таким образом, он не будет передан клиенту или, возможно, подделан заголовком запроса.

Идея состоит в том, что в возвращаемом jsp он обновляет свойство "последняя посещенная страница" в текущем сеансе. Затем при ранней обработке страницы выполняется проверка свойства "последняя посещенная страница".

Конечно, это не работает между веб-серверами, если они не настроены для обмена информацией о сеансе.

Другие вопросы по тегам