我正在按照本教程学习基于
spring framework 3.2.4的应用程序
http://springdiaries.blogspot.be/2012/12/web-security-preventing-csrf-attack.html#comment-form
关键是我已经检查了会话中的所有对象,并且我没有找到任何具有密钥OWASP_CSRFTOKEN的对象,那是不好的吗?
最佳答案 这不完全是你的问题的答案,遗憾的是,如果没有一个神奇的水晶球,那么回答太模糊了^^,但这里有一些你应该尝试的事情:
>检查您的请求不是来自匹配其中一个的URL
中未定义的模式
Owasp.CsrfGuard.properties配置文件(这些值是
从OWASP docs;你应该设置不同的):
.
org.owasp.csrfguard.unprotected.Tag=/Owasp.CsrfGuard.Test/tag.jsp
org.owasp.csrfguard.unprotected.JavaScriptServlet=/Owasp.CsrfGuard.Test/JavaScriptServlet
org.owasp.csrfguard.unprotected.Html=*.html
org.owasp.csrfguard.unprotected.Public=/MySite/Public/*
>检查Web服务器/ servlet容器日志中的错误,包括启动/应用程序加载和收到客户端请求.
>设置断点here和here并启动应用程序
调试模式,以确保您的类正在加载和令牌
被要求.
>逐个查看所有配置参数.
>仔细阅读the project wiki和文档:
> Configuration
> Installation
> User Manual
无论如何,您不必修改数据库架构.这不是OWASP CRSF防护的工作原理(生成的令牌存储在会话中,而不是保存在数据库中).
值得一提的是,您正在关注过时的博客文章:如果您使用的是Spring,则根本不需要使用OWASP CSRF防护.您应该使用具有built in CSRF protection的spring-security身份验证,这更容易设置.
查看教程on this page,了解如何使用CSRF保护设置基于SQL表单的基于SQL数据库的身份验证(另外,不要错过bcrypt密码哈希值;它很容易设置,在某些时候你会很高兴你存储安全哈希而不是明文密码).
您将看到您也不必修改数据库以使用spring-security添加CSRF保护,因为CSRF保护令牌是会话存储的.
设置需要5-15分钟;春季neophite 30分钟的顶部.简而言之,框架负责生成和验证令牌,并在无效请求上返回验证错误.
你只需要包含< csrf /> spring-security.xml配置文件中的标记< http>标签.
如果您使用基于html表单的身份验证,则还必须在表单中包含以下隐藏输入:
<input type="hidden" name="${_csrf.parameterName}"
value="${_csrf.token}" />