Web 安全是互联网中不可或缺的一个领域,这个领域中诞生了大量的黑帽子与白帽子,他们都是安全领域的王者,在平时里,他们利用各种巧妙的技术互相博弈,时不时就会掀起一场 Web 安全浪潮,真可谓神仙打架,各显神通。
本文从一个吃瓜群众的角度,聊一聊 Web 安全的一些有趣故事。
- 安全世界观
- 安全攻防案例
- 总结与思考/
安全世界观
在互联网发展之初,IE 浏览器垄断的时期,大家上网的目的都很单纯,主要通过浏览器分享信息,获取新闻。但随着互联网的不断发展发展,一个网页能做的事情越来越多,除了看新闻,我们还可以看视频、玩游戏、购物、聊天等,这些功能都大大丰富了我们的生活。
随着网页功能的逐渐增多,就开始出现了一些黑帽子,他们试图通过一些技术手段来牟取利益。在我小的时候,印象最深的就是木马病毒,它可以监控你的键盘,将你在键盘上敲打的内容发送到黑客的机器上,黑客通过分析这些内容,很容易就能得到你的游戏账号和密码。
在这之后,就诞生出了一些杀毒软件,致力于解决网络上的各种病毒,随着不断地发展,杀毒软件已经成为一台电脑必不可少的软件。
为什么会出现这样的安全问题?
安全归根到底是信任的问题,如果所有人都按照正常的流程去上网,不去谋取私利,也就没有安全问题可谈了。
安全的根本在于信任,但要让所有人互相信任谈何容易。在当前阶段,我们可以做到:持续做好安全防护,让漏洞越来越少,非法攻击越来越困难,这样就能逐渐减少黑帽子的数量,让病毒制造者越来越少。
如何做好安全
要做好安全,首先得理解安全问题的属性,前人通过无数实践,最后将安全的属性总结为安全三要素,分别为:机密性、完整性、可用性。
- 机密性
- 保护数据内容不被泄露。
- 通常使用加密的方法。
- 完整性
- 保护数据内容是完整的、没有被篡改。
- 通常使用数字签名的方法。
- 可用性
- 数据随时都能够使用。
- 通常是在防御 DOS。
有了安全 3 要素之后,我们就可以对安全问题进行评估了。
- 资产等级划分
- 找出最重要的数据。
- 找出最重要数据的宿主空间,如:在数据库里,那么数据库就得重点防御。
- 找出数据库的宿主空间,如:在一台服务器上,那么这台服务器就得做次等防御。
- 找出服务器的宿主空间,如:在 OSI 网络层级上,那么在网络层面就得做一般防御。
- 威胁分析
- 找出威胁(可能造成危害的来源)。
- 找出风险(可能出现的损失叫做风险)。
- 风险分析
- 采取多标准决策分析,即:风险 = 威胁等级 * 威胁可行性。
- 计算所有的威胁,将最终的风险进行排序,优先解决风险大的问题。
- 确认解决方案
- 找出不安全的实现方式,并确定解决方案。
- 解决方案不要改变商业需求的初衷。
- 解决方案需对用户透明,不要改变用户的习惯。
做好安全评估之后,我们就有了一份安全解决方案,后续的安全工作只需按照这个方案去做,就没有任何问题。
安全的原则
有了安全解决方案之后,我们还可以制定一些安全原则,遵守原则做事,可以让我们事半功倍。
- 黑名单、白名单原则
- 白名单方案指的是给安全的资源授权。
- 黑名单方案指的是禁用不安全的资源。
- 我们应该优先使用白名单方案,因为黑名单通常统计不完所有的不安全资源。
- 如:XSS 攻击的方式非常多,可以通过 script、css、image 标签等,尽管你将这些标签都加入黑名单,也不能保证其他的标签都没有 XSS 的攻击隐患。
- 最小权限原则
- 只授予必要的权限,不要过度授权,减少出错机会。
- 如:普通权限的 Linux 用户只能操作
~
文件夹下的目录,如果有人想删库跑路,在执行rm -rf /
时,就会提示无权限。
- 纵深防御原则
- 这条原则类似
木桶理论
,安全水平往往取决于最短的那块板。 - 即:不要留下短板,黑帽子们往往可以利用短板为突破口,挖掘更大的漏洞。
- 这条原则类似
- 数据与代码分离原则
- 当用户数据被当成代码执行时,混淆了数据和代码的边界,从而导致安全问题。
- 如:XSS 就是利用这一点去攻击的。
- 不可预测性原则
- 这条原则是为了提高攻击门槛,有效防止基于篡改、伪造的攻击。
- 如:数据库中使用 uuid 代替 number 型的自增主键,可以避免 id 被攻击者猜到,从而进行批量操作。
- token 也是利用不可预测性,攻击者无法构造 token 也就无法进行攻击。
有了这些安全原则&#x