在青训营的最后一节课中,老师讲述了在网络上的一些 常见安全漏洞以及它们对应的防范方法。由于我本身是一名网络安全专业的学生,对此兴趣格外浓厚。在认真听完了这节课后,我总结了以下学习经验和个人感悟。
首先我们要先了解漏洞的分类。网站漏洞包括两方面:服务端漏洞和客户端漏洞。在它们之下还有更细化的分类,也有着相应的处理手段。
服务端漏洞是在网络应用程序或系统的服务器端代码中存在的安全漏洞。它可以被攻击者利用来获得未授权的访问、执行恶意操作或窃取敏感信息,它包括以下几种:
第三方组件漏洞,是指在软件或系统中使用的第三方组件(如开源库、框架、插件等)中存在的安全漏洞。这些组件通常由外部开发人员或团队创建和维护,如果存在安全漏洞,它们可能成为潜在的攻击入口,使整个应用程序或系统处于风险之中。针对java可以选择使用dependency-check-maven检查项目以来的组件是否存在安全漏洞,进而防范漏洞。
SQL注入,它发生在应用程序未正确验证用户输入并将其传递给数据库查询的情况下。攻击者利用这种漏洞在数据库中执行恶意的SQL查询,从而可能访问、修改或删除数据,甚至获取未经授权的访问权限。对于SQL注入,尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架;并且使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题;另外,在复杂场景一定要使用拼接SQL,需要对外部输入进行转义。这样才能实现防范。
越权漏洞,一般发生在应用程序没有正确实施访问控制机制的情况下,它可能导致未经授权的用户或攻击者获得超出其权限范围的访问权限,从而访问敏感信息、执行未授权的操作或以其他方式影响系统的完整性和安全性。这一漏洞一般分为两种,对于水平越权来说,在涉及资源id尽量不要使用短id(遍历难度较小),同时最重要的一定要做好资源属主校验;而对于垂直越权而言,可以将接口在路由级别进行分组,对不同的API分组引入Middleware进行权限拦截。
SSRF,又称服务端请求伪造攻击,指攻击者利用后端服务器为跳板,让后端服务向非预期网络地址(主要指内网地址)发出恶意请求,获取敏感信息或执行恶意操作。它的防护方式为:对url的host进行白名单过滤,获取对host解析的ip进行判定,是否是内网地址。
客户端漏洞,是一种发生在计算机、移动设备或其他终端用户系统上的安全漏洞,它可能会被攻击者利用,以某种方式影响用户系统的安全性和完整性。以下是它所包含的内容:
开放重定向,是指某些需要重定向到其他站点的功能,往往在参数中携带需要重定向的 URL ,但实际程序逻辑没有控制好重定向的范围,导致攻击者可以构造恶意链接,诱导用户重定向到恶意站点。因此,需要对重定向严格进行白名单控制 并正确校验匹配白名单进行修正。
XSS,本质是一种 Script 代码注入, 攻击者往目标 Web 页面里插入恶意 Script 代码,当用户访问页面(有客户端时需要交互)时,嵌入其中 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。它的防范方法有四种:输入过滤、输出过滤、富文本以及CSP。
CSRF,也称跨站请求伪造,它允许攻击者诱导用户访问恶意链接,执行用户非预期执行的操作。它的防护核心是判断请求的来源
点击劫持,是一种在网页中将恶意代码等隐藏在看似无害或者存在诱导的内容(如按钮)之下,并诱使用户点击的手段,用户点击后往往会执行一些非预期的操作。它的防护核心是不让非预期的网站 iframe 我的站点
CORS跨域配置错误,它本身不存在漏洞,而是由于开发者在配置CORS过程中,错误配置跨域访问Allow List, 导致非预期的站点可以进行跨域访问,最终可能导致信息泄漏。因此,需要正确设置跨域白名单。
以上便是我在本节课中学到的全部知识点总结了。尽管时长很短,我还是见识了很多新奇事物,宝贵知识。同时我也明白了之前困扰我的一个最大问题————为什么网络安全的课程与传统计算机没有较大区别?答案是,网络安全需要的前置知识十分庞杂。在我之前的总结中就可以看出来,一个网络漏洞的形成是一个复杂的过程,它涉及到前端,后端,网关、前后端交互等大方面,还包括代码规范性、程序逻辑融洽性等小细节。想要真正学好网络安全,这些都是必不可少的内容。我必须要沉住气,稳住心,才能有所收获。最后,老师又谆谆教诲我们,学习网络安全的初心是为了守护而非破坏,千万不要做违法的事情。