通过前面的文章,已经把用于功能开发的 整体技术架构 搭建好了, 缓存和异步消息架构 也确定好了。
接下来看看系统安全方面的架构设计。
一:威胁分析
首先,需要分析哪些方面有安全威胁?然后才能针对性地做安全方面的架构设计,给出具体的解决方案 。
常见需要分析的有:
1:数据方面
哪些数据属于机密或敏感数据,会面临什么样的威胁?
被纂改、被破坏、非法访问等
2:软件方面
这方面的安全问题会很多,列举几个常见的:
(1)身份伪造:通过纂改数据,来以其它人的身份使用系统
(2)越权操作:通过一些措施,超越系统分配给自己的权限,访问了本来无权访问的资源。
(3)权限滥用:滥用自己的权限,做出破坏系统的行为
(4)抵赖:不承认自己收到的信息或所做的系统操作
(5)泄密:把机密信息泄露给他人,比如:忘记删除调试代码,显示了短信验证码
(6)纂改:非法修改信息,破坏信息系统完整
3:硬件方面
硬件设备故障,比如磁盘坏了,内存坏了之类的。
4:服务方面
络服务故障、
操作系统故障
络安全服务故障
等等
5:管理
这个也是一个不容忽视的方面,虽然系统对此基本无能为力,因为管理方面多半是人为的问题,但要引起大家重视。比如:
(1)操作失误
(2)物理攻击:直接物理接触、物理破坏
6:其它
(1)黑客攻击:利用黑客工具或技术,对系统进行攻击,如:密码猜测攻击、缓冲区溢出攻击、拒绝服务攻击 等等
(2)恶意代码和病毒:这个没啥可说的
(3)物理环境威胁:比如断电、火灾、地震等等
大家会看到,一个系统面临的威胁,来自方方面面,还是比较多的。
其实除了 威胁分析,还需要做 漏洞评估、风险分析等,它们也会影响到安全,只不过跟软件开发的关系不是那么紧密,这里就不去多说了
二:确定整体的安全体系架构
1:确定访问协议
不同的访问协议,会有不同的技术要求和实现,比如我们确定项目中使用访问协议:https
2:考虑防火墙
对于项目整体的安全防护,并不仅仅依靠我们项目本身,这只能实现一部分安全的功能,还需要从整体来架构安全体系。
通常,我们会要求:所有的请求先要通过防火墙,才能进入 关和后台服务,并构建停火区。
(1)内部 络和外部 络之间的所有 络数据流,都必须经过 络防火墙
(2)防火墙自身应具有非常强的抗攻击免疫力
(3)应用层防火墙具备更细致的防护能力
比如:阿里就有web防火墙
(4)数据库防火墙针对数据库恶意攻击的阻断能力
对于专门的数据库防火墙,一般会有如下这些功能:
虚拟补丁技术:针对CVE公布的数据库漏洞,提供漏洞特征检测技术。
高危访问控制技术:提供对数据库用户的登录、操作行为,提供根据地点、时间、用户、操作类型、对象等特征定义高危访问行为。
SQL注入禁止技术:提供SQL注入特征库。
返回行超标禁止技术:提供对敏感表的返回行数控制。
SQL黑名单技术:提供对非法SQL的语法抽象描述。
3:对于硬件、服务等直接购买成熟的云服务
对要求高的,可以做容灾备份,或是服务双活或多活方案,这些跟软件开发本身相关性不大,这里就不去多说了。
4:软件部分的安全处理
这块比较多,最终要把这些体现到安全架构上来。
(1) 关
数据校验、敏感字符替换、权限校验等等,这也可以有效抵御一部分攻击,比如XSS、CSRF、SQL 注入、脚本注入等等
(2)数据
对于敏感数据:加密存放、加密传输,尽量使用非对称加密,比如RSA256.
内部使用的数据,采用对称加密,也尽量采用SHA256,并加盐的方式。 这样防止被纂改、和 非法访问,对于非法破坏数据,就只能依靠备份来恢复数据了。
另外一个就是对数据库连接地址、端口、用户名和密码的管理,尽量控制在极少的人手里,防止非法访问。
(3) 服务之间
可以限定ip访问,也可以再加入权限验证的功能
(4) 数据自动备份
这个一般是程序调用命令或脚本来实现,这里就不多说了
(5)身份伪造
不能仅仅靠session了,需要token+session,并加密里面的信息,然后到服务端,filter里面,对token和session的数据进行校验
(6)越权操作
url权限控制
关权限控制
业务功能操作前进行权限验证,作为一个前置条件
只要控制住了身份伪造,系统自身设置完善,没有bug的话,越权操作应该可以防止住。
(7)权限滥用
记录业务操作日志,进行业务审计,对于因滥用破坏的数据,人工恢复或是从备份恢复
(8)抵赖
记录业务操作日志,进行业务审计,以系统留痕为准。
(9)泄密:
人为泄密,这个是管理方面的问题。
如果是因为程序导致的泄密,要加强测试,并制定代码发布规范和代码审查规范,防止出现泄密情况
(10)纂改
如果是通过系统进行的,要加强管理和审计,并从备份中进行恢复。
如果是直接操作数据库的,要加强数据库帐 密码等的管理,防止非法访问。
(11)验证码
对于一些敏感的人为操作,需要验证码来再次确认操作人身份,比如:登录、修改敏感信息、跟财务相关的操作啊等等
(12)DDoS 防范
主要是靠防火墙来处理,但应用里面也需要做一些功能性的处理,比如:记录统一客户端的每秒访问次数、或同一ip的每秒访问次数、或者是某个业务功能的错误次数(比如登录密码错误)、或者是对同一个接口的每秒访问次数等等,对于超过一定标准的,直接返回,不予处理。
(13)考虑使用跳板机或者是vpn接入
这个对于后台管理端,主要是内部工作人员处理的部分,可以考虑使用跳板机、或者是vpn接入,这样能进一步提高应用的安全性。
当然还有更多涉及安全方面的内容,像硬件、服务、管理等方面的内容,由于跟软件本身关联不是很大,这里就不去细讲了。
有关于安全架构设计需要考虑的问题,我们就先聊到这里。
如果你觉得本系列文章还不错,能够给你一些启发和思考的话,请关注、点赞、收藏加转发,让更多的朋友加入到我们的行列,谢谢啦!
更多架构师之路干货文章,已在路上,稍后就到!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!