网络安全:预防CSRF攻击

4

那么您可能没有按照教程的步骤进行操作,或是在错误的方法中检查。请问您是如何检查session变量的呢?同时,请贴出您正在使用的代码(请勿参考教程,我们想看您自己的代码)。 - M. Deinum
为什么你不使用Spring Security呢?Spring Security内置了CSRF保护。 - Manu Zi
不定义用户/角色也能正常工作吗? - Nunyet de Can Calçada
如果您没有用户,您想保护自己免受哪些CSRF威胁场景?您能否详细解释一下? - Krešimir Nesek
我有用户,但我希望避免修改数据库。 - Nunyet de Can Calçada
1个回答

2
这并不是对你的问题的确切回答,很遗憾,没有神奇的水晶球无法回答模糊的问题 ^^,但以下是你应该尝试的一些事情:
  • 检查你的请求是否来自与Owasp.CsrfGuard.properties配置文件中定义的unprotected模式之一匹配的URL(这些值来自OWASP文档;你应该设置不同的值):

.

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

  • 设置断点这里这里,并在调试模式下启动应用程序,以确保已加载类并请求了令牌。

  • 逐个审查所有配置参数。

  • 仔细阅读项目wiki和文档:(链接)

您不需要以任何方式修改DB模式。这不是OWASP CRSF guard的工作方式(生成的令牌存储在会话中,而不是持久存储在数据库中)。

还值得一提的是,您正在遵循一个过时的博客文章:如果您使用Spring,则根本不需要使用OWASP CSRF guard。您应该使用具有内置CSRF保护的spring-security身份验证,这更容易设置。

请查看教程(链接),了解如何设置基于HTML表单+ SQL数据库的身份验证和CSRF保护(此外,请不要错过bcrypt密码哈希教程;它非常容易设置,在某些时候,您会很高兴存储安全哈希而不是明文密码)。

您还将看到,使用spring-security添加CSRF保护时,您不需要修改db,因为CSRF保护令牌是会话存储的。

设置只需5-15分钟;对于Spring初学者最多需要30分钟。简而言之,框架负责生成和验证令牌,并在无效请求时返回身份验证错误。

<http>标签内,只需包含<csrf />标签即可配置spring-security.xml。

如果您正在使用基于HTML表单的身份验证,您还需要在表单中包含以下隐藏输入:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接