【问题标题】:Web Security: Preventing CSRF attack网络安全:防止 CSRF 攻击
【发布时间】:2015-10-19 18:50:26
【问题描述】:

我正在按照本教程学习基于 Spring 框架 3.2.4 的应用程序

http://springdiaries.blogspot.be/2012/12/web-security-preventing-csrf-attack.html#comment-form

关键是我已经检查了会话中的所有对象,但我没有找到任何具有 OWASP_CSRFTOKEN 密钥的对象,这是否可以正常工作?

【问题讨论】:

  • 那你没有按照教程或者你检查的方式不对。你如何检查会话变量。还贴一些你正在使用的代码(不要参考我们想看你的代码的教程)。
  • 为什么不用spring-security? spring security 内置了 csrf-protection。
  • 它可以在不定义用户/角色的情况下工作?
  • 如果您没有用户,您能否更详细地解释一下您试图保护自己免受哪种 CSRF 威胁场景?
  • 我有用户,但我想避免修改数据库

标签: security spring-mvc csrf csrf-protection owasp


【解决方案1】:

这并不完全是您问题的答案,不幸的是,如果没有神奇的水晶球,这个答案太模糊了^^,但您应该尝试以下一些事情:

  • 请检查您的请求不是来自与其中一个匹配的 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 容器日志是否有错误。

  • 设置断点 herehere 并在 调试模式以确保您的类正在加载并且令牌是 正在请求中。

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

  • 仔细阅读the project wiki 和文档:

无论如何,您都不必修改您的数据库架构。这不是 OWASP CRSF 守卫的工作方式(生成的令牌存储在会话中,而不是持久化在数据库中)。

还值得一提的是,您正在关注一篇过时的博客文章:如果您使用的是 Spring,则根本不需要使用 OWASP CSRF 防护。您应该使用具有built in CSRF protection 的 spring-security 身份验证,这更容易设置。

查看教程on this page,了解如何使用 CSRF 保护设置基于 HTML 表单 + SQL 数据库的身份验证(另外,不要错过 bcrypt 密码散列;它很容易设置,并且在某些时候你会很高兴你存储的是安全的哈希而不是明文密码)。

您会发现,您根本不需要修改数据库来使用 spring-security 添加 CSRF 保护,因为 CSRF 保护令牌是会话存储的。

设置需要 5-15 分钟;春季新手最多 30 分钟。简而言之,框架负责生成和验证令牌,并在无效请求上返回身份验证错误。

您只需在您的 spring-security.xml 配置文件 <http> 标签中包含 <csrf /> 标签。

如果您使用基于 html 表单的身份验证,您还必须在表单中包含以下隐藏输入:

<input type="hidden" name="${_csrf.parameterName}"
            value="${_csrf.token}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2021-06-26
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2013-04-29
    相关资源
    最近更新 更多