我需要构建一个简单的Web前端,它主要用于绘制从数据库中获取的一些数据。数据库(即InfluxDB)公开了一个HTML API,我可以直接从我的Javascript前端直接调用它。我正在将登录服务放在它前面(AWS Cognito)。
但是,一旦用户登录,他们就可以轻松地在客户端代码中发现我的API端点,从而进行任意查询并可能滥用它或者只是窃取我的所有数据。我怎么能避免呢?有可能以某种方式使API只能访问应用程序的前端吗?如果没有,我应该遵循的最佳做法是什么?
答案 0 :(得分:0)
我建议创建一个基于Node.js的Web服务来包装你的REST API。使用Express模块,只需几行就可以组合一个简单的REST服务并调用其他API。
const request = require('request');
const express = require('express');
const app = express();
app.get("/test", function(req, res, next){
res.status(200).send('Hello World');
});
app.get("/testapi", function(req, res, next){
// Read from another API and return result...
var options = {
url: "https://httpbin.org/ip",
method: "get"
};
request(options, function (error, response, body) {
if (error) {
console.error('error:', error);
res.status(500).send(error.message);
} else {
res.status(200).send(body);
}
});
});
let port = process.env.PORT || 3000;
app.listen(port);
console.log(`Express listening on ${port}..`);
答案 1 :(得分:0)
如果您的InfluxDB也在EC2上运行,最快和最安全的方法是仅允许您的Web应用程序通过security group限制它来访问Influxdb实例。
您的webapp在具有CIDR 172.31.0.0/16的默认VPC上运行的图像以及在端口8086上运行的Influxdb。然后只需创建一个具有INBOUND规则的安全组,即只能从AWS内部访问端口8086帐户(所以IP 172.31.0.0/16)并将其附加到Influx EC2实例。确保删除允许访问0.0.0.0/0的其他入站规则。