【发布时间】:2020-12-29 11:27:02
【问题描述】:
在开发我的 Spring Boot 应用程序时,我禁用了 csrf;但现在我需要启用它。我关注了 Spring Docs here,但我不断收到“SyntaxError: Invalid header name”。在我发出 POST 请求的 javascript 文件中。我在这里做错了什么吗?
这是在我的 HTML 页面顶部的标题中,用于此功能:
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
这是发出请求的 JavaScript 文件:
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == XMLHttpRequest.DONE) {
location.reload();
}
}
// Headers for CSRF protection
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
request.open("POST", "/admin/delete-email");
request.setRequestHeader(header, token); <-- This line throws syntax error.
request.send(formData);
这里是安全配置:
@Override
public void configure(HttpSecurity http) throws Exception {
// The following snippet opens the entire app
// http.authorizeRequests().antMatchers("/**").permitAll();
//http.csrf().disable();
http.authorizeRequests()
.antMatchers("/admin/**")
.hasRole("ADMIN")
.antMatchers("/db/**")
.hasRole("ADMIN")
.and()
.formLogin()
.permitAll()
.and()
.httpBasic();
}
我在使用表单发出 POST 请求时也收到 403 错误:
<form method="POST" enctype="multipart/form-data" action="/admin/add-email">
<td class="tg-0pky"><input type="text" name="employeeId"/></td>
<td class="tg-0pky"><input type="text" name="email"/></td>
<td class="tg-0pky"><input type="submit" value="Upload"/></td>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>
【问题讨论】:
标签: javascript java spring-boot csrf