Problem bei der CSRF-Token-GenerierungJava

Java-Forum
Anonymous
 Problem bei der CSRF-Token-Generierung

Post by Anonymous »

Um CSRF zu verhindern, habe ich die folgenden Schritte befolgt:

1. Wenn zum ersten Mal eine Anfrage (an loginfilter) eingeht, ist die Sitzung null. Erstellen Sie eine Sitzung, fügen Sie mithilfe von setAttribute() ein Token (Zufallszahl) zu dieser neuen Sitzung hinzu und leiten Sie mit dispatcher.forward zum Bildschirm login.jsp um.

2. Verwenden Sie im login.jsp-Bildschirm getAttribute(), um das Token in der versteckten Datei zu speichern.

3. Beim Senden von login.jsp kommt die erste Anfrage an loginfilter. Vergleichen Sie hier das Token aus der Anfrage mit dem Token in der Sitzung. Wenn Übereinstimmungen vorliegen, fahren Sie mit der Ausführung der Aktionsklasse fort. Andernfalls generieren Sie das neue Token für dieselbe Sitzung und leiten Sie mit sendRedirect()zu login.jsp weiter.

Als ich das Sicherheitstool für diese Anwendung ausführte, erhalte ich die Meldung „Es fehlt ein einmaliger Token-Parameter“.

Bitte helfen Sie mir.



1.filter.java

Code: Select all

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

Code: Select all





CSRFGuard Test Application


Welcome to the OWASP CSRFGuard Test Application! Where would you like
to go?



  





3.web.xml

Code: Select all


CSRF



Hell0oServelt
HelloServelt
com.HelloServlet


HelloServelt
/helloServlet


login.jsp



com.CsrfGuardHttpSessionListener


LoggedInFilter
com.LoggedInFilter



LoggedInFilter
/*



4.CsrfGuardHttpSessionListener


Code: Select all

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


Code: Select all

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);
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post