安全相关

跨站伪造请求攻击防护(CSRF) 

Macula 框架由于采用了 Spring Security 作为安全框架,所以直接采用了 Spring Security 提供的 CsrfFilter,默认开启 CSRF 保护。

Macula 框架默认不对 AJAX 请求(请求头 X-Requested-With 值为 XMLHttpRequest)进行 CSRF Token 验证。

如果不是 AJAX 提交,则需要自己在表单中加入下面的代码:

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

如果需要禁用 CSRF,需要修改 WebSecurityConfig

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .csrf().disable();
  }
}

具体可以参考 Spring Security Reference

跨站脚本攻击防护(XSS)

配置 macula.config.enableEscapeXss 为 true 开启 XSS 防护,默认开启。

配置 macula.config.escapeXssLevel 设置 XSS 防护级别,默认 BASIC。可选项有 BASIC(基础),BASICWITHIMAGES(基础+图片),SIMPLETEXT(简单文本)和RELAXED。

同时 Spring Security 默认设置响应头 X-XSS-Protection: 1; mode=block 启用浏览器端 XSS 防护。

具体可以参考 Spring Security XSS Protection

图形验证码

获取验证码

页面可以通过访问 /public/getKaptchaImage 获取验证码的图片

验证验证码

验证验证码功能在 KaptchaAuthenticationFilter 中实现,默认已配置在 WebSecurityConfig。默认验证路径为 POST /login,默认验证码值参数名为 kaptcha。