如何保护你的API?
如今正值数字经济蓬勃发展的时代,大量数据通过API传输。 商业、游戏、教育、天气、科学、艺术,几乎所有领域都离不开API。然而,在这个高度依赖API的世界中,人们对安全性的关注却相对较少。
对于开发者而言,他们可能认为框架的默认设置足够安全;更糟糕的是,在没有使用任何框架的情况下,他们还自以为遵循了安全实践。对于系统管理员,他们依赖于基础设施或服务提供商提供的默认安全措施。
在我看来,这实在不是一个令人乐观的现象。
来源:developer.ibm.com
毋庸置疑,API安全风险无处不在,但往往只有当真正可怕的事情发生时,我们才会意识到其严重性。
但首先,我们需要了解一些基本概念。🙂
为什么要保护API端点?
这应该是不言而喻的吧?
我们需要保护API端点,因为它关乎业务的成败。
这本身就是一个强有力的理由,但我希望更深入地探讨这个问题,并强调其他相关但同样致命的后果。
业务损失📉
这是显而易见的。如果有人成功破坏了你的API端点,整个业务运转都会戛然而止。安全漏洞的恢复可能需要很长时间,这在商业上等同于自杀。虽然大多数企业可能可以承受一两个小时的停机时间,但对于某些企业来说,这是绝对不允许的。
想象一下,货币兑换服务中断几分钟会造成什么后果!
合规问题
不当保护你的API可能会给你带来严重的麻烦,具体取决于你所处的地理位置或行业。 例如,如果你为银行业提供服务(尤其是在欧盟),被发现使用不安全的API服务将导致大量的法律和合规问题,甚至可能导致业务关停。
声誉损失
遭受黑客攻击本身就很糟糕,但如果被媒体曝光,你的品牌形象将受到无法挽回的损害。 比如,索尼现在已被多次黑客攻击,在安全界,这家公司已经成为了一个笑柄。
即使没有发生实际的数据或金钱损失,也很难重新获得客户的信任。🙂
基础设施费用膨胀💰
当你的API在基础设施上运行时,它会消耗资源(主要是带宽、CPU和内存)。如果API没有得到适当的保护,恶意用户可以通过大量无意义的操作(例如,运行繁重的数据库查询)来攻击你的API,从而导致账单大幅增加。
在启用自动扩展资源的平台上(如AWS),结果可能令人震惊。 (题外话,如果你在AWS上遇到这种情况,他们通常会非常理解并立即取消膨胀的账单——至少在撰写本文时是这样!)
团队士气
你可能会认为,导致安全漏洞的团队会因此士气低落。 然而,不一定如此。 安全漏洞可能是由于基础设施安全薄弱造成的,这也会让开发人员感到沮丧,反之亦然。
如果这种情况持续下去,你将会面临不良的企业文化,并为此付出代价。
竞争对手的收益
假设发生了安全漏洞,但没有实际的损失。 你的竞争对手会利用这个机会来宣传他们自己的API,并声称他们的API有多么安全(即使并非如此!)。 你会发现很难说服市场相信你的产品。🙂
总而言之,安全漏洞的后果不仅仅是经济损失。
保护API端点的最佳实践
值得庆幸的是,你可以采用一些易于实施和理解的方法来保护你的API端点。以下是大多数安全专家的建议:
HTTPS 始终是首选🔒
如果你的API端点允许API使用者通过http或其他不安全的协议进行通信,那么你将他们置于巨大的风险之中。密码、密钥和信用卡信息很容易被中间人攻击窃取,或者被数据包嗅探器以纯文本形式读取。
因此,务必将https作为唯一可用的选项。无论端点看起来多么微不足道,都不应该允许通过http连接。 TLS证书的价格不高; 你可以从SSL 商店购买,价格低至20美元。
单向密码哈希
密码绝不能以纯文本形式存储,因为一旦发生安全漏洞,所有用户账户都会面临风险。 同时,应该严格避免对称加密,因为任何足够聪明和坚持的攻击者都可能破解它们。
唯一推荐的选项是使用非对称(或“单向”)加密算法来存储密码。 这样一来,攻击者、公司内的任何开发人员或系统管理员都无法读取客户的密码。
强大的身份验证💪
现在,几乎每个API都有一种身份验证形式,但在我看来,OAuth2系统效果最好。 与其他身份验证方法不同,它将你的账户划分为资源,并且仅允许对持有身份验证令牌的用户进行有限访问。
同时,另一个很好的做法是将令牌设置为每24小时过期一次,以便它们需要刷新。 这样,即使你的令牌被泄露,24小时的过期时间也有可能降低泄露的影响。
应用速率限制
除非你的API每分钟被数百万人使用,否则最好限制客户端在给定时间窗口内可以对API进行的调用次数。
这主要是为了阻止机器人,它们每秒会不断发送数百个并发请求,从而使你的API无故消耗系统资源。 所有Web开发框架都带有速率限制中间件(如果没有,通过库添加它也相当容易),设置只需一分钟左右。
验证输入
这听起来很简单,但你会惊讶于有多少API存在这个问题。 验证输入不仅意味着检查输入数据的格式是否正确,还意味着不会出现意外。 一个简单的例子是SQL注入,如果你让查询字符串未经检查地通过,它可能会破坏你的数据库。
另一个例子是验证POST请求的大小,并向客户端返回正确的错误代码和消息。试图接受和解析过大的输入只会导致API崩溃。
强制IP地址过滤(如果适用)
如果你从事B2B服务,并且你的API被企业从固定位置使用,请考虑添加额外的安全层,以限制可以访问你API的IP地址。 对于每个新位置和新客户端,都需要根据传入的请求检查IP地址。
是的,这会给入职带来麻烦,但最终的结果是比其他方式更强的安全性。
增强API保护的工具
是否有工具可以帮助我们扫描漏洞,甚至更好地提供保护API的第一道防线?
幸运的是,答案是肯定的。 你可以使用多种工具,但请注意,归根结底,没有完美的安策略。 尽管如此,这些工具可以将你的API安全性提高很多倍,因此非常值得推荐。
Metasploit是一个非常流行的开源框架,用于对Web应用程序和API进行渗透测试。 它可以根据几个不同的参数扫描你的API,并对存在的不同级别的漏洞进行详尽的安全审计。
例如,Metasploit进行的安全扫描可以告诉你你的API签名是否泄露了底层技术和操作系统;隐藏这一点通常是API安全成功的一半。
虽然开源的核心框架通常就足够了,但在Metasploit之上构建的优秀付费产品也值得考虑。 如果你需要高级支持并且将深入使用该框架,专业版是不错的选择,但如果你的团队有足够的经验,通常没有必要。
AppTrana
AppTrana的专用API保护功能提供了一个全面的、基于风险的解决方案,以防止各种API威胁,包括OWASP API Top 10、基于API的DDoS和机器人攻击、嵌入式威胁、数据泄露等。通过持续的漏洞扫描和渗透测试,它会持续监控你的风险评分,以加强安全态势。
AppTrana的API保护结合了风险检测、API威胁检测、API主动安全策略、API特定的DDoS策略、API特定机器人模块和API发现功能,确保提供最全面的解决方案。
它的API发现功能确保对API调用(包括未记录和影子API)的完全可见性,以了解你的API攻击面。这种专用的API保护收集有关用户详细信息、API使用行为、威胁活动、API调用图等信息,并通过实时分析展示保护状态。
使用Indusface AppTrana,你可以生成定制的、API特定的策略,以实时阻止以API为中心的滥用行为。
Cloudflare
不仅仅是CDN,Cloudflare还提供大量安全功能,例如WAF、速率限制、DDoS保护,这对于保护你的API免受在线威胁至关重要。
Invicti
Invicti的独特卖点是“基于证据的扫描”。 简单来说,不规则的网络状况或一些鲜为人知的API行为通常会被误解为安全漏洞,但后来发现是误报。
这会浪费资源,因为报告的所有漏洞都需要手动再次扫描以确认它们不是误报。 Invicti声称,该工具能够为报告提供足够强的概念验证,从而消除对发现的薄弱环节的疑虑。
索尼、Religare、可口可乐、华为等公司都在他们的客户名单上,你可以相信他们做的事情是正确的。🙂
SoapUI 专业版
由SmartBear打造的SoapUI专业版是一种创建API测试并获得准确的数据驱动报告的直观且简单的方法。它还可以与你的CI/CD管道巧妙地集成,确保没有新添加的代码会损害你的API的安全性。
SoapUI可以与Swagger、OAS和其他流行的API标准配合使用,显著缩短了入门时间。 对于微软、思科、万事达卡、甲骨文等客户,该计划的起价为每年659美元,对于更安全的API来说,这是一个有价值的工具。
奥克塔
尝试使用奥克塔,使你的开发人员能够专注于增强用户体验并有效地保护你的企业数据。 它提供专门为移动和Web应用程序设计的OAuth 2.0授权。 它还兼容第三方API管理服务。
使用Okta,可以通过用户友好且专门构建的控制台创建、审核和维护API访问的所有策略,而无需自定义代码。 它为你提供了额外的灵活性,因此你不必使用额外的网关实例来保护你的API。
Okta包含身份驱动的策略,以在一个屋檐下控制不同类型的用户和服务。 根据用户配置文件、网络、组、同意和客户端定义访问权限。使用内部系统中的动态数据扩展令牌,以享受更快的集成和无缝迁移。
它有助于对API进行集中管理,并让你保护API资源。 Okta通过允许你保护不同微服务之间的访问来关注安全性。
结论
市场上有大量的API安全工具可供选择,无论是开源的、免费的还是商业的,或者这些工具的任意组合。
不妨尝试一下列表中的一些工具,看看哪些最适合你的需求。