Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
公共(PHP)web服务的使用限制_Php_Jquery_Json_Web Services - Fatal编程技术网

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

公共(PHP)web服务的使用限制,php,jquery,json,web-services,Php,Jquery,Json,Web Services,我有一个公共php网站。它以JSON Web服务为特色,我将其用于jQuery自动完成。网站是公共的,web服务也是公共的 但是,我想限制web服务,以便只能从相应的网站(即从该网站加载的HTML页面)调用它们 有什么好的解决办法 本上下文中的限制是指: 我的Web服务(例如fooservice.php)是公共的。由于用户没有经过身份验证,我想知道如何检查它是否是从我的站点页面调用的(例如,mypagewithautocomplete.php) 是一个有用的答案(+1),但只会避免从另一个浏览

我有一个公共php网站。它以JSON Web服务为特色,我将其用于jQuery自动完成。网站是公共的,web服务也是公共的

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

有什么好的解决办法

本上下文中的限制是指: 我的Web服务(例如
fooservice.php
)是公共的。由于用户没有经过身份验证,我想知道如何检查它是否是从我的站点页面调用的(例如,
mypagewithautocomplete.php



是一个有用的答案(+1),但只会避免从另一个浏览器使用AJAX。它并不阻止在浏览器中读取JSON结果

将以下内容添加到您的Web服务中:

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

这将避免将WS与Ajax调用结合使用的任何意图


这会阻止我卷曲OP的web服务吗


不,卷发可以伪造任何标题。但是有了这个标题,没有人可以直接使用您的WS。如果有人有足够的时间制作一个带有CURL的网关,在他们的网站上使用你的WS,你可以很容易地发现他们大量使用你的WS。

我就是这么做的。如中所述,可以将请求头传递给我的Ajax请求

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

  • 无跨域AJAX访问
  • 只需输入URL即可浏览JSON数据

  • “限制”是什么意思?这是一个广泛的范围。基本上,如果您想防止在其他脚本中使用,您应该与CORS联系:您可以在加载网页时生成令牌,将其存储在HTML中,将其存储在DB中,让autocomplete在每个请求中发送令牌,根据DB验证令牌,12小时后,令牌甚至会过期。请按如下所述在CORS和标头上签入,谢谢。到目前为止,这会阻止我使用CURL'OP的web服务吗?不,CURL可以伪造任何标头。但是有了这个标题,没有人可以直接使用WS。如果有人有足够的时间制作一个带有CURL的网关,在他们的网站上使用你的WS,你可以很容易地发现他们大量使用你的WS。我认为你的评论值得在你的回答中提及,这样人们就不会认为CORS头是一个气密的解决方案。