diff -r 2b458ac09044 -r ca3c7dd220fe java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java --- a/java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java Sat Jan 15 14:27:02 2011 +0100 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java Sat Jan 15 18:14:15 2011 +0100 @@ -1,5 +1,6 @@ package cz.frantovo.nekurak.rest; +import cz.frantovo.nekurak.posluchac.OchranaProtiCSRF; import cz.frantovo.nekurak.util.HttpPozadavek; import cz.frantovo.nekurak.web.HledacSluzby; import cz.frantovo.nekurak.xml.HlasXML; @@ -23,7 +24,16 @@ @Consumes(MIME_XML) @Produces(MIME_TEXT) public String hlasuj(HlasXML xml) { + zkontrolujCSRF(pozadavek, xml); hledac.getPodnikEJB().hlasuj(xml.getPodnik(), xml.isKourit(), HttpPozadavek.getIPadresa(pozadavek)); return "ok"; } + + private static void zkontrolujCSRF(HttpServletRequest pozadavek, HlasXML xml) throws RuntimeException { + String csrfTokenOcekavany = (String) pozadavek.getSession().getAttribute(OchranaProtiCSRF.NAZEV_ATRIBUTU); + String csrfTokenObdrzeny = xml.getCsrfToken(); + if (csrfTokenOcekavany == null || !csrfTokenOcekavany.equals(csrfTokenObdrzeny)) { + throw new RuntimeException("CSRF token zaslaný klientem neodpovídá očekávanému."); + } + } }