是否使用 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 错误