当前位置: 首页 > 知识库问答 >
问题:

保护Express API

澹台欣怿
2023-03-14

我正在编写一个具有独立前端和后端的Web应用程序。前端用React编写,后端是运行Express终结点的node.js服务器。如何确保只有我的前端可以访问API,而不是其他任何人?我的API URL在我的前端客户端代码中公开,所以任何人都可以看到。

我在我的应用编程接口中添加了JWT身份验证,但是我仍然需要一个不受保护的 /loginendpoint来生成JWT令牌,并且为了登录来生成令牌,我必须从我的前端发布用户名和密码,其他用户可以看,因为这是从客户端完成的。

保护托管在像这样的单独后端上的应用编程接口的正确方法是什么,以便只有我的前端可以访问它,在这样的情况下,没有人可以看到使用了什么凭据来访问终结点?

共有1个答案

司寇阳曦
2023-03-14

你不能。你的API在互联网上。任何人都可以访问它。在允许访问API之前,您可以要求该帐户的帐户和登录凭据,但一旦有人拥有帐户和凭据,他们就可以从自己的脚本而不是通过您的网页访问API。这就是网络的工作html" target="_blank">原理。你对此无能为力。无法隐藏客户端正在使用的和凭据。客户端上的所有数据都可以被客户端上的黑客查看。这就是网络的方式。

较大的公司通常会监控他们的应用编程接口使用情况,以寻找不适当的使用。这包括速率限制、检测不典型的人类用户的行为和序列。当他们发现不当使用时,他们通常会暂时或永久禁用该操作或禁止违规账户。这也是为什么一些页面使用技术来检测是否是实际的人单独导致了操作,如reCaptcha。例如,在堆栈溢出中,当编辑评论或帖子时,我经常遇到速率限制,它告诉我必须等待一段时间才能接受我的编辑。

在客户端中存储凭据没有绝对安全的方法。最常见的凭据方案是要求用户名和密码(通过https安全),然后当服务器将其作为合法凭据接受时,会向客户端发出某种令牌,可用于将来的API调用。该令牌可能在cookie中,或者可能需要手动包含在每个后续API调用中(当从浏览器使用API时,cookie的优点是cookie会随每个后续请求自动发送)。

如果令牌是cookie,则cookie存储在浏览器的cookie存储中,并且可以为其设置过期。浏览器的cookie存储受到保护,不被其他网站的网页访问,但本地计算机上的某人可以访问(存储在文件系统中)。

如果令牌不是cookie,只是作为令牌返回,并且客户端希望存储它,那么Javascript还可以访问其他几个地方来存储它。本地存储与cookie存储具有类似的安全性。它受到保护,不被其他网站访问,但可以由本地计算机上的人员访问。

 类似资料:
  • 问题内容: 我正在使用基于Node.js的https服务器,该服务器使用HTTP Basic进行身份验证(这很好,因为数据是通过SSL加密连接发送的)。 现在我想提供一个Socket.io连接 加密和 仅适用于经过身份验证的用户。 问题是如何做到这一点。我已经发现在连接到套接字时需要在客户端JavaScript代码中指定,但是如何在服务器端强制套接字连接只能在SSL上运行,并且仅适用于经过身份验证

  • 问题内容: JKS(Java密钥存储)文件是否已加密?它们是否为加密密钥提供全面保护,还是我仅需要依赖访问控制? 有没有办法确保密钥受到保护? 我对详细的细节感兴趣,包括算法,密钥管理等。这些可配置的任何一个吗? 问题答案: 它们已加密。 该算法取决于提供者。提供者将根据密码返回密钥/证书。如果需要强安全性,请找到使用强加密的密钥库提供程序。

  • 简介 Laravel 可以轻松地保护应用程序免受 跨站点请求伪造 (CSRF) 攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。 Laravel 会自动为每个活跃用户的会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。 无论何时,当您在应用程序中定义HTML表单时,都应该在表单中包含一个隐藏的CSRF标记字段,

  • 启用触摸保护 把 Yubikey-manager 安装在一个绝对路径:【译者注:homebrew 是 macOS 平台的包管理软件】 ❯ brew install libu2f-host libusb swig ykpers ❯ git clone git@github.com:Yubico/Yubikey-manager.git ❯ git submodule update --init --r

  • 6xx受保护 600 Series,Repliesregardingconfidentialityandintegrity 631 Integrityprotectedreply. 632 Confidentialityandintegrityprotectedreply. 633 Confidentialityprotectedreply.

  • protection([string $password]); 示例一 $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); $fileObject = $fileObject->fileName('tutorial.xlsx'); ​ $filePath = $fileObject