系统安全需要考虑哪些方面的东东?
网络安全
传输加密
为防止网络传输过程中敏感信息泄露,我们要对传输的内容进行加密,比如web访问,尽可能使用HTTPS的形式。
网络隔离
对于防止不明入侵,最直接的手段就是网络隔离。主要体现在如下几个方面:
不公开服务的机器,不分配外网 IP
办公网络和生产网络相互不可以直接通信
使用网关
使用容器
认证安全
接口签名
对外部请求要保持谨慎态度,包括请求的来源,请求的数据,都要进行谨慎的处理。只有通过接口签名验证的请求,才信任为合法的请求。
登录鉴权
不允许外部用户直接登录/访问内网,常见的手段:
登录页面/登录接口应当防刷,防暴破。
应当具备随机登录因子,比如 token、短信验证码,降低密码泄露的后果影响。
多次登录尝试失败之后,应当锁定账户或 IP,不再允许登录。
采用增强的密码管理策略,如拒绝弱密码、密码最小长度要求、字符集要求、定期更改密码要求等等。
登录态管理
对于登录态的管理,需要注意几个方面:
尽可能的使用无状态登录
登录态应当独立存储
存储登录态的中间件要配置密码,并对客户端进行IP限制
运维安全
非必要日常的操作尽可能不登录服务器进行,若要登录也尽可能的利用权限低的用户去操作。应用的部署也尽可能的部署在容器内,或者使用低权限用户去部署。
对于各中间件及服务器的账户,要严密管控,严格权限区分。
对于高危命令应该限制操作的范围或者禁止使用,或者进行别名配置。
数据安全
数据的安全是重中之重,以上所有的措施其根本也都是为了保证数据的安全。同时,对于数据本身,我们还有一些可以做的事情。
容器隔离
容器化部署时,我们往往会挂载外部目录到容器中。此时我们应当确保:
尽可能使用稳定、可靠的云存储,避免单机故障
同一个挂载目录不应当跨容器共享,而应当由单个容器独占
租户隔离
随着 SaaS 化系统越来越多,我们也采用了更多的多租户设计。在系统交互、数据读写方面,务必强要求区分租户。不得因为租户信息被泄露,导致跨租户的其他数据被泄露,必须严控影响面。
离线票据
跨系统交互时,我们可能会涉及到一些敏感票据,比如 app_key/app_secret、pub_key/private_key 等。其中往往 app_key、pub_key 是公开的,允许通过请求传递,而 app_secret、private_key 是需要严格保密的,不得直接通过请求传递。对于这些需要严格保密的敏感票据,应当通过线下、脱离于当前系统的方式进行传递,如打印并邮寄,如单独的、人工的邮件等等。
日志脱敏
日志的敏感性是很容易被忽略的。可能我们花了很大的力气做了系统安全加固,缺忘记了日志里往往也存在大量的敏感信息,导致信息通过日志被泄露了。那么在开发时,我们需要时刻注意日志内容,不应当有敏感信息。在日志传输和存储时,也应当对日志内容进行脱敏。
数据备份
和日志一样,数据的备份文件也是容易被忽视的地方,我们应当花足够大的精力来保证备份文件不被窃取。
必要的审计
操作审计
记录用户的操作对象和操作历史。
权限审计
对权限的分配和变更,做严格的控制和记录,避免授予的权限不必要的扩大。同时对于已经失效的用户,应当即使回收权限。
数据审计
对关键数据的读、写,都应当有权限和审批流程进行控制。实际的示例比如 HRC 和 TOF 中,对员工信息的读取,是需要进行权限申请和审批的。
敏感词审计
应当接入或建立敏感词库,对于 UGC 内容,务必确保拦截和过滤敏感词,以避免不合规的内容展示到系统中,导致政策和舆论风险。