Web 安全:防止 CSRF 攻击
Web Security: Preventing CSRF attack
我正在按照本教程学习基于 spring 框架 3.2.4
的应用程序
http://springdiaries.blogspot.be/2012/12/web-security-preventing-csrf-attack.html#comment-form
关键是我已经检查了会话中的所有对象,但我没有找到任何具有密钥 OWASP_CSRFTOKEN 的对象,这就是工作不正常的疑点?
这不完全是你问题的答案,不幸的是,如果没有神奇的 crystal 球 ^^,这个问题太模糊无法回答,但这里有一些你应该尝试的事情:
- 检查您的请求是否来自 URL 匹配的
unprotected
中定义的模式
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 容器日志中的错误,包括启动/应用程序加载和接收客户端请求时的错误。
一一查看所有配置参数。
仔细阅读 the project wiki 和文档:
您无论如何都不必修改数据库架构。这不是 OWASP CRSF 守卫的工作方式(生成的令牌存储在会话中,而不是持久保存在数据库中)。
还值得一提的是,您正在关注一个过时的博客 post:如果您正在使用 Spring,则根本不需要使用 OWASP CSRF 防护。您应该使用具有 built in CSRF protection 的 spring-安全身份验证,这更容易设置。
查看教程 on this page,了解如何设置 HTML 表单 + SQL 基于数据库的身份验证和 CSRF 保护(另外,不要错过 bcrypt 密码哈希算法; 它很容易设置,在某些时候你会很高兴你存储的是安全的散列而不是明文密码)。
你会发现你根本不需要修改数据库来使用 spring-security 添加 CSRF 保护,因为 CSRF 保护令牌是会话存储的。
设置需要 5-15 分钟; Spring 新手最多 30 分钟。简而言之,该框架负责生成和验证令牌并在无效请求上返回身份验证错误。
您只需在 spring-security.xml 配置文件 <http>
标签中包含 <csrf />
标签。
如果您使用 html 基于表单的身份验证,您还必须在表单中包含以下隐藏输入:
<input type="hidden" name="${_csrf.parameterName}"
value="${_csrf.token}" />
我正在按照本教程学习基于 spring 框架 3.2.4
的应用程序http://springdiaries.blogspot.be/2012/12/web-security-preventing-csrf-attack.html#comment-form
关键是我已经检查了会话中的所有对象,但我没有找到任何具有密钥 OWASP_CSRFTOKEN 的对象,这就是工作不正常的疑点?
这不完全是你问题的答案,不幸的是,如果没有神奇的 crystal 球 ^^,这个问题太模糊无法回答,但这里有一些你应该尝试的事情:
- 检查您的请求是否来自 URL 匹配的
unprotected
中定义的模式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 容器日志中的错误,包括启动/应用程序加载和接收客户端请求时的错误。
一一查看所有配置参数。
仔细阅读 the project wiki 和文档:
您无论如何都不必修改数据库架构。这不是 OWASP CRSF 守卫的工作方式(生成的令牌存储在会话中,而不是持久保存在数据库中)。
还值得一提的是,您正在关注一个过时的博客 post:如果您正在使用 Spring,则根本不需要使用 OWASP CSRF 防护。您应该使用具有 built in CSRF protection 的 spring-安全身份验证,这更容易设置。
查看教程 on this page,了解如何设置 HTML 表单 + SQL 基于数据库的身份验证和 CSRF 保护(另外,不要错过 bcrypt 密码哈希算法; 它很容易设置,在某些时候你会很高兴你存储的是安全的散列而不是明文密码)。
你会发现你根本不需要修改数据库来使用 spring-security 添加 CSRF 保护,因为 CSRF 保护令牌是会话存储的。
设置需要 5-15 分钟; Spring 新手最多 30 分钟。简而言之,该框架负责生成和验证令牌并在无效请求上返回身份验证错误。
您只需在 spring-security.xml 配置文件 <http>
标签中包含 <csrf />
标签。
如果您使用 html 基于表单的身份验证,您还必须在表单中包含以下隐藏输入:
<input type="hidden" name="${_csrf.parameterName}"
value="${_csrf.token}" />