Я создал простой проект на основе распорок. Попытка внедрить в него 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
http: // localhost: 8080/App1/Login.do - это URL-адрес по умолчанию. Когда я нажимаю логин, он обнаруживает http: // localhost: 8080/App1/Login.do? CsrfToken = GQQD-MEJT – Sri
, смогли ли вы решить эту проблему? – Neeraj
No Neeraj. Нужно попробовать следующее решение. – Sri