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
/*
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 **/
}
}
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);
}
}
Mobile version