公共(PHP)Web服务的使用限制

时间:2016-07-27 13:15:06

标签: php jquery json web-services

我有一个公共的php网站。它具有JSON Web服务,我用它来进行jQuery自动完成。该网站是公开的,网络服务也是公开的。

但是,我想限制web服务,以便只能从相应的网站(即从该网站加载的HTML页面)调用它们。

对此有什么好的解决方案?

此上下文中的限制意味着: 我的网络服务(例如fooservice.php)是公开的。由于用户未经过身份验证,我想知道如何检查是否从我的网站页面调用(例如mypagewithautocomplete.php

https://stackoverflow.com/a/38614140/356726是一个有用的答案(+1),但只避免从其他浏览器使用AJAX。它不会阻止只在浏览器中读取JSON结果。

2 个答案:

答案 0 :(得分:2)

添加到您的网络服务:

header('Access-Control-Allow-Origin: yourdomain.com');

More info

这样可以避免使用WS和Ajax调用的任何意图。

这会阻止我使用CURL'ing OP的网络服务吗?

不,CURL可以伪造任何标题。但是有了这个标题,没有人可以直接使用你的WS。如果有任何人有时间与CURL建立网关以在他们的网站中使用您的WS,那么您可以轻松地检测到他们大量使用您的WS。

答案 1 :(得分:0)

这就是我所做的。如Pass request headers in a jQuery AJAX GET call中所述,可以将请求标头传递给我的Ajax请求。

我检查此标头值并在不存在时拒绝访问。这是一个极小的,到目前为止并不完美的手段,但它的工作。我已将其与推荐的标头('Access-Control-Allow-Origin: yourdomain.com');结合使用。现在看起来已经足够了。

  1. 没有跨域AJAX访问
  2. 只需输入网址即可浏览JSON数据
相关问题