从小就听说过“黑客攻击”、“网络漏洞”等事件,但并没有去真正了解过这个问题。本笔记将梳理在今天课程中所了解到的服务端网络常见安全漏洞。
常见安全问题
- 数据泄露
- 服务瘫痪
- 成果失窃
- 系统劫持
网络漏洞分类
服务端漏洞
1.第三方组件漏洞
例如Log4j2 日志组件在处理程序日志记录时存在 JNDI 注入缺陷,攻击者可以利用该漏洞,获得目标服务器权限,向目标服务器发送恶意数据,在目标服务器任意代码执行。
防护方式: 针对java可以选择使用dependency-check-maven检查项目以来的组件是否存在安全漏洞。
SQL注入
SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。
防护方式
- 1.尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架
- 使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题需要对外部输入进行转义
- 在复杂场景一定要使用拼接SQL
命令执行
代码中遇到需要调用某个命令才能完成的功能时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,那么将会导致命令注入风险,服务器权限将会被控制。
防护方式
- 1.对动态的值尽可能设置白名单进行验证
- 如果某些位置无法白名单,需要尝试对数据类型进行校验
- 特殊字符黑名单的过滤,或者转义
越权漏洞
越权:资源访问或操作时候主体权l.限没有进行校验就会造成越权问题,细分为:未授权、水平越权和垂直越权。
水平越权
黑灰产场景:订单查询功能提供订单id即可查询订单详情,这里攻击者可以遍历orderld获取其他用户的订单信息 防护方式: 涉及资源id尽量不要使用短id (遍历难度较小),同时最重要的定要做好资源属主校验。
垂直越权
黑灰产场景:攻击者可以通过开通另外的测试管理员账户抓包获取接口,或者通过逆向前端代码方式获取实际接口,然后绕过前端直接尝试访问后端接口,获取数据详情。 如果是简单的场景,可以将接防护方式:口在路由级别进行分组,对不同的API分组引入Middleware进行权限拦截,Middleware获取当前用户角色以确定是否可以访问此接口。
文件上传漏洞
文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。 因此,在开发网站及应用程序过程中,需严格限制和校验上传的文件,禁止上传恶意代码的文件。同时限制相关目录的执行权限,防范webshell攻击。
防护方案
- 限制文件类型:如果系统只需要图片类型,可以从服务端解析文件格式,限制只能传入特定的文件格 式。
- 站库分离: 应用部署的位置和上传的文件分离,一般可以使用TOS、OSS等进行文件存储防止图床:对图片访问链接进行限制,包括时间限制,访问身份限制等。
SSRF
SSRF又称服务端请求伪造攻击,指攻击者利用后端服务器为跳板,让后端服务向非预期网络地址(主要指内网地址)发出恶意请求,获取敏感信息或执行恶意操作。
- 服务端流程:服务端请求stockApi,获取结果返回
- 攻击者:将stockApi参数改为内网地址,访问内网资源
防护方法:对url的host进行白名单过滤,获取对host解析的ip进行判定,是否是内网地址。