gpt4 book ai didi

javascript - Node JS : Allow only server side calls to my api

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:37 26 4
gpt4 key购买 nike

我一直在绞尽脑汁寻找一个简单的解决方案。比方说,我的 Node JS 应用程序中有 10 个 API 端点。

我已经允许其中 3 个公开,其余 4 个具有基于 JWT 的身份验证

现在我还有 3 条路由,它们没有 JWT,我只需要允许服务器端调用。没有浏览器或 curl 或 postman ,应该能够调用他们。如何从请求对象中识别它来自服务器?

或者换句话说,如何拒绝对我的 api 的所有跨源调用?由于服务器端不属于 CORS,它们应该过滤

----- 编辑 -----

我最近发现了一项使用用户代理 header 来阻止服务器端调用的服务。我可以为我的服务强制执行用户代理 header 并确保该 header 没有浏览器代理吗?这很容易被蒙蔽,但作为理论上的解决方案,丢弃用户代理引用浏览器代理的请求的 nodejs 拦截器是什么?

最佳答案

您可以使用 express-ipfilter打包并仅将其应用于您要保护的某些路由:

const express = require('express'),
ipfilter = require('express-ipfilter').IpFilter;

// Whitelist the following IPs
const ips = ['127.0.0.1'];

// Create the route
app.get("/securePath", ipfilter(ips, {mode: 'allow'}), (req, res) => {
// only requests from 127.0.0.1 (localhost/loopback) can get here
});

app.get("/openPath", (req, res) => {
// all requests can get here
});

app.listen(3000);

如果您在代理后面使用 Node,您可能需要配置代理以使用实际 IP 设置 header ,然后将 ipfilter 函数传递给 detectIp 属性到第二个参数。

假设您正在使用 nginx 并将其配置为通过 x-Real-IP header 发送原始 IP,您可以将此函数传递给 ipfilter:

const express = require('express'),
ipfilter = require('express-ipfilter').IpFilter,
ips = ['127.0.0.1'];

app.get("/securePath", ipfilter(ips, {mode: 'allow', detectIp: getIp}), (req, res) => {
// only requests from 127.0.0.1 (localhost/loopback) that go through the proxy can get here.
});

app.get("/openPath", (req, res) => {
// all requests can get here
});

app.listen(3000);

function getIp(req) { return req.headers["X-Real-IP"] }

关于javascript - Node JS : Allow only server side calls to my api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52274308/

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