大家好,欢迎来到停止重构的频道。
本期我们讨论网站系统的安全性。
安全的重要性不言而喻,大部分安全问题确实是安全扫描后根据指引修改就可以了。
但是仍有一些问题修改起来是特别麻烦的,这些问题会严重影响上线时间。
本期我们的重点不在于罗列所有的安全问题,而是重点讨论哪些安全问题必须在开发阶段就解决的,让项目上线或交付更加顺滑。
我们按这样的顺序讨论 :
网站系统怎么才算是安全的
网络安全
环境安全
系统安全
其他
网站系统怎么才算是安全的,有很多提供安全测试服务的公司,它们会做渗透测试、安全扫描等工作,并出具安全评分报告。
只要评分及格,就算是安全的。
当然,这些安全报告会有各自的标准,但国内项目的话,一般采用等保(信息安全等级保护)的标准。
一般达到三级或以上要求就可以了,很多项目也是以等保三级作为安全性的验收标准,如果对安全测试没有概念的小伙伴,可以看一下等保三级的提纲。
安全问题虽然很庞杂,但实际上也就是网络、环境、系统这三大类。
首先是网络安全。
一般大型网站都需要做网络区域隔离,为了防止攻击者直接操控服务器。
需要把系统应用、数据都放在不通公网的隔离区。
请求都需要通过统一的网关程序才能反向代理进网络隔离区。
对于系统调用公网第三方服务的问题,则需要额外增加对外代理作为调用总出口。
对外代理的话,可以使用Nginx的四层代理,一个端口对应一个第三方服务,虽然七层代理可以一个端口对应所有的https请求,但是实际应用下来不太稳定。
网络安全另外一个比较重要的点是https。
对于https,其实并不复杂,不需要整个网站的各个服务都换成https,只需要保证网关那一层配置https即可,系统内部的调用仍然使用http。
当然其他网络安全问题也十分重要,如调用白名单等,但总的来说就是一开始是限制网络调用的,根据功能的扩展,逐步增加网络策略即可。
网络安全的相关问题会一定程度上阻碍发布、调试难度,所以一般只对生产环境部署就可以了。
但是这一套网络环境的部署最好在项目初期就考虑搭建,因为项目后期再弄的话可能来不及,毕竟实际问题会很多。
接下来是环境安全。
环境安全指的是操作系统、基础软件的安全,如系统版本、系统漏洞修复、基础软件漏洞修复、密码安全等。
当然,大部分的环境安全问题根据安全扫描结果整改就可以了。
但是有一点是需要关注的,对于基础软件版本,如MySQL等。最好在一开始调研清楚将要使用的软件版本有没有安全问题,或者该版本是否允许使用,不要等到被安全扫描的时候才发现该版本不能使用。
虽然基础软件的升降级是很简单的,但是版本之间的功能是存在差别的,那么就可能存在基础软件升降级后一些业务功能不可用的情况,而重新测试会浪费很多成本。
最后是系统安全,系统安全是我们开发的软件的安全问题。
这些问题一般都需要在开发阶段就处理好的,不然这些问题的整改可能是灾难性的。
系统安全比较重点的问题有几点:一是接口权限;二是SQL盲注;三是敏感信息加密;四是日志。
接口鉴权是比较容易忽略的,比如用户登录检查、用户角色权限检查等。
其中需要特别说明的是,如果涉及到用户id、用户权限、用户信息的参数,最好是通过session信息强制获取覆盖,不然鉴权会沦为摆设。
接口鉴权不要想着后面再追加,在开发的时候就需要做好。
因为后期对几百几千个接口一次性加追加权限的话,是一个特别蠢的事情,对于接口权限问题,我们会在后续的《单点登录系统架构设计》中详细讨论。
另外是SQL盲注,SQL盲注一般采用MyBatis等数据库操作框架就能解决的。
SQL盲注的基础原理是通过传入单引号(‘)扩展既定的SQL语句,以实现获取或修改原定功能以外信息,
比如:检查账号密码的SQL语句是这样的,如果没有防止SQL盲注,当用户在密码中输入带单引号的字符串,则可以绕过密码校验。
三是敏感信息加密,一些敏感信息是需要加密的,如密码、某些身份信息等。
这些信息在数据库中存储的是加密后的信息,为了防止即使数据泄漏,不知道具体加密/解密算法的话,这些数据也没有意义。
四是日志,日志在很多问题上我们都是重点提及的,因为日志确实非常重要。
在开发调试时,可以初步定位问题,在运营问题上,也可以判断是否发生过用户所描述的操作,在本期的安全问题上,就可以通过日志分析信息盗取、篡改的手段。
关于日志的详细规则,可以参考往期《后端规整化》。
除了以上提到的安全点,可能还需要考虑一些防止洪水攻击、熔断等安全机制,但其实这些问题基本上接入安全堡垒机WAF就可以解决了。
安全堡垒机的作用是监控请求,如果是非法请求,则拦截,至于非法请求的界定策略,一般是可以配置的。
如果条件允许的话,安全堡垒机的接入最好不要等到上线前再接入。
因为安全堡垒机可能会对某个业务请求误判,这些接口都需要进行特殊处理的,如果在开发阶段就发现的话,则不会在上线前临时多处很多问题。
以上提到的安全问题只是较为通用的问题,根据具体的业务系统,可能会有特殊的安全问题,如直播平台会有直播流防盗等问题,这些问题最好也在开发阶段考虑。
安全性是网站系统整体架构的最后一个问题,截止到本期,我们已经把大型网站架构的所有关键问题都已经讨论完毕。
接下来,我们会介绍一些具体系统的架构设计过程,部分产品也会同步推出,敬请期待。