1.第三方组件漏洞
场景:打印日志、解析json等
防护方式: 针对java可以选择使用dependency-check-maven检查项目以来的组件是否存在安全漏洞
2.SQL注入
SQL语句静态模板和动态数据部分没有严格区分,如果在数据项中注入了某些SQL语句关键字(比如说SELECT、DROP等等),这些SQL语句就很可能在数据库写入或读取时得到执行。
防护方式:
1.尽量不要基于DB的Raw方法拼接构造SOL语句,而应该使用预编译、ORM框架
2.使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SOL注入问题。
3.在复杂场景一定要使用拼接SQL,需要对外部输入进行转义。
3.命令执行
代码中遇到需要调用某个命令才能完成的功能的时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,那么将会导致命令注入风险,服务器权限将会被控制。
防护方式:
1.对动态的值尽可能设置白名单进行验证。
2.如果某些位置无法白名单,需要尝试对数据类型进行校验
3.特殊字符黑名单的过滤,或者转义。
4.越权漏洞
分类:未授权、水平越权和垂直越权
水平越权
黑灰产场景: 订单查询功能提供订单id即可查询订单详情,这里攻击者可以遍历orderld获取其他用户的订单信息
防护方式: 涉及资源id尽量不要使用短id (遍历难度较小) ,一定要做好资源属主校验
垂直越权
黑灰产场景: 攻击者可以通过开通另外的测试管理员账户抓包获取接口,或者通过逆向前端代码方式获取实际接口,然后绕过前端直接尝试访问后端接口,获取数据详情。
防护方式: 如果是简单的场景,可以将接口在路由级别进行分组,对不同的API分组引入Middleware进行权限拦截,Middleware获取当前用户角色以确定是否可以访问此接口。
5.SSRF
SSRF又称服务端请求伪造攻击,指攻击者利用后端服务器为跳板,让后端服务向非预期网络地址(主要指内网地址) 发出恶意请求,获取敏感信息或执行恶意操作。
服务端流程: 服务端请求stockApi,获取结果返回
攻击者: 将stockApi参数改为内网地址,访问内网资源
防护方式: 对url的host进行白名单过滤,获取对host解析的ip进行判定,是否是内网地址。
6.文件上传漏洞
防护方案:
1.限制文件类型: 如果系统只需要图片类型,可以从服务端解析文件格式,限制只能传入特定的文件格 武
2.站库分离: 应用部署的位置和上传的文件分离,一般可以使用TOS、OSS等进行文件存储。
3.防止图床: 对图片访问链接进行限制,包括时间限制,访问身份限制等