保护来自应用程序外调用的 api 数据

Zoh*_*oha 2 security api rest token jwt

考虑我们有一个 api 端点(例如:REST)和一个 react web 应用程序来连接它

这就是我为认证和授权所做的

当用户发送登录请求时,我为该用户创建一个令牌(例如:JWT),然后用户可以使用该令牌发送查询或变异请求

在此处输入图片说明

为此,我将令牌保存在 localStorage 或 cookie 中,用户自己可以看到它

对于一个简单的应用程序,它可以,但是?如果我想让用户甚至无法使用此令牌,并且令牌仅在我的 React 应用程序(我的网站)中工作,该怎么办?

例如,如果 john doe 访问了一个网站,并且该网站为他创建了一个令牌,他可以复制此令牌并在第三方应用程序中使用它或创建一个机器人来调用该网站的 API

我想创建一个 api,即使它的用户也不能使用我的应用程序前端的令牌来调用 api

一些应用程序正在这样做,但我不知道如何,例如电报或推特或...

他们从服务器返回的数据是加密的

但是如果我们可以访问他们的网络应用程序的源代码,那么我们应该能够找到他们的加密令牌或方法,但我们不能这样做(我猜),我不知道他们是如何防止这种情况发生的

我读过 RSA,但如果我们在前端保留公钥,这不会有任何区别(对吧?)

那么有什么方法可以做到这一点?(防止调用特定 Web 应用程序的安全 API)

Exa*_*a37 5

简单的应用程序

对于一个简单的应用程序,没关系

这取决于您通过这个简单的应用程序公开的数据,因为例如在欧洲,GDPR 法律对因缺乏安全措施而导致个人身份信息 (PII) 数据泄露情况的任何人都非常严格,并且应用程序的复杂性与法律无关。因此,无论是简单还是复杂的应用程序,如果您正在处理 PII,请务必在您的应用程序中应用所有最佳安全实践。

挑战

但?如果我想让用户甚至无法使用此令牌,并且令牌仅在我的 React 应用程序(我的网站)中工作,该怎么办?

好吧,你给自己买了一个很难解决的问题,这是由于网络构建方式的公共性质,因为在浏览器中你可以按 F12 或检查页面源来获取秘密,获取 cookie,看看是什么存储在本地数据库等。

谁与什么正在访问 API 服务器

例如,如果 john doe 访问了一个网站,并且该网站为他创建了一个令牌,他可以复制此令牌并在第三方应用程序中使用它或创建一个机器人来调用该网站的 API

在我开始解决这个巨大的挑战之前,您必须清楚地了解什么在调用您的 API 服务器之间的区别,为此您可以阅读我写的这篇文章部分,我引用了以下内容:

向 API 服务器发出请求的内容什么。它真的是您的移动应用程序的真实实例,还是机器人、自动化脚本或攻击者使用 Postman 之类的工具手动浏览您的 API 服务器?

是移动应用,我们可以验证,授权和以多种方式确定,比如使用OpenID登录连接或流的oauth2的用户。

如果这句话不够清楚,请花一些时间阅读链接文章中的整个部分。

现在您已经清楚地了解(Joe)和什么(第三方应用程序、Bot、Postman、cURL 等)正在访问您的 API 服务器,您可以开始应用尽可能多的防御层您的数据的法律。

保护 API 服务器

我想创建一个 api,即使它的用户也不能使用我的应用程序前端的令牌来调用 api

就像中世纪的城堡一样,API 防御是分层完成的:

  • 仅使用 HTTPS 保护传输层,您可以使用LetsEncrypt免费完成
  • 添加安全标头,使用工具检查它们,并启用关于它们的报告 uri以实时了解浏览器中发生的违规情况。
  • JWT 加密令牌(JWE)按偏好或至少签名令牌(JWS
  • 使用至少一个开源工具混淆你的 Javascript,例如javascript-obfuscator
  • 使用HMAC对请求进行签名并使用Web Cryptography API来帮助您。
  • 使用来自 Google 的reCAPTCHA V3或来自其他供应商的类似工具。这种类型的 recaptcha 不需要用户交互。
  • API 服务器前面的Web 应用程序防火墙 ( WAF )。
  • 用户行为分析(UBA),将使用人工智能(AI)尝试区分什么

那么有什么方法可以做到这一点?(防止调用特定 Web 应用程序的安全 API)

所以即使你应用了上面列表中的所有安全层,你也不能真正将你的 API 服务器锁定到你的 React 应用程序,但是你确实会让绕过它变得更加困难,就像你已经注意到的那样:

Some of the applications are doing this but I don't know how, for example telegram or twitter or ...
Run Code Online (Sandbox Code Playgroud)

现在你可能会说 WAF 和 UBA 解决方案不在你的口袋范围内,那么我的建议是你至少在你的 API 服务器前面放一个 CDN,因为有些免费提供一些安全好处,但我不得不说它们保护得更好传统的网站,有一个专用的后端,而不是一个 API,但嘿,总比没有好。

所以最终都是为了让你的 API 服务器和 React 应用程序花费更多的时间来破解你的 API 服务器和 React 应用程序,以阻止普通的脚本小子和不那么熟练的黑客,因为他们只是在寻找容易的目标,也就是悬而未决的果实。请记住,熟练的黑客总会找到方法,但这些黑客正在寻找高价值的目标,也就是树顶的果实,即使有梯子也不容易获得;)。

