Php 仅针对ajax执行操作,并阻止直接url访问

Php 仅针对ajax执行操作,并阻止直接url访问,php,zend-framework,Php,Zend Framework,我有一个只能通过ajax访问的操作。当有人直接访问url时,我如何使其提供空白输出?Zend有没有办法判断这是ajax调用还是直接url访问 编辑:我发现了Zend的$this->getRequest()->isXmlHttpRequest(),但我想知道这是否足够可信?如果您使用的是jQuery,您可以这样检查它: if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH'

我有一个只能通过ajax访问的操作。当有人直接访问url时,我如何使其提供空白输出?Zend有没有办法判断这是ajax调用还是直接url访问


编辑:我发现了Zend的
$this->getRequest()->isXmlHttpRequest()
,但我想知道这是否足够可信?

如果您使用的是jQuery,您可以这样检查它:

if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    return die('No direct access allowed.');
}

如果您使用的是jQuery,您可以像这样检查它:

if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    return die('No direct access allowed.');
}

没有办法可靠地区分AJAX请求和任何其他类型的请求,因此不能阻止非AJAX访问

无法可靠地区分AJAX请求和任何其他类型的请求,因此不能阻止非AJAX访问

@fabrik是的,我正在使用Jquery。那么,这种方法是否保证适用于所有浏览器?我的意思是它取决于javascript库,而不是浏览器?x-requested-with标头可能会被伪造,或者可能会被忽略或设置为与某些XHR引擎预期的不同的值。这不是100%可靠的,可能会阻止合法AJAX请求的访问,而不会阻止那些决心伪造标题的人进行非AJAX访问。是的。AFAIK jQuery正确处理此标头,因此您可以安全地依赖这些行。此标头由客户端发送,因此无法完全信任。而且,下面的代码是错误的;为什么要检查一个键是否为空——如果它不存在,将触发一个错误——然后测试它是否为“xmlhttprequest”?@fabric我想知道为什么需要这样的限制。如果是为了安全,那么最好让Ajax脚本执行与项目其余部分相同的安全检查,例如仅在记录了有效用户的情况下返回输出in@fabrik是的,我正在使用Jquery。那么,这种方法是否保证适用于所有浏览器?我的意思是它取决于javascript库,而不是浏览器?x-requested-with标头可能会被伪造,或者可能会被忽略或设置为与某些XHR引擎预期的不同的值。这不是100%可靠的,可能会阻止合法AJAX请求的访问,而不会阻止那些决心伪造标题的人进行非AJAX访问。是的。AFAIK jQuery正确处理此标头,因此您可以安全地依赖这些行。此标头由客户端发送,因此无法完全信任。而且,下面的代码是错误的;为什么要检查一个键是否为空——如果它不存在,将触发一个错误——然后测试它是否为“xmlhttprequest”?@fabric我想知道为什么需要这样的限制。如果是为了安全起见,那么最好让Ajax脚本执行与项目其余部分相同的安全检查,例如只有在有效用户登录后才返回输出,这样可以很好地解释这一点。代理服务器可能会破坏头文件,一些XHR引擎一开始就没有发送它。什么是XHR引擎?一个jquery库,或者其他什么?最常见的库(jquery、dojo、mootools、yui等)包括使用XmlHttpRequest执行AJAX的AJAX功能。这就是我所说的XHR引擎,它很好地解释了这一点。代理服务器可能会破坏头文件,一些XHR引擎一开始就没有发送它。什么是XHR引擎?一个jquery库,或者其他什么?最常见的库(jquery、dojo、mootools、yui等)包括使用XmlHttpRequest执行AJAX的AJAX功能。这就是我所说的XHR引擎