首页 > 解决方案 > Spring security 的 CSRF 令牌 - 我可以使用纯 HTML,还是需要 JSP?

问题描述


您能否告诉是否有任何方法可以在纯 HTML(不是 JSP)中使用 Spring Security 的 CSRF 令牌?
我的旧应用程序使用 JSP,并且很容易收到 spring security 的 CSRF 令牌:

    <%-- index.jsp: --%>
    <form method="post"...>
      <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
     ...
    Or:
    <head>
      <meta name="_csrf" content="${_csrf.token}"/>
      <meta name="_csrf_header" content="${_csrf.headerName}"/>
      ...

现在我工作的公司想要迁移到没有模板的纯 HTML:

     <!-- index.html: -->
     <html>
     ...
     Pure <form> and javascript, but how can we receive CSRF here?

我们公司的老手和新手,一位顾问刚刚告诉我们 JSP 已经过时,现代团队应该使用干净的“.html”页面,前端团队可以在没有运行服务器的情况下进行测试。我们愿意尝试,但顾问缺乏 CSRF 经验,无法帮助进行设置。

谢谢。

标签: springspring-bootsecurityspring-security

解决方案


Thymeleaf是您的方案的考虑因素。它的特点之一是您可以使用纯 HTML 进行原型制作,但它仍然是传统的服务器端呈现页面,如 JSP。这意味着您可以直接打开 html,但在服务器中部署时仍然具有动态内容。

使用 CSRF,Thymeleaf 会自动隐藏表单的输入。但是您也可以继续在元标记中使用 CSRF 令牌。

现在,如果您要使用 React、Vue、Angular 等 SPA 迁移到纯 HTML/JS。您需要通过 Spring Security 的CookieCsrfTokenRepository使用 Cookie 迁移您的 CSRF 保护,或者拥有一个允许您通过 XHR 获取 CSRF的 REST 端点.


推荐阅读