1. В первый раз, когда запрос приходит (в фильтр входа в систему) имеет значение null, создайте сеанс, добавьте токен (случайное число) в этот новый сеанс с помощью setAttribute() и перенаправьте на экран login.jsp с помощью dispatcher.forward.
2. на экране login.jsp используйте getAttribute(), сохраните токен в скрытом поле.
3. при отправке файла login.jsp первый запрос поступает в входной фильтр, здесь сравнивается токен из запроса с токеном в сеансе, если совпадения, то приступайте к выполнению класса действия. в противном случае сгенерируйте новый токен для того же сеанса и перенаправьте на login.jsp с помощью sendRedirect()
когда я запустил инструмент безопасности в этом приложении, я получаю сообщение «Отсутствует параметр одноразового токена».
Пожалуйста, помогите мне.
1.filter.java
Код: Выделить всё
if (session == null) {
chain.doFilter(request, response);
return;
}
else {
// validate the CSRF
String sToken = httprequest.getSession().getAttribute("CSRF_TOKEN")
.toString();
String pToken = httprequest.getParameter("CSRF_TOKEN");
System.out.println("Tokens - " + sToken + pToken);
if (sToken.equals(pToken)) {
chain.doFilter(request, response);
}
else {
CommonUtils.updateSessionToken(session);
/*
* RequestDispatcher rd =
* request.getRequestDispatcher("/login.jsp");
* rd.forward(request, response);
*/
httpresponse.sendRedirect("/login.jsp");
}
}
2.login.jsp
Код: Выделить всё
CSRFGuard Test Application
Welcome to the OWASP CSRFGuard Test Application! Where would you like
to go?
3.web.xml
Код: Выделить всё
CSRF
Hell0oServelt
HelloServelt
com.HelloServlet
HelloServelt
/helloServlet
login.jsp
com.CsrfGuardHttpSessionListener
LoggedInFilter
com.LoggedInFilter
LoggedInFilter
/*
Код: Выделить всё
public class CsrfGuardHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
System.out.println("New session id - "+session.getId());
String tokenId = generateRandomId();
session.setAttribute("CSRF_TOKEN", tokenId);
System.out.println("newtoken -"+tokenId);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
/** nothing to do **/
}
}
Код: Выделить всё
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Welcome ...!");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
}
Подробнее здесь: https://stackoverflow.com/questions/230 ... tion-issue
Мобильная версия