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

这篇具有很好参考价值的文章主要介绍了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,请求地址是不能有 ; 的,如果请求地址有 ; ,就会自动跳转到如下页面:

springsecurity firewall,2024年程序员学习,spring,安全,java

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

什么时候请求地址中会包含 ; 呢?不知道小伙伴们在使用 Shiro 的时候,有没有注意到,如果你禁用了 Cookie,那么 jsessionid 就会出现在地址栏里,像下面这样:

http://localhost:8080/hello;jsessionid=xx

这种传递 jsessionid 的方式实际上是非常不安全的(松哥后面的文章会和大家细聊这个问题),所以在 Spring Security 中,这种传参方式默认就禁用了。

当然,如果你希望地址栏能够被允许出现 ; ,那么可以按照如下方式设置:

@Bean

HttpFirewall httpFirewall() {

StrictHttpFirewall firewall = new StrictHttpFirewall();

firewall.setAllowSemicolon(true);

return firewall;

}

设置完成之后,再去访问相同的接口,可以看到,此时虽然还是报错,但是错误是 404 了,而不是一开始那个不允许 ; 的错了。

springsecurity firewall,2024年程序员学习,spring,安全,java

注意,在 URL 地址中,; 编码之后是 %3b 或者 %3B,所以地址中同样不能出现 %3b 或者 %3B

题外话

有的小伙伴可能不知道或者没用过,Spring3.2 开始,带来了一种全新的传参方式 @MatrixVariable。

@MatrixVariable 是 Spring3.2 中带来的功能,这种方式拓展了请求参数的传递格式,使得参数之间可以用 ; 隔开,这种传参方式真是哪壶不开提哪壶。因为 Spring Security 默认就是禁止这种传参方式,所以一般情况下,如果你需要使用 @MatrixVariable 来标记参数,就得在 Spring Security 中额外放行。

接下来我通过一个简单的例子来和大家演示一下 @MatrixVariable 的用法。

我们新建一个 /hello 方法:

@RequestMapping(value = “/hello/{id}”)

public void hello(@PathVariable Integer id,@MatrixVariable String name) {

System.out.println("id = " + id);

System.out.println("name = " + name);

}

另外我们还需要配置一下 SpringMVC,使 ; 不要被自动移除了:

@Configuration

public class WebMvcConfig extends WebMvcConfigurationSupport {

@Override

protected void configurePathMatch(PathMatchConfigurer configurer) {

UrlPathHelper urlPathHelper = new UrlPathHelper();

urlPathHelper.setRemoveSemicolonContent(false);

configurer.setUrlPathHelper(urlPathHelper);

}

}

然后启动项目(注意,Spring Security 中也已经配置了允许 URL 中存在 ;),浏览器发送如下请求:

http://localhost:8080/hello/123;name=javaboy

控制台打印信息如下:

id = 123

name = javaboy

可以看到,@MatrixVariable 注解已经生效了。

2.3 必须是标准化 URL

请求地址必须是标准化 URL。

什么是标准化 URL?标准化 URL 主要从四个方面来判断,我们来看下源码:

StrictHttpFirewall#isNormalized:

private static boolean isNormalized(HttpServletRequest request) {

if (!isNormalized(request.getRequestURI())) {

return false;

}

if (!isNormalized(request.getContextPath())) {

return false;

}

if (!isNormalized(request.getServletPath())) {

return false;

}

if (!isNormalized(request.getPathInfo())) {

return false;

}

return true;

}

getRequestURI 就是获取请求协议之外的字符;getContextPath 是获取上下文路径,相当于是 project 的名字;getServletPath 这个就是请求的 servlet 路径,getPathInfo 则是除过 contextPath 和 servletPath 之后剩余的部分。

这四种路径中,都不能包含如下字符串:

“./”, “/…/” or “/.”

2.4 必须是可打印的 ASCII 字符

如果请求地址中包含不可打印的 ASCII 字符,请求则会被拒绝,我们可以从源码中看出端倪:

StrictHttpFirewall#containsOnlyPrintableAsciiCharacters

private static boolean containsOnlyPrintableAsciiCharacters(String uri) {

int length = uri.length();

for (int i = 0; i < length; i++) {

char c = uri.charAt(i);

if (c < ‘\u0020’ || c > ‘\u007e’) {

return false;

}

}

return true;

}

2.5 双斜杠不被允许

