0


Spring Security 自带防火墙!你都不知道自己的系统有多安全!

一个是严格模式的防火墙设置,还有一个默认防火墙设置。

DefaultHttpFirewall 的限制相对于 StrictHttpFirewall 要宽松一些,当然也意味着安全性不如 StrictHttpFirewall。

Spring Security 中默认使用的是 StrictHttpFirewall。

2.防护措施


那么 StrictHttpFirewall 都是从哪些方面来保护我们的应用呢?我们来挨个看下。

2.1 只允许白名单中的方法

首先,对于请求的方法,只允许白名单中的方法,也就是说,不是所有的 HTTP 请求方法都可以执行。

这点我们可以从 StrictHttpFirewall 的源码中看出来:

public class StrictHttpFirewall implements HttpFirewall {

private Set allowedHttpMethods = createDefaultAllowedHttpMethods();

private static Set createDefaultAllowedHttpMethods() {

Set result = new HashSet<>();

result.add(HttpMethod.DELETE.name());

result.add(HttpMethod.GET.name());

result.add(HttpMethod.HEAD.name());

result.add(HttpMethod.OPTIONS.name());

result.add(HttpMethod.PATCH.name());

result.add(HttpMethod.POST.name());

result.add(HttpMethod.PUT.name());

return result;

}

private void rejectForbiddenHttpMethod(HttpServletRequest request) {

if (this.allowedHttpMethods == ALLOW_ANY_HTTP_METHOD) {

return;

}

if (!this.allowedHttpMethods.contains(request.getMethod())) {

throw new RequestRejectedException("The request was rejected because the HTTP method “” +

request.getMethod() +

“” was not included within the whitelist " +

this.allowedHttpMethods);

}

}

}

从这段代码中我们看出来,你的 HTTP 请求方法必须是 DELETE、GET、HEAD、OPTIONS、PATCH、POST 以及 PUT 中的一个,请求才能发送成功,否则的话,就会抛出 RequestRejectedException 异常。

那如果你想发送其他 HTTP 请求方法,例如 TRACE ,该怎么办呢?我们只需要自己重新提供一个 StrictHttpFirewall 实例即可,如下:

@Bean

HttpFirewall httpFirewall() {

StrictHttpFirewall firewall = new StrictHttpFirewall();

firewall.setUnsafeAllowAnyHttpMethod(true);

return firewall;

}

其中,setUnsafeAllowAnyHttpMethod 方法表示不做 HTTP 请求方法校验,也就是什么方法都可以过。或者也可以通过 setAllowedHttpMethods 方法来重新定义可以通过的方法。

2.2 请求地址不能有分号

不知掉大家有没有试过,如果你使用了 Spring Security,请求地址是不能有

;

的,如果请求地址有

;

,就会自动跳转到如下页面:

可以看到,页面的提示中已经说了,因为你的请求地址中包含

;

,所以请求失败。

什么时候请求地址中会包含

;

呢?不知道

标签: spring 安全 java

本文转载自: https://blog.csdn.net/2401_83739284/article/details/137660216
版权归原作者 2401_83739284 所有, 如有侵权,请联系我们删除。

“Spring Security 自带防火墙!你都不知道自己的系统有多安全!”的评论:

还没有评论