数据的连接很大程度上依赖于 API。我们生活在一个几乎所有事物都相互关联的世界中。对于攻击者来说,连通性开辟了许多新的攻击途径。
设计挑战
考虑安全性并不是事后才想到的。它必须是所有开发项目和 API 的组成部分。该过程涉及收集需求、设计、开发、测试、部署和监控。安全性为系统设计人员带来了诸多挑战。很难构建一个 100% 安全的系统。让攻击者的工作变得更难是你唯一能做的。密码算法就是基于这一理念设计的。
用户体验
在安全性和用户舒适度之间找到并保持适当的平衡是任何安全设计中最具挑战性的方面。
表现
另一个关键标准是性能。保护您的业务运营免受入侵者的侵害需要多少成本?
假设您有一个由密钥保护的 API,并且每个 API 调用都必须进行数字签名。如果密钥被泄露,攻击者可以访问 API。你能做些什么来尽量减少影响?密钥仅在短时间内有效,因此攻击者可以用它做的事情是有限的。对合法的日常业务运营有何影响?
如果密钥的有效期已过,客户端应用程序应调用授权服务器(密钥的颁发者)生成新的密钥。如果生命周期太短,几乎每个 API 调用都需要调用授权服务器来生成新密钥。性能会受到影响,但入侵者获取 API 密钥的风险会大大降低。
另一个很好的例子是使用 TLS 实现传输级安全。传输中的数据受 TLS 保护。您通过安全通信通道或基于 TLS 的 HTTP(实际上是 HTTPS)传递您的 Amazon 或 Flipkart 登录凭据。从浏览器传递到 Web 服务器的数据不能被中间的任何人读取(假设没有中间人攻击的余地)。然而,这是有代价的。在普通 HTTP 之上,TLS 增加了更多的开销,这可能会减慢速度。出于同样的原因,一些企业通过 HTTPS 与公众通信,而通过普通 HTTP 与内部服务器通信。强大的网络级安全性确保这些内部通道都不会被拦截。
最脆弱的联系
适当的安全设计应考虑所有通信链路。一个系统的强度取决于它最薄弱的环节。
纵深防御
每当为了安全而加强系统时,建议采用分层方法。这也称为纵深防御。
中央情报局三合会
信息系统安全由 CIA 三元组(机密性、完整性和可用性)衡量。
- 机密 性——CIA 三合会机密性涉及保护数据免受意外接收者的侵害,无论是在传输过程中还是在静止状态。通过加密传输通道和存储,您可以实现机密性。
- 完整性 ——完整性是指检测任何未经授权的修改以及数据的正确性和可信度的能力。保护数据免遭未经授权或无意的更改、修改或删除。完整性可以通过预防和检测措施来实现。传输中的数据和静态数据必须受到这两种措施的保护。
- 可用性 ——为合法用户提供随时访问系统的权限是系统设计的最终目标。
四个突出的控制在实现 CIA 中起着至关重要的作用:身份验证、授权、不可否认性和审计。
验证
身份验证过程涉及以独特的方式识别用户、系统或事物,以证明它是它所声称的那个。您的身份验证断言可以是直接的,也可以是代理的,具体取决于您使用它们的方式。通过提供您的用户名和密码直接登录系统属于直接身份验证。直接身份验证涉及希望对自身进行身份验证并向服务提供身份验证断言的实体。第三方参与代理身份验证。身份提供者是提供身份服务的第三方。当您通过 Facebook 登录您的帐户时,Facebook 是身份提供者。使用代理身份验证,服务提供商(或您要登录的网站,或您要访问的 API)不会直接信任您。身份提供者是它唯一信任的人。仅当受信任的身份提供者(由服务提供者提供)通过肯定断言时,才可能访问该服务。
可以使用单个因素或多个因素进行身份验证(也称为多因素身份验证)。身份验证的三个因素是众所周知的:您知道什么、您拥有什么以及您是什么。多因素身份验证中至少应使用两个因素。
- 你知道的一些事——密码、口令和 PIN 码
- 你拥有的东西——证书和基于智能卡的身份验证
- Something You Are——指纹、视网膜、面部识别和所有其他基于生物特征的身份验证
授权
授权是验证用户、系统或事物可以在明确定义的边界内执行哪些操作的过程。授权过程假定用户已经过身份验证。两种突出的访问控制模型是自主访问控制 (DAC) 和强制访问控制 (MAC)。
在自主访问控制 (DAC) 中,数据所有者可以自行决定将权利转让给其他用户。大多数操作系统都支持 DAC,包括 Unix、Linux 和 Windows。
在强制访问控制 (MAC) 中,只有指定的用户才能授予权限。用户一旦被授予权利就不能转让。支持 MAC 的操作系统包括 SELinux、Trusted Solaris 和 TrustedBSD。
不可否认性
每当您通过 API 进行业务交易时,您都不应该拒绝或以后否认它。不可否认性确保无法否认。一旦你做了,你就永远拥有它。不可否认性应该以不可伪造的方式确定数据的来源和完整性,以便第三方可以随时验证它们。为了保持交易的完整性并允许未来的验证,交易一旦开始就不应更改任何部分——包括用户身份、日期、时间和交易细节。一旦事务被提交和确认,它就必须保持不变并被记录下来。为防止未经授权的修改,日志必须存档并妥善保护。当出现抵赖纠纷时,可以调取交易日志等日志或数据,核实发起人、日期、时间、
数字签名将用户(发起交易的人)绑定到用户执行的交易。用户的密钥应该签署整个交易,并且服务器(或服务)应该能够通过确认密钥合法性的可信代理来验证签名。证书颁发机构 (CA) 可以充当此可信代理。一旦签名被验证,服务器就知道用户的身份并且可以保证数据的完整性。为确保不可否认性,数据必须安全存储。
审计
审计涉及跟踪合法和非法访问尝试,以促进不可否认性和识别可能的威胁。在某些情况下可以允许访问资源,但应该证明这是合理的。