NodeJS Mailchimp不断撤销/禁用我的API密钥

tkqqtvp1  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(158)

Mailchimp在我使用cyclic.sh部署的Node.js/Express应用程序中使用注册表单时不断撤销/禁用我的API密钥。我从mailchimp收到一封邮件,说我的API密钥被公开发布在网上,因为我在GITHUB上托管我的代码,并且存储库是公开的。那么,我如何解决这个问题并阻止我的API密钥被禁用?我是不是应该加密我的密钥什么的?

const express = require("express");
const bodyParser = require("body-parser");
const request = require("request");

const https = require("https");

const { response } = require("express");

const app = express();

app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: true }));

app.get("/", function (req, res) {
    res.sendFile(__dirname + "/signup.html");
});

app.post("/", function (req, res) {
    const firstName = req.body.fName;
    const lastName = req.body.lName;
    const email = req.body.email;

    const data = {
        members: [
            {
                email_address: email,
                status: "subscribed",
                merge_fields: {
                    FNAME: firstName,
                    LNAME: lastName
                },
            }
        ]
    }
    const jsonData = JSON.stringify(data);
    const url = "https://****.api.mailchimp.com/3.0/lists/**********"
    const options = {
        method: "POST",
        auth: "ch****s1:cf3b3175*********************be29-****"
    }

    const request = https.request(url, options, function (response) {
        var statCode = response.statusCode;
        if (statCode === 200) {
            res.sendFile(__dirname + "/success.html");
        }
        else {
            res.sendFile(__dirname + "/failure.html");
        }

        response.on("data", function (data) {
            console.log(JSON.parse(data));

        });
    });
    request.write(jsonData);
    request.end();
});

app.post("/failure", function (req, res) {
    res.redirect("/");
});

app.listen(process.env.PORT || 3000, function () {
    console.log("server is running on port 3000.");
});
xdnvmnnf

xdnvmnnf1#

为什么会发生这种情况是因为您的API密钥是私有的,因为访问API密钥的任何人都可以造成一些损害(在这种情况下,篡改或删除您在Mailchimp上的联系人)。在您的代码中,API是可见的,它会触发Mailchimp中的安全机制,最终撤销/禁用您的API密钥。
最佳实践(在本地主机上)是创建一个.env文件,在其中存储API密钥或任何其他敏感信息。
现在,您可以像这样将API密钥粘贴到.env文件中

API_KEY = YOUR_API_KEY

然后,您可以使用

process.env.API_KEY

请注意,您必须安装dotenv包,并在代码中要求。

请注意,上述流程仅适用于本地,只是一个理想情况下遵循的约定。
要在服务器上实现此功能

  • 假设你从这里开始阅读 *

对您的代码进行上述更改。确保创建一个.gitignore并指定.env文件的路径,这样它就不会上传到GitHub。
现在,您只需在部署时设置一个名为API_KEY的环境变量。
看看这个视频我用于参考Hiding API Keys with Environment Variables

相关问题