如果请求地址中出现双斜杠,这个请求也将被拒绝。双斜杠 // 使用 URL 地址编码之后,是 %2F%2F,其中 F 大小写无所谓,所以请求地址中也能不出现 “%2f%2f”, “%2f%2F”, “%2F%2f”, “%2F%2F”。

如果你希望请求地址中可以出现 // ,可以按照如下方式配置:

@Bean

HttpFirewall httpFirewall() {

StrictHttpFirewall firewall = new StrictHttpFirewall();

firewall.setAllowUrlEncodedDoubleSlash(true);

return firewall;

}

2.6 % 不被允许

如果请求地址中出现 %,这个请求也将被拒绝。URL 编码后的 % 是 %25,所以 %25 也不能出现在 URL 地址中。

如果希望请求地址中可以出现 %,可以按照如下方式修改:

@Bean

HttpFirewall httpFirewall() {

StrictHttpFirewall firewall = new StrictHttpFirewall();

firewall.setAllowUrlEncodedPercent(true);

return firewall;

}

2.7 正反斜杠不被允许

如果请求地址中包含斜杠编码后的字符 %2F 或者 %2f ,则请求将被拒绝。

如果请求地址中包含反斜杠 \ 或者反斜杠编码后的字符 %5C 或者 %5c ,则请求将被拒绝。

如果希望去掉如上两条限制,可以按照如下方式来配置:

@Bean

HttpFirewall httpFirewall() {

StrictHttpFirewall firewall = new StrictHttpFirewall();

firewall.setAllowBackSlash(true);

firewall.setAllowUrlEncodedSlash(true);

return firewall;

}

2.8 . 不被允许

如果请求地址中存在 . 编码之后的字符 %2e%2E,则请求将被拒绝。

如需支持,按照如下方式进行配置:

@Bean

HttpFirewall httpFirewall() {

StrictHttpFirewall firewall = new StrictHttpFirewall();

firewall.setAllowUrlEncodedPeriod(true);

return firewall;

}

2.9 小结

需要强调一点,上面所说的这些限制,都是针对请求的 requestURI 进行的限制,而不是针对请求参数。例如你的请求格式是:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
springsecurity firewall,2024年程序员学习,spring,安全,java
springsecurity firewall,2024年程序员学习,spring,安全,java
springsecurity firewall,2024年程序员学习,spring,安全,java
springsecurity firewall,2024年程序员学习,spring,安全,java
springsecurity firewall,2024年程序员学习,spring,安全,java
springsecurity firewall,2024年程序员学习,spring,安全,java

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
springsecurity firewall,2024年程序员学习,spring,安全,java

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

springsecurity firewall,2024年程序员学习,spring,安全,java

springsecurity firewall,2024年程序员学习,spring,安全,java

springsecurity firewall,2024年程序员学习,spring,安全,java

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

springsecurity firewall,2024年程序员学习,spring,安全,java

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

springsecurity firewall,2024年程序员学习,spring,安全,java

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

springsecurity firewall,2024年程序员学习,spring,安全,java

② 视频

springsecurity firewall,2024年程序员学习,spring,安全,java

③ 书籍

springsecurity firewall,2024年程序员学习,spring,安全,java

资源较为敏感,未展示全面,需要的最下面获取

springsecurity firewall,2024年程序员学习,spring,安全,javaspringsecurity firewall,2024年程序员学习,spring,安全,java

② 简历模板

springsecurity firewall,2024年程序员学习,spring,安全,java

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
springsecurity firewall,2024年程序员学习,spring,安全,java

8dc224b7ace77f2e260ba222.png#pic_center)

③ 书籍

springsecurity firewall,2024年程序员学习,spring,安全,java

资源较为敏感,未展示全面,需要的最下面获取

springsecurity firewall,2024年程序员学习,spring,安全,javaspringsecurity firewall,2024年程序员学习,spring,安全,java

② 简历模板

springsecurity firewall,2024年程序员学习,spring,安全,java

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-tecs3bAt-1712860136526)]文章来源地址https://www.toymoban.com/news/detail-858357.html

