通常在开发需求前需要对功能接口的安全方面进行考虑和设计,通常包括7个方面
序号 | 安全需求 | 安全设计要点 |
---|---|---|
1 | 输入校验 | 1.设置请求参数的允许的字符类型、最小/大字符长度限制、取值范围,在满足业务需求的前提下,将所支持的字符范围降到最低 2.文件上传、下载功能检查文件大小是否超出限制,检查文件名、文件路径是否包含特殊字符、是否在预期路径、是否是预期格式 3.其他基于业务逻辑的输入校验 |
2 | 敏感信息处理 | 1.敏感信息的传输需确保传输过程受到保护,如使用https,密码传输时需进行额外加密; 2.敏感信息展示时需按照《个人敏感数据掩码规范》的要求脱敏; 3.敏感信息存储时: 3.1.对于需要知道原文的敏感信息数据(如联系方式),建议采用可逆加密算法进行加密后再存储 3.2.对于不需要知道原文的敏感信息数据(如密码),建议采用不可逆哈希算法处理后存储 3.3.一般情况下,不在客户端存储密钥,加密秘钥不能hardcode在代码中,需要有可替换的秘钥管理机制 3.4.敏感信息的增删改查均有权限控制 3.5.敏感信息不能打印在日志中 2.避免将cookie、token等信息通过GET方式传输; 3.需要在前端不再展示某些功能、页面时,应采用将接口、入口从页面源码中移除同时在服务端关闭相关功能的方式,而不能采用display:none、注释掉等仅让内容不显示在页面上的方式。 |
3 | 访问控制 | 1.是否需要登录才可访问; 2.是否需要检查用户能访问功能接口的权限,考虑基于最小权限原则,以白名单方式明确新增或修改的API可以允许哪些用户访问; 3.是否需要校验接口操作的对象是否属于当前用户; 4.是否需要校验接口操作的对象是否处于允许被操作的状态; 5.使用了项目统一的角色权限控制解决方案; |
4 | 输出编码 | 1.对于直接来自用户输入的内容、曾经来自用户输入的内容(如数据库中存储的曾经来自用户输入的内容、从其他系统传输过来且曾经来自用户输入的内容 在输出到前端进行展示之前应对特殊字符进行转义 2.对于直接来自用户输入的内容、曾经来自用户输入的内容,将其以Excel文件(csv、xls、xlsx)导出时需检查内容是否可能形成Excel公式(以一个等号开头), 若存在建议过滤公式内容(移除内容开头的等号)或将内容强制转换为Excel的文本格式(在内容前拼接一个单引号) |
5 | 参数化SQL | 1.优先采用预编译、参数化的方式编写SQL语句,避免使用拼接变量的方式构造SQL 2.对于只能采用变量拼接方式构造SQL场景,需对变量内容进行白名单检查,或对内容是否包含预期之外的字符进行检查 3.以上方式都难以执行而又确实需要采用变量拼接方式构造SQL场景,可考虑使用ESAPI.encoder等安全编码组件对变量内容进行编码 |
6 | 防通知骚扰 | 1.发送信息前进行图验验证 2.优先从服务端获取要发送的手机号码、邮箱、微信等个人通信地址 3.在服务端对发送间隔做限制 4.对一定时间内发送总次数做限制 |
7 | 高并发 | 对于存在高并发场景的业务功能,需注意加锁限制资源竞争 |