【发布时间】:2020-08-06 05:11:59
【问题描述】:
我正在创建一个 API,仅由我的 Vue.js 应用程序访问,用于显示电影时间、视频点播链接等数据。没有私人敏感信息,但我想避免其他人和机器人使用我的资源来获取免费数据。我知道将 API 限制为我自己的一页前端应用程序几乎是不可能的,因为有人总是可以:
- 从页面源获取 API 密钥
- 将引荐来源标头欺骗到我的 API 限制使用的标头
所以我想通过让后端服务器每天中午生成一个 API 密钥来“减轻损害”,即使用我的 API 的机器人数量。然后,当 PHP 加载 Vue.js 应用程序时,它会将该 API 密钥插入 Vue.js 代码中,这将使用它来查询我的 Python API。如果 Vue 收到“不正确的 API 密钥”错误(页面在 11:59 加载并在 12:01 发送请求的情况),Vue.js 将刷新页面以获取新密钥。
这样,如果有人从源获取 API 密钥,无论如何它都会在不到 24 小时内过期。当然,有人可以每天抓取页面获取 API 密钥并仍然使用 API,但我觉得这会阻止很多机器人和垃圾邮件发送者。
有没有人尝试过这样的事情?这听起来像是一个可行的解决方案,还是有一些我在 StackOverflow 上找不到的更好的事情要做?
【问题讨论】:
-
与其询问您的具体解决方案,为什么不发布您尝试解决的原始问题?您想阻止机器人和垃圾邮件发送者,但您需要向谁开放您的应用程序?这些人需要如何访问?
-
前端应该调用你的 backed,然后调用你的 api 并使用安全的身份/密钥密码或 pref 某种类型的令牌。 API 应限制为仅允许来自指定主机域的流量。你的提议相当于锁上一扇门,但把钥匙留在锁里。如果您想要简单的安全性而不会感到头疼,auth0 提供了一个免费的开发者帐户来让您的小型项目顺利进行。
-
感谢@TravisActon,但是任何人都可以向后端发出请求,就像前端页面将向后端发送请求一样