Javascript PHP驱动的API如何跨域认证真正的客户端(referer)(知道头可能被伪造)?
使用PHP,您如何安全地验证一个API调用,跨域,并满足以下条件:Javascript PHP驱动的API如何跨域认证真正的客户端(referer)(知道头可能被伪造)?,javascript,authentication,widget,cross-domain,referer,Javascript,Authentication,Widget,Cross Domain,Referer,使用PHP,您如何安全地验证一个API调用,跨域,并满足以下条件: 必须从给定的domain.com/page调用(无其他域) 必须有一个给定的密钥 一些背景:请在回答之前仔细阅读 我的web应用程序将通过如下调用在客户端网站上显示javascript小部件。所以我们讨论的是脚本的跨域身份验证,但只针对真正的客户端和给定的URL 目前,这个小部件可以通过一行javascript包含在客户端的网站中 示例客户端网站.com/page/with/my widget <head> ...
<head>
...
<script src="//ws.my-webappserver.com/little-widget/?key=api_key"></script>
...
</head>
***该小部件仅允许在某些网站/页面上运行
现在,问题是:
ps:这个小部件可以上传到一个下拉框中,所以安全性是关键 我建议使用白名单方法来解决这个问题,我不完全确定这会解决这个问题,但是我对支付处理器使用了类似的技术,它要求您将服务器IP列入白名单 我以前听过很多。归根结底,您需要对每个用户自己进行身份验证,或者信任另一个站点的身份验证,并大力监控不良活动(这就是您正在做的)。在js中,您可以做更多的工作来打破业余的curl脚本,但除非您想保护每个请求,否则您几乎无能为力。
if ($_SERVER['HTTP_REFERER'] !== "http://client-website.com/page/with/my-widget")
&& $_REQUEST["Key"] == "the_long_api_key") {
header("Content-type: application/x-javascript");
echo file_get_contents($thewidgetJS_in_secret_location_on_server);
} else {
//pretend to be a 404 page not found or some funky thing like that
}