是否使用 access-control-allow-origin 足以防止滥用 api?

Posted

技术标签:

【中文标题】是否使用 access-control-allow-origin 足以防止滥用 api?【英文标题】:is using access-control-allow-origin enough to prevent misuse of an api? 【发布时间】:2016-10-22 03:21:45 【问题描述】:

我正在制作一个使用另一个 api 的 api 后端,例如 Twitter。 (请注意,实际的 api 不是 twitter,但我以它们为例)。

假设 Twitter 对其 api 的调用次数有限制,超过此限制,它就会开始从我的信用卡中扣款。这就是为什么没有人滥用我的 api 对我来说非常重要的原因。

我想阻止人们查看我的前端代码并查看它击中了哪个端点,因为如果有恶意的人这样做,我很快就会超出限制并不得不支付 $$$。

我的前端代码使用get 调用mybackend.com/twitter/api

只需将Access-Control-Allow-Origin 标头添加到我的后端就足够了吗?

headers['Access-Control-Allow-Origin'] = 'myfrontend.com'

我问这个的原因是因为我注意到直接在浏览器中输入mybackend.com/twitter/api 是有效的,如果我将access-control-allow-origin 设置为特定的网站,这不是我所期望的。

我做错了吗?我如何防止有人简单地编写脚本来访问我的后端,因为很明显,尽管我有一个 access-control-allow-origin 标头,但只需将它输入到我的浏览器的 url 中就可以了。

【问题讨论】:

【参考方案1】:

您的问题有两种可能的解决方案。您可以尝试为您的 API 实现请求签名,以准确了解后端的来源。你可以看看它是如何工作的here。

第二个选项,对我来说,一个女巫更适合您的问题,是在您的服务器负载均衡器上设置拒绝服务方法,以防止来自同一来源的多个请求,因此,不要让那些某种恶意请求会攻击您的后端。

【讨论】:

以上是关于是否使用 access-control-allow-origin 足以防止滥用 api?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Axios 从 Javascript 代码发布到 .net Web Api 时,Access-Control-Allow Headers CORS 错误

使用 CORS 的 Javascript 和 angularjs

PHP 跨域问题 (转)

fetch跨域发送带凭据的请求

node---express

图像旋转和 Jcrop.js