spring security 在 java 区域获取 csrf 令牌
spring security get csrf token in java area
当使用spring安全时,我们可以使用CSRF token。
我们可以在 spring 安全 xml 和 jsp
中使用
> (<sec:csrfInput /> or <input type=”hidden”
> name=”${_csrf.parameterName}” value=”${_csrf.token}”/>).
但是如何获取 Java 区域中的 csrf 令牌名称和值?
我必须从我的网络应用程序的服务层向用户发送邮件。
并且 csrf 令牌必须存在于邮件内容中。
String html = new String( "<div style='width:600px; height:300px; margin:0 auto;'>" +
"<h2 style='color:#FFBB00;'>lock release system</h2>" +
"<p style='color:#2F9D27'>your account has been locked. If you want to release the lock, you should click 'release user lock' button below." +
"</p>" +
"<hr>" +
"<form action='http://122.40.73.117:9000/whiteboard/user/release-lock-user' method='post' target='_blank'>" +
"<input type='hidden' name='email' value='" + email + "' />" +
"<input type='hidden' name='csrf' value='" + csrf + "' />" +
"<button type='submit' style='font-weight:bold;'>release user lock</button>" +
"</form>" +
"</div>");
上面的代码使用了 CSRF 变量,但这只是一个虚拟变量。
如何设置 CSRF?
org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository
处理 csrf 令牌。
它定义了一个方法 org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository#loadToken
这基本上是
CsrfToken token
=session.getAttribute("HttpSessionCsrfTokenRepository.CSRF_TOKEN");
您可以在代码中尝试相同的方法,但需要访问 HttpRequest 或 HttpSession,这应该不是问题。
一个csrf令牌始终属于一个会话。
因此,如果用户通过邮件浏览器连接到他使用的完全相同的会话,那么您在邮件中的代码只会在生成 csrf 令牌时起作用。如果他在另一台设备上打开邮件,或者在会话超时后,这可能是个问题。
Csrf 令牌是客户端和服务器之间的秘密,以提高安全性。
通过像邮件这样的不安全通道发送 csrf 令牌确实会消除这种安全增益。
当使用spring安全时,我们可以使用CSRF token。 我们可以在 spring 安全 xml 和 jsp
中使用> (<sec:csrfInput /> or <input type=”hidden”
> name=”${_csrf.parameterName}” value=”${_csrf.token}”/>).
但是如何获取 Java 区域中的 csrf 令牌名称和值?
我必须从我的网络应用程序的服务层向用户发送邮件。 并且 csrf 令牌必须存在于邮件内容中。
String html = new String( "<div style='width:600px; height:300px; margin:0 auto;'>" +
"<h2 style='color:#FFBB00;'>lock release system</h2>" +
"<p style='color:#2F9D27'>your account has been locked. If you want to release the lock, you should click 'release user lock' button below." +
"</p>" +
"<hr>" +
"<form action='http://122.40.73.117:9000/whiteboard/user/release-lock-user' method='post' target='_blank'>" +
"<input type='hidden' name='email' value='" + email + "' />" +
"<input type='hidden' name='csrf' value='" + csrf + "' />" +
"<button type='submit' style='font-weight:bold;'>release user lock</button>" +
"</form>" +
"</div>");
上面的代码使用了 CSRF 变量,但这只是一个虚拟变量。 如何设置 CSRF?
org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository 处理 csrf 令牌。 它定义了一个方法 org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository#loadToken
这基本上是
CsrfToken token
=session.getAttribute("HttpSessionCsrfTokenRepository.CSRF_TOKEN");
您可以在代码中尝试相同的方法,但需要访问 HttpRequest 或 HttpSession,这应该不是问题。
一个csrf令牌始终属于一个会话。 因此,如果用户通过邮件浏览器连接到他使用的完全相同的会话,那么您在邮件中的代码只会在生成 csrf 令牌时起作用。如果他在另一台设备上打开邮件,或者在会话超时后,这可能是个问题。
Csrf 令牌是客户端和服务器之间的秘密,以提高安全性。 通过像邮件这样的不安全通道发送 csrf 令牌确实会消除这种安全增益。