【第六届字节跳动青训营·后端基础班】第十五课第一、二节 网站常见安全漏洞(一)|青训营

27 阅读2分钟

网站基本组成及漏洞定义

image.png

image.png

image.png

image.png

image.png

漏洞的分类

image.png

服务端漏洞

第三方组件漏洞

防护方式:针对java可以选择使用dependency-check-maven检查项目以来的组件是否存在安全漏洞。

SQL注入

SQL语句静态模板和动态数据部分没有严格区分,如果在数据项中加入了某些SQL语句关键字(比如说SELECTDROP等等),这些SQL语句就可以在数据库写入或读取数据时得到执行。

image.png

  1. [Java]错误使用语言框架,或者语言框架本身存在安全问题。 使用Mybatis-plus的危险函数,比如inSql,支持直接SQL拼接,存在SQL注入风险。

image.png 2. [Java]Mybatis使用「$」构建SQL模板。

image.png 3. Golang常见错误写法。 业务场景经常遇到根据用户定义的字段进行排序的功能,如果直接将用户输入字段作为维度带到Order则会产生SQL注入,假设GORM语句为:db.Order(param).Find(&products)

image.png 防护方式:

  1. 尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架。
  2. 使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题。
  3. 在复杂场景一定要使用拼接SQL,需要对外部输入进行转义。

命令执行

代码中遇到需要调用某个命令才能完成的功能时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,那么将会导致命令注入风险,服务器权限将会被控制。

image.png 防护方式:

  1. 对动态的值尽量设置白名单进行验证。
  2. 如果某些位置无法白名单,需要尝试对数据类型进行校验。
  3. 特殊字符黑名单的过滤,或者转义。

越权漏洞

image.png

水平越权

image.png

垂直越权

image.png

image.png

SSRF

SSRF又称服务端请求伪造攻击,指攻击者利用后端服务器为跳板,让后端服务向非预期网络地址(主要指内网地址)发出恶意请求,获取敏感信息或执行恶意操作。

image.png

image.png

image.png 防护方式:对url的host进行白名单过滤,获取对host解析的ip进行判定,是否是内网地址。

文件上传漏洞

image.png

image.png

image.png

image.png 防护方案:

  1. 限制文件类型:如果系统只需要图片类型,可以从服务端解析文件格式,限制只能传入特定的文件格式。
  2. 站库分离:应用部署的位置和上传的文件分离,一般可以使用TOS、OSS等进行文件存储。
  3. 防止图床:对图片访问链接进行限制,包括时间限制,访问身份限制等。