Web常见漏洞篇——Web 安全之基本原则


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

Web 安全之基本原则

0x01 安全三要素

0x02 安全评估

0x03 资产等级划分

0x04 威胁分析

0x05 风险分析

安全方案

0x06 安全原则

Secure By default原则

纵深防御(Defense in depth)

数据代码分离原则

不可预测性原则(Unpredictable)


 

Web 安全之基本原则


安全的本质是信任问题。

      通过一个安全检查的过程,可以梳理未知的人或物,使其变得可信任。被划分出来的具有不同信任级别的区域,我们成为信任域;划分两个不同信任域之间的边界,我们成为信任边界

      数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;数据从低等级的信任域流向高等级的信任域,则需要经过信任边界的安全检查。

0x01 安全三要素

安全三要素分别是机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)

  • 机密性要求保护数据内容不能泄露,加密是实现机密性的常见手段。
  • 完整性要求保护数据内容是完整的、没有被篡改的。 常见的保证完整性的手段是 数字签名。
  • 可用性要求保护资源是“随需而得”。DoS(Denial of Service)攻击针对的就是安全元素的可用性。

0x02 安全评估

      安全评估可以又以下四个部分组成: 资产等级划分、威胁分析、风险分析、确认解决方案

0x03 资产等级划分

      资产等级划分是所有工作的基础,明确我们目标是什么,要保护什么。

互联网安全的核心问题,是数据安全的问题。

      在这个过程中,我们需要明确我们保护的核心数据是什么,并对数据的安全等级进行划分,来区分出不同数据的重要程度。

      在完成等级划分后,接下来就是划分信任域和信任边界了。在这个阶段,可以根据数据安全等级的不同,划分不同的信任域,不同信任域之间的数据流动必须经过安全边界的检查。

0x04 威胁分析

      在安全领域,我们把可能造成危害的来源成为威胁(Threat),把可能会出现的损失成为风险(Risk)

      威胁分析就是把所有可能的威胁都找出来。具体怎么找呢? 一般是采用头脑风暴法。当然也有一种比较科学的方法,就是威胁建模。

下面我们来看最早有微软提出的 STRIDE威胁建模。

      STRIDE是由六个字母的首字母缩写,我们分析威胁的时候,可以从以下六个方面考虑:

威胁 定义 应对的安全属性
Spoofing(伪装) 冒充他人身份 认证
Tampering(篡改) 修改数据或代码 完整性
Repudiation(抵赖) 否认做过的事情 不可抵赖性
InformationDisclosure(信息泄露) 机密信息泄露 机密性
Denial of Service(拒绝服务) 拒绝服务 可用性
Elevation of Privilege(提升权限) 未经授权获得许可 授权

      在进行威胁分析的时候,要尽可能的不遗漏威胁。

0x05 风险分析

      影响风险高低的因素,除了造成损失的大小外,还需要考虑发生的可能性。

安全方案

      安全评估的产出物,就是安全方案。安全方案要有一定的针对性,这种针对性是由等级划分、威胁分析、风险分析等阶段的结果给出的。

      安全是为产品的发展和成长保驾护航的,我们不能用“粗暴”的方案去阻碍产品的正常发展。

没有不安全的业务,只有不安全的实现方式。

好的安全方案应该是对用户透明的,尽可能不要改变用户的使用习惯。

好的安全方案应该有以下特点:

  • 有效解决问题
  • 用户体验好
  • 高性能
  • 低耦合
  • 易于扩展和升级。

0x06 安全原则

Secure By default原则

  • 黑名单、白名单

      简单来说,黑名单就是名单上的是被禁止的,不在名单上的都可被信任;白名单正好相反,名单上的可被信任,不在名单上的都不可信任。

      一般情况下,最好是使用白名单,这样的方案虽然有时候会比较麻烦,但不失为一种谨慎的方案。

      白名单也有不太好的地方,前面我们说到“安全问题的本质是信任问题,安全方案也是基于信任来做的”,白名单的策略,是基于白名单可被信任的基础来的,如果白名单容易被篡改,那么这个安全就无从谈起了。

  • 最小权限原则。

      最小权限原则要求系统只授予必要的权限,而不是过度授权。

      这就要去我们认真梳理业务需要的权限,并细分权限。在授权的时候不妨反问下: 这个权限确实是必须的吗?

纵深防御(Defense in depth)

      纵深防御包含两层含义:首先,要在不同的层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间要互相配合,构成一个整体;其次,要做正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的方案。

数据代码分离原则

      这一原则广泛使用 各种由于“注入”引发的问题。

            web安全中,由注入引起的问题比比皆是: XSS、SQL Injection、CRLFInjection,X-Path Injection等

不可预测性原则(Unpredictable)

      前面介绍的几条原则: Secure By Default, 是时刻要牢记的总则;纵深防御, 是要更全面、正确的看待问题;数据和代码分离,是从漏洞成因上看问题; 记下来的 不可预测原则,则是从客服攻击方法的角度看问题。

      不可预测性,就是不让我们数据有规律,从而加大攻击的难度,甚至使得攻击方法失效。

      比如说有的博客会用顺序递增的数字来作为文章的唯一标识,这样的话只有知道一篇文章的id就可以推测出其他文章的id。。

      还有在CSRF防御技术中,通常会使用一个随机的token来防御。

      不可防御性往往需要用到加密算法、随机数算法、哈希算法等。好好使用这条原则,在设计安全方案的时候往往会事半功倍。


虽然我们生活在阴沟里,但依然有人仰望星空!


发布了178 篇原创文章 · 获赞 75 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/God_XiangYu/article/details/103139597
今日推荐