0

我可能仍然对这个概念有些困惑。但。在这种情况下,我有一个联系表单,它在发送时调用我自己的 laravel 后端 api,它将为我处理发送电子邮件功能。

我想用 api 密钥保护它,但我不希望我的 api 密钥暴露在前端的任何地方。我的 Vue/Nuxt 应用程序正在服务器上运行。

所以环境变量应该是答案 - 我猜。不过,如果我这样做:

this.$axios.$post('http://localhost/someMailFunc?apk=' + process.env.API_KEY, {
                    name: name,
                    subject: subject,
                    email: email,
                    message: message,
                }).then(response => {
                    // somecomplete
                }).catch(e => {
                    // somecatch
                })

当然,在代码中它是隐藏的,但在前端检查它,到处可见的是 api 密钥。

在此处输入图像描述 在此处输入图像描述

如果密钥甚至是当今的解决方案,那么推荐使用密钥保护的方法是什么。

4

1 回答 1

2

我认为在这个用例(联系表格)中,API KEY 不是保护您的 api / 联系表格的方法。

在联系表格中,您需要确保什么?

  • 提交机器人 =>解决方案:验证码(例如:谷歌验证码)

  • 邪恶的人反复提交 =>解决方案:在您的 API 中实施验证功能,以防止验证代理和 ip 源。

  • 直接通过 http 请求提交(不使用您的 Web 表单)=>解决方案:在您的 API 中实施域约束(仅允许从您的 Web 域提交)

  • 中间人喜欢邪恶的代理(盗窃和数据操作)=>解决方案在您的 API 中实施 HTTPS

如果您的 API 需要 APIKEY,并且此 API 是由浏览器请求的,那么您的 APIKEY 将始终对开发工具可见。

于 2020-07-03T21:49:39.710 回答