spring - 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 经验,无法帮助进行设置。
谢谢。
解决方案
Thymeleaf是您的方案的考虑因素。它的特点之一是您可以使用纯 HTML 进行原型制作,但它仍然是传统的服务器端呈现页面,如 JSP。这意味着您可以直接打开 html,但在服务器中部署时仍然具有动态内容。
使用 CSRF,Thymeleaf 会自动隐藏表单的输入。但是您也可以继续在元标记中使用 CSRF 令牌。
现在,如果您要使用 React、Vue、Angular 等 SPA 迁移到纯 HTML/JS。您需要通过 Spring Security 的CookieCsrfTokenRepository使用 Cookie 迁移您的 CSRF 保护,或者拥有一个允许您通过 XHR 获取 CSRF的 REST 端点.
推荐阅读
- python - 如何使用python计算字典中的元素?
- android - How to enable hardware acceleration for Android Emulator in Windows Server 2019?
- php - How to get a random combination of rows that sum up to a specific value?
- dictionary - How toUppercase() one property of a list in kotlin with map?
- c# - 对 api 的发布请求适用于 Android,但不适用于 IOS。赛马林
- python - 如何让 Keras 只计算验证数据的某个指标?
- angular - 如何将搜索参数传递给 URL?
- python - 在 Python 的函数中正确使用 kwargs
- kotlin - channel.asFlux() 似乎在高并发情况下会导致死锁
- laravel - Laravel 中公共目录下的文件可以在不知道文件名的情况下查看吗?