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 容器日志中的错误,包括启动/应用程序加载和接收客户端请求时的错误。

  • 设置断点 here and here 并启动应用程序 调试模式以确保您的 class 正在加载并且令牌是 正在请求中。

  • 一一查看所有配置参数。

  • 仔细阅读 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}" />