应用程序编程接口(API)是一种允许应用程序相互通信的方式。它为开发人员提供了一种构建软件应用程序的方法,同时允许以可访问的方式提取和共享数据。
由于API被广泛用于转换可能敏感的信息,因此API可用于促进网络攻击。弱验证,漏洞,缺乏加密,逻辑缺陷和不安全的端点等漏洞使API容易受到攻击。
由于实施API时缺乏安全措施,通常会发生的一些主要攻击是:
中间人(MITM)
为了获得敏感信息,入侵者通过中继和拦截包含API交换的通信来拦截通信方之间的流量。
API注入(XSS和SQLi)
在代码注入攻击中,恶意代码被插入易受攻击的软件程序中,以进行攻击,例如跨站点脚本(XSS)和SQL注入(SQLi)。
犯罪者可以将恶意脚本注入易受攻击的API,即无法执行适当的过滤器输入和逸出输出(FIEO)的恶意脚本,从而针对最终用户的浏览器发起XSS攻击。而且,恶意代码被插入到API消息中,例如,从数据库中删除对象,记录的命令。
分布式拒绝服务(DDoS)
在分布式拒绝服务(DDoS)攻击中,多个系统会淹没目标系统(通常是Web服务器)的带宽。对API的DDoS攻击试图通过并发连接淹没它,或通过在每个请求中发送/请求大量信息来淹没其内存和容量。 2017年初,FCC网站上的DDoS攻击使用商业云服务向评论系统发出大量API请求。这消耗了可用的机器资源,排挤了人工评论者,最终导致网站崩溃。
DNS劫持
域名服务器(DNS)劫持也称为DNS重定向是一种攻击,其中DNS查询被意外重定向到恶意站点。
DNS劫持的一个例子是,当您在Internet上并且要访问的网站将您重定向到一个充满了不需要的弹出窗口和广告的恶意网站时。其背后的主要动机是产生收入。
DNS劫持也可用于网络钓鱼—在网络钓鱼中,受害者是攻击目标,攻击者试图诱使他们泄露敏感信息,例如其付款凭证。我们在网上诱骗中看到的最常见的情况是发送电子邮件作为诱饵,将用户定向到一个似乎是合法付款处理网站的网站,然后从那里窃取他们的信息。
快速修复如何保护我们的API
HTTPS上的HTTPS
传输层安全性(TLS)是一种使Internet连接保持私有状态并检查两个系统之间发送的数据是否已加密和未修改的标准。如果网址开头为,则表示网站受TLS保护“HTTPS”(安全的超文本传输协议)。
基于API的交互中的TLS是必不可少的。传输层加密是保护API的“必备条件”之一。如果没有TLS,则“中间人”攻击的风险仍然很高。我们在API中同时使用两个TLS,尤其是在使用API公开时。我们严格通过HTTP使用HTTPS。
认证方式
要确定API中最终用户(调用者)的身份,可以使用TLS协议实现基本身份验证。但是,OAuth 2和OpenID Connect是更安全的选择。
永远不要在URL上公开信息
切勿在网址中公开任何敏感或易受攻击的信息
输入参数验证
在到达实际服务处理业务逻辑之前,首先要验证请求参数。我们会进行严格的验证检查,如果验证失败,则会立即拒绝该请求。
加密
强烈建议在通过API转换时对敏感和私人信息使用强加密。
我们使用强大而轻巧的加密算法– AES256
AES256:
高级加密标准(AES)是美国国家安全局(NSA)批准的第一个也是唯一一个可公开访问的密码,用于保护绝密信息。
迄今为止,几乎没有报道过针对256 AES实现的攻击。它们大多数是边信道攻击(攻击是在系统上实施密码而不是对底层密码本身进行的)。可以相信,密钥长度的设计和强度可以保护AES算法,而256位密钥长度对于绝密信息是理想的选择。在数据安全方面,没有人愿意妥协,而AES-256是当今市场上最安全的数据加密方法之一。
密钥交换算法
采用 强密钥交换算法 交换身份验证或加密密钥。应采用硬编码或静态机密。
对于秘密密钥交换,我们使用最强大的公共密钥交换方法,称为Diffie Hellman安全密钥交换。
Diffie Hellman安全的密钥交换:
Diffie-Hellman密钥交换非常复杂。它使用非常大的数字和大量的数学运算。 Diffie-Hellman密钥交换依赖于单向功能作为其安全性的基础。这些计算很简单并且是单向的,但是以相反的方式很难计算。
Diffie-Hellman的一些优点:
- 发送者和接收者不需要彼此的任何先验知识。
- 一旦交换了密钥,就可以通过不安全的通道安全地进行数据通信。
- 共享密钥是安全的。
基于令牌的身份验证
基于令牌的身份验证的优势在于,它消除了弱登录凭据的机会。令牌是一种高度安全的数据,用于以紧凑且独立的方式在两方之间传输敏感信息。令牌通常用于加强身份验证过程,无论是在网站还是在应用程序中。
我们使用基于JWT令牌的通信,该通信包括:
- 标头,用于定义令牌和使用的算法的类型。
- 包含有关用户和其他元数据的信息的有效负载。
- 验证发件人身份和消息真实性的签名。
网址
网址不会公开任何敏感信息,因为我们避免使用查询参数,并且不会通过网址公开任何信息。
输入参数验证
在执行业务逻辑之前的最初阶段,我们就具有强大的输入参数验证功能,并且我们拒绝所有潜在的无效请求。
安全与性能
如今,性能已成为一项功能,安全性已成为基本要素,因此在不损害彼此的前提下实现两者至关重要。为了在不影响性能的情况下满足这一安全要求,可以选择一种具有高安全性措施的轻量级实施策略。
由Prafulla Prakash Ranadive合着
没意见