有没有办法验证我的API请求是来自特定域而不会有人篡改它的风险?
例如,如果我收到请求:
http://www.mydomain.com/api?request=something&key=12345
我可以检查以确保在返回结果之前已将API密钥12345分配给用户。但是,我想将API密钥12345限制在特定域中,以便只有来自theirdomain.com
的人才能使用密钥12345发送API请求。
我不知道如何编程那部分,我知道。除了使用$_SERVER['HTTP_REFERER']
(更安全的东西)之外,我只是问是否有任何办法(或者你可能有的任何其他想法)?
答案 0 :(得分:0)
HTTP内置的任何内容都不允许您检测请求的“上下文”,除了来自客户端的自愿(因而很简单的可欺骗)信息,例如Referer
标题。
如果这是服务器到服务器API(而不是用户浏览器直接请求的内容),您可以使用$_SERVER['REMOTE_ADDR']
检查源 IP地址。伪造起来要复杂得多,特别是如果你是白名单而不是将IP列入黑名单。 (很容易找到另一个 IP,以避免黑名单,但几乎不可能选择你的IP,以避免白名单。)
这通常用于电子商务和电子支付API,其中帐户所有者提供设置或客户控制面板中的IP地址列表,以使第三方更难使用被盗用户名和密码。