繁体   English   中英

如何获取请求发送者的URL到我的API?

[英]How can I get the URL of the request sender to my API?

我正在尝试使用API​​密钥和客户端的网站URL保护我的API路由。 我正在使用元组(api_key, website_url)授予对我的API的访问权限。 实际上,网站URL是在请求中发送的。 示例:使用Angular httpClient

this.restPost(this.endpoint,body,options)

选项包括:API密钥和网站URL。

如何检查选项中插入的website_url是否与请求发送者的URL相匹配? 我在后端使用Flask微框架。

您要的是不可能的。

从根本上讲,如果正在通过公共Internet向您发送请求,则您将无法知道向您发送请求的应用程序的身份。

您可以对远程客户端进行有根据的猜测。 但是,由于远程客户端在您无法控制的平台上运行,因此,没有什么可以阻止攻击者对它的工作方式进行反向工程,然后向您发送相同的请求。 如果攻击者足够熟练,您将无法分辨出差异。

有一些工具可以帮助您检测和阻止恶意客户端,但是也有一些工具可以使恶意客户端逃避检测(只需搜索Stack Overflow即可找到许多反向问题的示例)。 这是一场军备竞赛,如果想赢得胜利,您将需要比另一方投资更多的时间和金钱。

解决此问题的正常方法是使其成为您客户的问题。 向他们收取一定数量的API请求,如果超出请求,则向他们收费。 然后,如果他们与其他人共享API密钥,那么他们还需要为他们支付账单。 然后,您不必在乎它的API密钥是什么:您会以任何一种方式获得报酬。

如果您无法向他们收费(例如,如果这是一项免费服务),那么下一件最好的事情就是限制速率。 单个API密钥的每秒请求不得超过10个。

如果您对这种事情很认真,则可能不想重新发明轮子。 那里有云规模的API网关服务。 选择一个并使用它来处理所有API密钥身份验证和客户端限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM