65.9K
CodeProject 正在变化。 阅读更多。
Home

开发者需要掌握的 10 个安全概念

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.38/5 (17投票s)

2018年7月3日

CPOL

7分钟阅读

viewsIcon

13085

众所周知,要理解复杂的事物,我们需要将其分解成更小的部分。如果你想理解复杂的安全系统,首先需要牢固掌握基本安全概念,所以让我们从头开始……

“你选择蓝色药丸——故事就此结束,你会在床上醒来,相信任何你想相信的东西。你选择 红色 药丸——你留在仙境,我会告诉你兔子洞有多深。记住:我提供的一切都是真相。仅此而已。”
墨菲斯

从我成为一名职业开发者开始,我就开始创建代码来处理应用程序中的身份验证和授权。那时生活多么简单!用户名和密码仅限于五个字母字符,显示器只有琥珀色和黑色,网络上的计算机只有一台:大型机。数据中心受到严格限制,互联网根本不存在。

尽管我们今天使用的一些安全概念是最近才出现的,但大多数可以追溯到很久以前。人们一直有采取措施来防范攻击和犯罪的需要。古代人通过保护自己和群体免受动物、天气或其他敌对群体的侵害而生存。宝贵的资源必须得到保护,秘密必须得到安全保管。

然而,当我们阅读一本关于应用程序安全的现代技术文章时,一切似乎都如此复杂,以至于我们有时会想:“我永远也搞不懂。我需要成为一名火箭科学家才能理解这一切是如何协同工作的!”现代安全系统是用许多层复杂的软件构建的,涉及许多概念和技术,这让开发者的思绪混乱,并造成了很多挫败感。

众所周知,要理解复杂的事物,我们需要将其分解成更小的部分。如果你想理解复杂的安全系统,首先需要牢固掌握 基本安全概念,所以让我们从头开始。

1 资源

如果存在安全需求,就一定有需要保护的东西。这个“东西”就是我们所说的资源。它可以是你家的内部、你银行账户里的钱、你私人日记里的信息,甚至是数字化的东西,比如你手机里的照片,或者你的 Facebook 密码。

2 主体

如果存在需要保护的“东西”,即资源,那么很有可能有人试图获取它。这个人就叫做主体。例如,当你一天辛勤工作后回到家,你想要进入你住所的内部。你住所的内部是一个资源。你就是主体。在计算机系统中,主体可以有很多名字,比如用户或客户端,但这里重要的是你理解这个概念。如果有人告诉你“JavaScript 客户端库向 Ajax 发送请求以获取访问令牌”,而你 somehow 理解了那些胡言乱语,那么重要的是,在你心中,你可以将其简化为:主体正在尝试访问资源,仅此而已。

3 身份和凭证

当主体尝试访问资源时,我们的“安全系统”需要做的第一件事是验证主体是否是他/她(或它)声称的那个人:检查主体的身份。为了验证身份,主体将提供凭证。在现实世界中,可以是徽章或照片身份证。在数字世界中,通常是用户 ID 和密码,但不一定。

4 身份验证

如果你的安全系统是你前门的锁,那么它验证主体身份的方式是通过确认他/她/它拥有正确的钥匙来打开锁。有三个可能的因素用于验证主体:主体拥有某物,或知道某物,或仅仅是某物可以被识别并允许正面识别。如果你的安全系统是你的狗,它会通过识别你来授予你访问权限:你的图像、你的气味、你的声音等。而锁只会要求你拥有一件东西:钥匙。当需要不止一个因素时,我们称之为多因素身份验证:假设你有一个锁和一条狗,所以你需要一把钥匙,并且你必须是你本人。

5 声明

因为主体声称拥有已知的身份,所以由主体提供的一切信息通常也称为声明。有时,在计算机系统中,声明也用来指代应用程序了解的关于主体的一切信息。

6 权限

到目前为止一切顺利,你回到家,有钥匙,你的狗也没有忘记你是谁。你已被授予对你住所内部这个美妙资源的完全访问权。谁授予的?你的安全系统:锁和狗。好吧,这个非常简单的安全系统假设你可以对资源做任何事情。完全访问,因为你是所有者。你可以使用你住所里的物品,甚至可以随身携带它们。做任何事情,或完全访问,就是你相对于资源的权限。

7 角色

你拥有这些权限是因为,对于安全系统来说,你扮演着“所有者”的角色。权限通常与角色相关联,但在某些系统中,它们直接与主体相关联。扮演其他角色的主体可能拥有不同的限制性权限。例如,假设你家里的锁、狗和配偶是你安全系统的组成部分。另一个主体,这次是清洁女工,来到你家。她有一把钥匙,狗和你的配偶都认识并信任她,所以她被授予使用部分资源的权限。她可以进入,可以使用电器和浴室,可以做饭,但不允许过夜或带走物品。这些是未授予“清洁人员”角色的权限,所以你的配偶不会允许这种情况发生。

8 授权

根据固有的权限或角色,授予主体正确权限的过程称为授权。这正是你在 ATM 取款时发生的情况。你想要访问一个资源:你银行账户里的钱。钱和银行账户是资源。你就是主体。 ATM 安全系统要求你插入卡:这是一个身份验证因素,你拥有的东西。然后它会要求你在键盘上输入你的账户个人识别号码 (PIN)。这是另一个身份验证因素,你已知晓的东西。如果系统识别出卡和 PIN 是你的账户 PIN,你就被首先认证,然后授权:ATM 系统授予你“ATM 用户”角色的权限。然后系统会检查你针对该角色和该资源的所有权限,然后在屏幕上显示一个选项列表。如果你有权取款,它会显示该选项。

9 威胁

我们最好面对现实。如果我们需要安全,那是因为存在威胁。如果我们的资源不可能发生任何坏事,那么就没有必要在这篇文章中解释这些概念了。威胁正是这些可能发生的坏事。我们的财产可能被盗,我们的家园被毁,我们的生命被夺走。任何危险都是安全威胁,无论是有意、意外还是自然发生的。在网络世界中,我们尝试将这些威胁分为六类:欺骗、篡改、否认、信息泄露(或数据泄露)、拒绝服务(DoS)和权限提升。你可以使用首字母缩写 STRIDE 来记住它们,但这个网络威胁分类本身足够充实,可以作为另一篇文章的主题。

10 漏洞

漏洞是指可以被利用的弱点。在计算机系统中,存在许多不同类别的漏洞:硬件、软件、网络、人员、物理访问、组织等。实际上漏洞太多了,以至于我将一次只介绍几个,分多篇文章讲解,以免从一开始就吓跑你。一点一点地,我们可以学会修复大多数问题,但要做到这一点,你必须选择红色药丸,睁开眼睛看看我们的系统有多脆弱这一严酷而冰冷的现实。

© . All rights reserved.