到了这里,关于Spring Security 自带防火墙!你都不知道自己的系统有多安全!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【防火墙】防火墙NAT Server的配置

    介绍公网用户通过NAT Server访问内部服务器的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网Web服务器和FTP服务器能够对外提供服务,需要在FW上配置NAT Server功能。除了公网接口的IP地址外,公司还向ISP申请了一个IP地址(1.1.1.10)作为内网服务器

    2024年02月10日
    浏览(43)
  • 防火墙入门指南:了解防火墙的基础知识

    目录 防火墙(四层设备) 1.1防火墙是什么 1.2 防火墙是如何诞生的 1.2.1包过滤防火墙----访问控制列表技术---三层技术 1.2.2代理防火墙----中间人技术---应用层 1.2.3状态防火墙---会话追踪技术---三层、四层 1.2.4UTM---深度包检查技术----应用层 1.2.5下一代防火墙 1.3 防火墙如何分类

    2024年02月16日
    浏览(31)
  • Linux关闭防火墙命令(永久关闭、暂时关闭、重启防火墙)

    已永久关闭状态: 如果你使用 iptables,可以使用以下命令启动防火墙: 或者,根据系统的不同,也可以使用: firewalld 防火墙: 如果你使用 firewalld,可以使用以下命令启动防火墙: UFW(Uncomplicated Firewall): 在一些基于 Debian 或 Ubuntu 的系统中,可能使用 ufw 工具管理防火墙

    2024年02月13日
    浏览(31)
  • 网络安全入门:什么是防火墙,防火墙有哪些功能

    网络安全领域是安全行业最基本的领域,研究的技术范畴主要围绕防火墙/NGFW/UTM、网闸技术、入侵检测/防御、VPN网关(IPsec/SSL)、抗DDOS、上网行为管理、负载均衡/应用交付、流量分析、漏洞扫描等。以下主要介绍什么是防火墙,防火墙有哪些功能? 什么是防火墙? 所谓“

    2024年02月09日
    浏览(42)
  • 分析web应用防火墙与防火墙的功能与用途

     随着互联网的普及和信息技术的发展,网络安全问题日益受到关注。防火墙和Web应用防火墙作为网络安全的重要组成部分,起着至关重要的作用。小编将对防火墙和Web应用防火墙的功能和用途进行比较分析,以帮助读者了解两者的区别和联系。 一、防火墙的功能与用途 防火

    2024年02月06日
    浏览(28)
  • ENSP防火墙综合实验(GRE、IPSec、NAT通信)【防火墙安全策略】

    注:所有的通信使用静态路由来保证。 HQ: Partner Branch HQ Partner Branch HQ Partner HQ Branch HQ Branch HQ HQ Partner Branch 注:此为FTP服务器设置 注:客户端Client3成功访问FTP服务器的截图 注:通过抓包抓取FTP的流量(筛选ftp),可以看到有多个ftp的包,点开其中一个流量,可以清晰看到

    2023年04月08日
    浏览(29)
  • Windows server防火墙如何设置阻止IP访问防火墙限制ip地址访问

    无论是服务器还是本机电脑,安全都是非常重要的,一些安全软件设置后会拦截到一些异常IP,我们可以通过防火墙将异常IP加入黑名单,禁止访问,今天 芳芳 就和你们分享Windows防火墙如何设置IP禁止访问,希望可以帮助到你~ 打开“控制面板”,在右上角的查看方式改为“

    2024年02月13日
    浏览(46)
  • 网络安全基础 之 防火墙 双机热备、防火墙类型、组网方式、工作模式、逻辑区域划分

    目录 概念: 特征: 作用:     基本功能: 防火墙的分类:     性能划分:     设备形态分类:     技术划分:         包过滤防火墙:             ACL七元组: 逻辑区域: 配置方式:     自定义安全区域:     删除自定义安全区域: 防火墙组网方式: 防火

    2024年02月05日
    浏览(37)
  • Linux实战——Tomcat安装部署、Linux中配置JDK环境、关闭防火墙、配置防火墙规则

    Tomcat安装部署【简单】 简介 Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说,Tomcat是一个WEB应用程序的托管平台,可以让用户编写的WEB应用程序,被

    2023年04月09日
    浏览(37)
  • 防火墙软件版本过旧:使用的防火墙软件版本过旧,无法支持新的安全特性

    随着网络攻击的日益增多和新型恶意软件的不断涌现,企业和个人用户越来越关注网络安全问题. 为了保护系统和数据安全, 安装并维护一款可靠的防火墙是必要的手段之一. 但许多用户在遇到以下问题时可能会感到困惑:为什么我的系统提示说需要更新防火牆软件?有什么办法

    2024年02月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包