Проблема с генерацией токена CSRFJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с генерацией токена CSRF

Сообщение Anonymous »

Чтобы предотвратить CSRF, я выполнил следующие шаги:

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
/*



4.CsrfGuardHttpSessionListener


Код: Выделить всё

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  **/
}

}
5.HelloServlet


Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»