我有一个公共的php网站。它具有JSON Web服务,我用它来进行jQuery自动完成。该网站是公开的,网络服务也是公开的。
但是,我想限制web服务,以便只能从相应的网站(即从该网站加载的HTML页面)调用它们。
对此有什么好的解决方案?
此上下文中的限制意味着:
我的网络服务(例如fooservice.php
)是公开的。由于用户未经过身份验证,我想知道如何检查是否从我的网站页面调用(例如mypagewithautocomplete.php
)
https://stackoverflow.com/a/38614140/356726是一个有用的答案(+1),但只避免从其他浏览器使用AJAX。它不会阻止只在浏览器中读取JSON结果。
答案 0 :(得分:2)
添加到您的网络服务:
header('Access-Control-Allow-Origin: yourdomain.com');
这样可以避免使用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');
结合使用。现在看起来已经足够了。