2014-08-30 8 views
2

Я создал простой проект на основе распорок. Попытка внедрить в него CSRFGuard.CSRFGuard: требуемый токен отсутствует по запросу

Вот это csrfguard.properties файлы:

org.owasp.csrfguard.Logger=org.owasp.csrfguard.log.JavaLogger 
org.owasp.csrfguard.configuration.provider.factory = org.owasp.csrfguard.config.overlay.ConfigurationAutodetectProviderFactory 
org.owasp.csrfguard.Enabled = true 
org.owasp.csrfguard.ValidateWhenNoSessionExists = false 
org.owasp.csrfguard.NewTokenLandingPage=%servletContext%/Login.do 
org.owasp.csrfguard.TokenPerPage=true 
org.owasp.csrfguard.TokenPerPagePrecreate=false 
org.owasp.csrfguard.Rotate=true 
org.owasp.csrfguard.Ajax=true 
org.owasp.csrfguard.unprotected.Default=%servletContext%/ 
org.owasp.csrfguard.unprotected.JavaScriptServlet=%servletContext%/JavaScriptServlet 
org.owasp.csrfguard.unprotected.Error=%servletContext%/error_page.jsp 
org.owasp.csrfguard.unprotected.Index=%servletContext%/index.jsp 
org.owasp.csrfguard.unprotected.Scripts=%servletContext%/scripts/* 
org.owasp.csrfguard.unprotected.Styles=%servletContext%/styles/* 
org.owasp.csrfguard.unprotected.Images=%servletContext%/images/* 
org.owasp.csrfguard.action.Log=org.owasp.csrfguard.action.Log 
org.owasp.csrfguard.action.Log.Message=potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, method:%request_method%, uri:%request_uri%, error:%exception_message%) 
org.owasp.csrfguard.action.Redirect=org.owasp.csrfguard.action.Redirect 
org.owasp.csrfguard.action.Redirect.Page=%servletContext%/error_page.jsp 
org.owasp.csrfguard.action.Rotate=org.owasp.csrfguard.action.Rotate 
org.owasp.csrfguard.TokenName=csrfToken 
org.owasp.csrfguard.SessionKey=csrfToken 
org.owasp.csrfguard.TokenLength=32 
org.owasp.csrfguard.PRNG=SHA1PRNG 
org.owasp.csrfguard.PRNG.Provider=SUN 
org.owasp.csrfguard.Config.Print = true 
org.owasp.csrfguard.JavascriptServlet.sourceFile = WEB-INF/conf/csrfguard.js 
org.owasp.csrfguard.JavascriptServlet.domainStrict = true 
org.owasp.csrfguard.JavascriptServlet.cacheControl = private, maxage=28800 
org.owasp.csrfguard.JavascriptServlet.refererPattern = .* 
org.owasp.csrfguard.JavascriptServlet.refererMatchDomain = true 
org.owasp.csrfguard.JavascriptServlet.injectIntoForms = true 
org.owasp.csrfguard.JavascriptServlet.injectGetForms = true 
org.owasp.csrfguard.JavascriptServlet.injectFormAttributes = true 
org.owasp.csrfguard.JavascriptServlet.injectIntoAttributes = true 
org.owasp.csrfguard.JavascriptServlet.xRequestedWith = OWASP CSRFGuard Project 
org.owasp.csrfguard.configOverlay.hierarchy = classpath:Owasp.CsrfGuard.properties, classpath:Owasp.CsrfGuard.overlay.properties 
org.owasp.csrfguard.configOverlay.secondsBetweenUpdateChecks = 60 

Здесь вы отрывок из моей web.xml

<context-param> 
     <param-name>Owasp.CsrfGuard.Config</param-name> 
     <param-value>WEB-INF/conf/csrfguard.properties</param-value> 
    </context-param> 
    <context-param> 
     <param-name>Owasp.CsrfGuard.Config.Print</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.owasp.csrfguard.CsrfGuardServletContextListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.owasp.csrfguard.CsrfGuardHttpSessionListener</listener-class> 
    </listener> 
    <filter> 
     <filter-name>CSRFGuard</filter-name> 
     <filter-class>org.owasp.csrfguard.CsrfGuardFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>CSRFGuard</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

При запуске приложения, и дать его адрес, он загружает логин страницы. И это незащищенная страница. После того, как я ударил логин, он обрабатывает запрос. Когда я отлаживаю код, я могу видеть tokenFromPages и tokenFromSession со значениями. Но переменная tokenFromRequest входит как null. И так как это происходит как null, это бросает исключение «требуемый токен из исключения запроса». Файл: CsrfGuard.java Метод: verifyPageToken Состояние где исключение бросают:

if (tokenFromRequest == null) { 
    /** FAIL: token is missing from the request **/ 
    throw new CsrfGuardException("required token is missing from the request"); 
} 

Может кто-нибудь помогите мне, пожалуйста. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Добавление журналов, чтобы показать проблему:

URL: http://localhost:8080/App1/Login.do?csrfToken=GQQD-MEJT 

Я нажал вход на страницу, и ниже бревна сгенерированные. Я не знаю, почему он показывает null для tokenFromRequest.

Aug 29, 2014 8:33:03 PM org.owasp.csrfguard.log.JavaLogger log 
INFO: CsrfGuard analyzing request /App1/Login.do 
tokenFromPages --> N92E-COOR 
tokenFromSession --> KLGU-DDRZ 
tokenFromRequest --> null 
Aug 29, 2014 8:33:03 PM org.owasp.csrfguard.log.JavaLogger log 
WARNING: potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>, ip:127.0.0.1, method:POST, uri:/App1/Login.do, error:required token is missing from the request) 
Aug 29, 2014 8:33:03 PM org.owasp.csrfguard.log.JavaLogger log 
INFO: CsrfGuard analyzing request /App1/error_page.jsp 
Aug 29, 2014 8:33:03 PM org.owasp.csrfguard.log.JavaLogger log 
INFO: CsrfGuard analyzing request /App1/Login.do 
tokenFromPages --> GQQD-MEJT 
tokenFromSession --> CD7O-C556 
tokenFromRequest --> GQQD-MEJT 
+0

http: // localhost: 8080/App1/Login.do - это URL-адрес по умолчанию. Когда я нажимаю логин, он обнаруживает http: // localhost: 8080/App1/Login.do? CsrfToken = GQQD-MEJT – Sri

+0

, смогли ли вы решить эту проблему? – Neeraj

+0

No Neeraj. Нужно попробовать следующее решение. – Sri

ответ

0

Попробуйте оставить свойство NewTokenLandingPage пустым.

Изменить/Комментарий
org.owasp.csrfguard.NewTokenLandingPage =% ServletContext%/Login.do

к

org.owasp.csrfguard.NewTokenLandingPage =

Я хотел бы также предложить делайте это шаг за шагом. Не включайте маркеры страниц и маркеры в первый раз. Вращения и токены страницы могут вызывать множество проблем. Сначала попросите его работать с токеном сеанса, а затем постепенно активировать функции.

+0

Я попробую это и дам вам знать. Спасибо, Сантон. – Sri

+0

@Sri вы нашли решение? Я также получаю сообщение «требуемый токен отсутствует в сообщении запроса». – smoggers

Смежные вопросы