【问题标题】:Should (and how) a backend API used by a frontend UI be secured?前端 UI 使用的后端 API 是否应该(以及如何)得到保护?
【发布时间】:2018-04-09 20:43:24
【问题描述】:

假设您正在开发一个由后端 HTTP API 组成的应用程序,该 API 服务于前端 UI。 UI 在客户端的浏览器上呈现后,将需要对后端进行某些调用(例如,为视图获取数据)。但是,所有这些调用都可以在 Chrome 的开发者控制台上进行检查,例如。这暴露了我的应用程序的整体逻辑和内部 API 端点。

这是一个网络应用程序的问题吗?我浏览了其他一些网站(例如 Reddit),确实能够检查 API 调用是否正在进行,我什至设法通过 cURL 重现它,得到了相同的响应。

我解决这个问题的第一个想法是加密所有数据并在前端应用程序内部对其进行解密。但是,我认为这不会提供太多安全性,因为私钥必须在应用程序的源代码中进行硬编码,现代浏览器也可以对其进行检查。此外,这可能会极大地影响应用程序的性能。

我能想到的最好的办法是以某种方式为会话分配一个令牌(也许是 JSON Web 令牌?)(而会话又分配给一个用户)。进行 API 调用将需要此令牌,并且它的到期时间可能很短。但是,仍然可以在 HTTP 请求中看到令牌。

有什么想法吗?

【问题讨论】:

  • Fonsec - 我正在寻找解决相同问题的替代方案,很想知道您最终确定了什么?

标签: rest web-services web-applications api-design


【解决方案1】:

我在我的 MEAN 应用程序中使用 bcrypts => https://www.npmjs.com/package/bcryptjs + jsonwebtokens 来做同样的事情。 Bcryptjs 在服务器端创建一个盐,并将一个加密的令牌发送给客户端。相同的令牌用于 API 调用。这使得任何网络钓鱼尝试的解码都变得更加困难。

改用 HTTPS。 => Are querystring parameters secure in HTTPS (HTTP + SSL)?

【讨论】:

  • 感谢您的建议。当然,我确实在使用 HTTPS :) 但是,我不能使用建议的包,因为我在 Elm 中构建前端,并且我不想依赖外部 JS 调用
猜你喜欢
  • 2022-09-30
  • 2018-09-21
  • 1970-01-01
  • 2023-03-19
  • 2021-03-08
  • 2020-03-13
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
相关资源
最近更新 更多