数据安全治理
- 日志脱敏;
不要在日志中保存敏感信息,包括:不必要的系统详细信息、会话ID或密码;需输出的敏感或机密数据必须经过脱敏处理
参考链接:
java 日志脱敏框架 sensitive,优雅的打印脱敏日志
https://blog.51cto.com/u_9250070/2338164
基于logback的日志“规范”和“脱敏”
https://zhuanlan.zhihu.com/p/150152475 - 前端显示信息脱敏;
脱敏算法
- 替换,如统一将女性用户名替换为F,容易破解;
- 重排,序号12345重排为54321,按照一定的顺序进行打乱,很像“替换”,可以在需要时方便还原信息,但同样易破解;
- 加密:编号12345加密为23456,安全程度取决于采用哪种加密算法,一般根据实际情况而定;Hash脱敏,使用SHA256或SHA512。或使用AES128、AES192和AES246三种加密算法。
- 截断:例如135790截断为135,舍弃必要信息来保证数据的模糊性,是比较常用的脱敏方法,但对生产不够友好;
- 掩码:123456->1xxxx6,保留部分信息,并且保证了信息的长度不变性,对信息持有者更易辨别;6种脱敏方式:1.保留前n后m;2.保留自x至y;3.遮盖前n后m;4.遮盖自x至y;5.特殊字符前遮盖;6.特殊字符后遮盖;
- 日期偏移取整:20200913 12:30:45->20200913 12:00:00,舍弃精度来保证原始数据的安全性,一般此种方法可以保护数据的时间分布度。
- 密码类不需要逆向的数据必须使用摘要算法+盐方式存储;
参考链接:
密码加盐
https://blog.csdn.net/chichichichi/article/details/79548049 - 需要逆向的敏感信息(身份证、银行卡等)在存储到数据库时使用高强度的加密算法保护;
加密算法推荐:国密算法SM2、SM4; - 禁止在代码、注释中存储敏感数据;
- 禁止在COOKIE中保存用户密码;
- 配置文件中登录账号、密码等数据加密;
参考链接:
Spring 配置数据库用户名密码加密
https://blog.csdn.net/tanggao1314/article/details/83302593 - 禁止使用GET方法传递敏感参数(会话标识、身份证号等);
浏览器历史记录存储用户的信息。如果URL中,带有未过期的session IDs、pins或tokens(或低熵值),则它们可能被窃取。 - 上传操作应设计身份验证机制;
- 必须在服务端使用白名单方式限制可上传文件类型,如果需求单一,可以不考虑上传文件的格式,直接在服务端根据时间生成文件名和目录名;
- 限制允许上传的文件大小;
- 引用上传的文件时,使用文件id(hash随机生成)进行调用,不要显示文件地址;
- 禁止把上传的文件保存在Web环境中。如果有特殊需求,必须关闭在文件上传目录的执行权限;
- 权限检查:文件下载和引用时,应该检查该用户是否具有此文件的相关权限;
- 禁止使用直接传递文件路径的引用方式,如有特殊需要可设置路径白名单引用;
- 对用户的操作进行token 验证,防止跨站请求伪造(CSRF)的操作;
- 用户登出后应及时清理会话及其相关登录信息;
- 禁止长时间持续的登录状态,建议设置会话超时时间,超时后强制销毁会话;
- 接口数据防篡改,通过加入在 POST 数据中加入时间戳+随机码,然后使用私钥对数据做 sign 签名,服务端对数据进行验签;
- 应用程序使用的框架,如Spring、Hibernate、jQuery 等,保证使用的是安全版本或修复已知漏洞;对文件做编辑的第三方组件,如FCKEditor 编辑器等,保证使用的是安全版本或修复已知漏洞;
- 数据库连接的认证密码使用高强度密码,不要使用“123456”,“root"等常见弱口令,密码应根据使用频率定期更新;
- 高强度密码设置规则:
1.包含大写字母、小写字母、数字以及特殊字符;
2.至少包含其中三项(大写字母、小写字母、数字以及特殊字符),长度为8~32个字符;
3.支持的特殊字符有(!)、(@)、(#)、($)、(%)、(^)、(&)、(*)、(())、(_)、(+)、(-)、(=)。 - 数据库连接配置文件中帐户凭据等重要配置需以加密形式存储;
参考链接:
Spring 配置数据库用户名密码加密
https://blog.csdn.net/tanggao1314/article/details/83302593 - 禁止在源代码包括注释中记录数据库连接的帐号和密码;
- 设置IP白名单,只允许白名单内的IP与数据库建立连接;
- 使用安全的数据库版本,含漏洞的数据库升级到安全版本;
- 修复系统中所有SQL注入、文件上传、水平权限、垂直权限等漏洞;
- 数据库做多地备份,定期更新;
- 权限控制,为数据库使用者设置普通账户,根据实际分配满足需要的最小操作权限,使用普通账户而不是统一使用最高权限账户(sa\root)连接数据库;
Sqlserver: https://blog.csdn.net/weixin_44907813/article/details/90512636
Mysql: https://blog.csdn.net/lu1171901273/article/details/91635417
Oracle: https://docs.oracle.com/cd/E24892_01/html/E23231/chdcfabe.html - 使用强类型的参数化查询方法,Mybaits/ibaits应用使用参数化查询方法(使用#不要使用$);
- 对于不能使用参数化查询的地方,严格过滤用户输入;
- 如果将重要文件存在第三方,例如云服务器,代码托管平台,应该根据第三方自带的安全策略做设置。离开第三方平台时,应注意数据的安全转移,安全销毁在第三方中的留存;
- 如果第三方平台中有日志审计功能,注意审计其中有关文件等数据的异常操作,及时处理安全问题;
- 服务端需具备权限配置功能,且有权限判断机制;
- 服务端需对敏感数据进行访问权限控制;
- 服务端对每个请求URL 进行鉴权,而非仅仅通过客户端的菜单屏蔽或者按钮不可点击来限制;
- 所有的日志操作必须在服务器上进行,并且要保证服务服务器的运行环境安全;
- 不要在日志中保存敏感信息,包括:不必要的系统详细信息、会话ID或密码;
- 日志记录中写入的信息应当是服务端获取的,不应该直接使用用户输入的数据如有特殊需求,需要将数据编码或过滤后使用;
- 1.应用程序提供安全审计功能,对用户的注册、登录、关键业务操作等行为进行日志记录;
2. 应用程序对安全审计记录及审计策略设置必要的访问控制,禁止未授权的删除、修改或覆盖等; - 密钥管理系统:
为敏感数据加密提供可使用的密钥;
实现密钥申请、密钥生成、密钥下载、密钥注销等功能,实现SM2、SM3、SM4、RSA、AES等加密算法的密钥生成与维护。