gpt4 book ai didi

node.js - 保护后端API端点(MERN应用程序)

转载 作者:行者123 更新时间:2023-12-02 11:52:48 25 4
gpt4 key购买 nike

我已经使用MERN制作了一个全栈Web应用程序,并使用Kubernetes集群进行了部署。
该应用程序运行正常,除了一个问题。也就是说,我(作为用户)能够从浏览器访问诸如 www.domain-name / api / orders 之类的API,从而为我提供JSON响应。
我不想要的。我需要将其隐藏/限制。
我正在使用NGINX-INGRESS进行路由,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: shopify.dev
http:
paths:
- path: /api/users/?(.*)
backend:
serviceName: auth-srv
servicePort: 3000
- path: /api/orders/?(.*)
backend:
serviceName: orders-srv
servicePort: 3000
- path: /?(.*)
backend:
serviceName: client-srv
servicePort: 3000
由于请求/ api和/ *(前端)都通过VIA nginx-ingress路由,因此这应该如何工作?
有什么解决方案?

最佳答案

您在浏览器中运行的客户端应用程序应该能够从API提取数据,因此很明显,您的应用程序是从同一浏览器发出请求还是您(作为用户)从同一浏览器发出请求(或另一个其他客户端),它将通过(假设遵循相同的身份验证过程)。
不可能完全阻止它,因此它不是必需的,因为用户仍然可以通过应用程序或直接访问相同的数据。
但是,如果您要隐藏它,是因为您不希望普通用户在期望外观漂亮的前端应用程序时看到一些奇怪的json响应(因为他们随机输入了错误的url,您就不会故意将其导航到此类端点)您的应用),则可以在您的应用中实现该逻辑。
您可以执行的方法是在您的 friend 应用程序发出的所有请求中(在axios / fetch调用中)包含一些自定义HTTP header ,然后在您支持的应用程序上实现过滤逻辑,该逻辑将解析此 header 以查看调用是否是通过前端应用或直接(可能是一种中间件,如果用户看到不带此 header 的请求会将用户重定向到根页面的中间件)制成。我以前使用过这种解决方案,并且效果很好。
但是请再次注意,这与安全无关,因为您的前端应用程序中已经可以使用您的数据。而且,它与kubernetes本身无关,任何高级用户都可以提出这样的请求,从而绕过该解决方案。您的数据应通过身份验证保护,而不是通过某些html文档保护。
例如,如果您使用axios,则可以针对所有此类请求(在前端)全局设置该自定义 header 。

axios.defaults.headers.common['fromApp'] = true 
在后端,您可以创建一个中间件
const isFrontendRequest = (req, res, next) => {
const h = req.get('fromApp') // get the header
if (!h) {
// handle the request not originating from your app and return
}
next() // custom header was present if we are here, continue normally
}
然后,您可以在每个传入请求之前全局应用。
app.use(isFrontendRequest)

关于node.js - 保护后端API端点(MERN应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62981769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com