如何获取API的请求发件人的URL?

2024-04-26 23:58:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

选项包括:API密钥和网站URL。你知道吗

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


Tags: keyapiurl客户端示例路由网站选项
1条回答
网友
1楼 · 发布于 2024-04-26 23:58:10

你所要求的是不可能的。你知道吗

从根本上说,如果请求是通过公共互联网向您发送的,您就不能知道向您发送请求的应用程序的身份。你知道吗

您可以对远程客户端进行有根据的猜测。但是,由于远程客户端运行在您无法控制的平台上,因此没有任何东西可以阻止攻击者反向工程它的工作方式,然后向您发送相同的请求。如果攻击者有足够的技能,你就无法分辨两者之间的区别。你知道吗

有一些工具可以帮助您检测和阻止恶意客户机,但也有一些工具可以让恶意客户机规避检测(只需搜索堆栈溢出即可获得许多反向问题的示例)。这是一场军备竞赛,如果你想赢,你需要比对方投入更多的时间和金钱。你知道吗

解决这个问题的正常方法是让它成为你客户的问题。向他们收取API请求配额的费用,如果他们提出的请求超过配额,则向他们收费。然后,如果他们与其他人共享API密钥,他们还需要为他们买单。那么你就不必关心它是谁的API密钥了:不管怎样,你都会得到报酬。你知道吗

如果你不能向他们收费(例如,如果是免费服务),那么下一个最好的办法就是限制费率。对于一个API密钥,一秒钟内不允许超过10个请求。你知道吗

如果你是认真对待这类事情,你可能不想重新发明轮子。有云级API网关服务。选择一个并使用它来处理所有API密钥身份验证和客户端限制。你知道吗

相关问题 更多 >