走得更远

如果您想完全充电以保护您的 API 服务器,那么您需要遵循 OWASP 项目:

OWASP API 安全前 10 名

OWASP API 安全项目旨在通过强调不安全 API 中的潜在风险并说明如何减轻这些风险来为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API 安全项目将创建和维护一个前 10 个 API 安全风险文档,以及创建或评估 API 时最佳实践的文档门户。

因此,您要确保您的 API 中没有任何常见的 TOP 10 漏洞。

网络安全测试指南

OWASP Web 安全测试指南包括一个“最佳实践”渗透测试框架,用户可以在他们自己的组织中实施该框架和一个“低级”渗透测试指南,它描述了测试最常见的 Web 应用程序和 Web 服务安全问题的技术。

使用将允许您识别所有攻击媒介并强化您的 API 服务器和 Web 应用程序,使其更难被黑客入侵,但不幸的是永远不可能这样做。

链接参考

让加密

Let's Encrypt 是一个免费、自动化和开放的证书颁发机构 (CA),为公众谋福利。它是由 Internet 安全研究小组 (ISRG) 提供的一项服务。

我们向人们提供他们需要的数字证书,以便以我们能做到的最人性化的方式免费为网站启用 HTTPS (SSL/TLS)。我们这样做是因为我们想要创建一个更安全、更尊重隐私的 Web。

安全标头在线工具

有一些服务可以分析其他站点的 HTTP 响应标头,但我还想为结果添加一个评级系统。该站点分析的 HTTP 响应标头提供了巨大的保护级别,站点部署它们很重要。希望通过提供一种简单的机制来评估它们,以及有关如何部署缺失标头的更多信息,我们可以推动整个网络上基于安全的标头的使用。

报告 URI

我们是尖端网络标准的最佳实时监控平台。我们的经验、专注和曝光使我们能够免去收集、处理和理解报告的麻烦,只为您提供所需的信息。您知道您客户的浏览器可以自动向您发送有关您网站安全配置文件的各种有用信息吗?

杰威

JSON Web Encryption (JWE) 是一种 IETF 标准,为基于 JSON 和 Base64 的加密数据交换提供标准化语法。 [1] 它由 RFC7516 定义。与 JSON Web 签名 (JWS) 一起,它是 JWT(JSON Web 令牌)的两种可能格式之一。JWE 是 JavaScript 对象签名和加密 (JOSE) 协议套件的一部分。 [2]

JWS

JSON Web 签名(缩写为 JWS)是 IETF 提议的用于签署任意数据的标准 (RFC 7515)。[1] 这用作各种基于 Web 的技术(包括 JSON Web Token)的基础。

网页加密API

该规范描述了用于在 Web 应用程序中执行基本加密操作的 JavaScript API,例如散列、签名生成和验证以及加密和解密。此外,它还描述了一个 API,供应用程序生成和/或管理执行这些操作所需的密钥材料。此 API 的用途包括用户或服务身份验证、文档或代码签名以及通信的机密性和完整性。

谷歌reCAPTCHA V3

reCAPTCHA 是一项免费服务,可保护您的网站免受垃圾邮件和滥用。reCAPTCHA 使用先进的风险分析引擎和自适应挑战来防止自动化软件在您的网站上从事滥用活动。它做到了这一点,同时让您的有效用户轻松通过。

...帮助您在没有任何用户摩擦的情况下检测网站上的滥用流量。它根据与您网站的交互返回一个分数,并为您提供更大的灵活性来采取适当的行动。

WAF - Web 应用程序防火墙

Web 应用程序防火墙(或 WAF)过滤、监视和阻止进出 Web 应用程序的 HTTP 流量。WAF 与常规防火墙的区别在于 WAF 能够过滤特定 Web 应用程序的内容,而常规防火墙则充当服务器之间的安全门。通过检查 HTTP 流量,它可以防止源自 Web 应用程序安全缺陷的攻击,例如 SQL 注入、跨站点脚本 (XSS)、文件包含和安全配置错误。

UBA - 用户行为分析

Gartner 定义的用户行为分析 (UBA) 是一个关于检测内部威胁、针对性攻击和金融欺诈的网络安全过程。UBA 解决方案着眼于人类行为模式,然后应用算法和统计分析从这些模式中检测有意义的异常——表明潜在威胁的异常。UBA 不跟踪设备或安全事件,而是跟踪系统的用户。Apache Hadoop 等大数据平台允许它们分析 PB 级数据以检测内部威胁和高级持续威胁,从而增强了 UBA 功能。