【问题标题】:Reactjs Expressjs end to end encryptionReactjs Expressjs 端到端加密
【发布时间】:2021-07-24 18:15:48
【问题描述】:

我不确定这里是否已经提出过这个问题。但是目前我还没有看到这样的问题。

我有一个用 Express.js 编写的 RESTapi。 该 RESTapi 连接到 React.js Web 应用程序。 RESTapi 使用 JWT 身份验证令牌进行保护。

在网络应用程序中,我们显示了数千种产品的每日价格。有人登录网络应用程序并查看一些产品的价格是可以的。 但不好的是,有人每天自动获取所有商品的价格,并存储和分析我们的定价策略。

基本上,我想要的是有人试图使用邮递员之类的工具访问 API,或者应该阻止它。只有 Web 浏览器才能访问 API。这可以通过阻止用户代理在某种程度上实现。我们可以屏蔽 POSTMON 用户代理,但是我们如何屏蔽所有类似 POSTMON 的工具呢?

即使我们阻止所有类似的工具,仍然是浏览器的开发工具网络选项卡,他们可以看到响应。

有没有办法加密响应?因此网络选项卡将显示用户可以理解的内容。但同时该响应可以被 React 解密。

希望大家都清楚我的问题!

任何帮助!

提前致谢。 =)

【问题讨论】:

  • 你的问题的任何答案,我几乎有同样的问题

标签: javascript node.js reactjs angularjs express


【解决方案1】:

基本上,我想要的是有人试图使用邮递员之类的工具访问 API,或者应该阻止它。只有网络浏览器才能访问 API。

做不到。

这可以通过阻止用户代理在某种程度上实现。我们可以屏蔽 POSTMON 用户代理,但我们如何屏蔽所有类似 POSTMON 的工具?

人们很容易就用户代理撒谎。

即使我们阻止所有类似的工具,仍然是浏览器的开发工具网络选项卡,他们可以看到响应。

是的。浏览器的设计目的是为用户的利益服务,而不是为他们访问的网站所有者的利益服务。

有没有办法加密响应?因此网络选项卡将显示用户可以理解的内容。但同时该响应可以被 React 解密。

不是真的。您必须将解密密钥提供给浏览器,如果您将其提供给浏览器,则用户可以访问它。

但不好的是有人每天自动获取所有商品的价格并存储和分析我们的定价策略。

请考虑限制速率。


然而,从本质上讲,您要做的是公开信息而不将其提供给某些人。

这是一个矛盾,因此是不可能的。

【讨论】:

  • @AyoubBenayache — 如果您有新问题,那么ask one(但您当前状态下的评论大约有 8 个不同的问题,每个问题都是过于宽泛和固执己见的组合) .
  • 不幸的是,我正在寻找专家的最佳实践,如果我问这样的问题会阻止我。如果您有解释所有这些员工的直接链​​接,希望您与我分享,并提前感谢您
【解决方案2】:

您可以使用 express 执行的操作是使用 CORS,并且只允许您的网站访问 API。

检查https://www.npmjs.com/package/cors

你会有类似的东西

var express = require('express')
var cors = require('cors')
var app = express()
 
var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
 
app.get('/products/:id', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for only example.com.'})
})

但要使用 cors 实现该目标,可能需要使用基于用户代理的限制,以确保所有请求都来自浏览器并带有 cors 标头。

但仍然不是一个非常有效的机制。

另一个想法是实现某种“API KEY”,由您的客户端生成并在后端进行验证。每个请求都需要有一个“API KEY”作为参数

【讨论】:

  • 没有。 CORS 用于放松浏览器应用于跨源请求的相同源策略。它不能使规则比默认更严格,并且对非浏览器客户端没有影响(例如问题中给出的 Postman 示例)。
【解决方案3】:

您需要将 CORS 策略与 HTTPS 一起使用,如果 CORS 策略中的策略设置正确,则只有来自 UI 应用程序的请求才会被处理,否则应用程序将拒绝请求。 希望这段代码 sn-p 能帮到你

   const whitelist = ['http://www.example.com', 'https://www.example.com'];
    const corsOptions = {
      origin(origin, callback) {
        if (whitelist.indexOf(origin) !== -1 || !origin) {
          // !origin // allow requests with no origin (like mobile apps or curl requests)
          callback(null, true);
        } else {
          console.error(`Not allowed by CORS, Origin ${origin}`);
          callback(new Error('Not allowed by CORS'));
        }
      },
      exposedHeaders: 'Authorization',
    };
router.use(cors(corsOptions));
router.use('/api/auth', auth);

【讨论】:

  • 没有。 CORS 策略只会阻止其他网站上的 Web 应用程序直接从客户端访问它。
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 2021-07-17
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多