使用客户端JS直接访问数据库API

时间:2018-05-24 09:33:31

标签: javascript amazon-web-services database-connection influxdb

我需要构建一个简单的Web前端,它主要用于绘制从数据库中获取的一些数据。数据库(即InfluxDB)公开了一个HTML API,我可以直接从我的Javascript前端直接调用它。我正在将登录服务放在它前面(AWS Cognito)。

但是,一旦用户登录,他们就可以轻松地在客户端代码中发现我的API端点,从而进行任意查询并可能滥用它或者只是窃取我的所有数据。我怎么能避免呢?有可能以某种方式使API只能访问应用程序的前端吗?如果没有,我应该遵循的最佳做法是什么?

2 个答案:

答案 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的其他入站规则。