Java 每个请求的Csrf令牌
任何人都可以帮助如何为每个请求生成csrf令牌以及如何验证它 通常,您必须从表单模板中获取Java 每个请求的Csrf令牌,java,security,jsp,csrf,Java,Security,Jsp,Csrf,任何人都可以帮助如何为每个请求生成csrf令牌以及如何验证它 通常,您必须从表单模板中获取getToken,以便在表单中包含隐藏的输入,然后在接收Servlet中确保您获得了POST请求并且有效 你如何在你的应用程序中保持一致将取决于你使用的框架代码。如果“Action类”指的是Struts 2,那么该框架已经有了自己的TokenSessionInterceptorCSRF机制,您通常希望重用该机制 现在,每个请求都有一个需求 如果您的意思是有人要求在每次页面加载时更改CSRF令牌,您应该抵制该
getToken
,以便在表单中包含隐藏的输入,然后在接收Servlet中确保您获得了POST请求并且有效
你如何在你的应用程序中保持一致将取决于你使用的框架代码。如果“Action类”指的是Struts 2,那么该框架已经有了自己的TokenSessionInterceptor
CSRF机制,您通常希望重用该机制
现在,每个请求都有一个需求
如果您的意思是有人要求在每次页面加载时更改CSRF令牌,您应该抵制该请求,因为它是假的
“CSRF令牌不会在每次请求时都失效”是笔测试报告中常见的填充词,但修复它会使应用程序的可用性大大降低。如果您的旧令牌在每个新页面上都无效,那么您将无法在两个选项卡中同时使用不同的页面,或者返回页面然后提交表单
当您应该使CSRF令牌无效(并发布一个新令牌)的同时,您也使会话无效:在任何特权级别更改上。最明显的是,当用户成功登录时,您应该扔掉旧会话和其中的旧CSRF令牌,并用新令牌替换它们以防止会话固定攻击
但是,更进一步的做法牺牲了可用性,在安全性方面没有任何好处。是的,这一切似乎都是意料之中的。次要问题:(a)记住要确保您正在检查的servlet是有效的
只接受帖子(因为您不想在URL中允许令牌泄漏);(b) 一般来说,您应该总是对放入JSP中HTML页面中的所有文本值进行HTML转义,并引用属性值(即使在这种特殊情况下,它不易受到HTML注入的攻击—如果始终进行转义,则更易于管理);(c) 在生产中,您需要删除敏感令牌到标准输出的日志记录。