您能告诉我们是否有任何方法可以在纯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经验,无法帮助设置。
谢谢。
Thymelaf是您的场景中的一个考虑因素。它的一个特性是,您可以使用纯HTML创建原型,但它仍然是一个传统的服务器端渲染页面,如JSP。这意味着您可以直接打开html,但在服务器中部署时仍然具有动态内容。
使用CSRF,Thymelaf将自动为您的表单隐藏输入。但是您也可以继续在元标签中使用CSRF令牌。
现在,如果您要使用React、Vue、Angular等SPA迁移到纯HTML/JS,您需要通过Spring Security的CookieCsrfTokenRepository使用Cookie迁移CSRF保护,或者使用REST端点通过XHR获取CSRF。