Php 检查您的页面是否不是通过ajax请求的?

Php 检查您的页面是否不是通过ajax请求的?,php,javascript,ajax,Php,Javascript,Ajax,我设置了一些页面,以便它们只响应ajax请求。问题是,我如何设置它,以便如果有人试图通过浏览器窗口发送请求(即通过键入请求),它们不会运行,并且只有在发出ajax调用时才会运行。这里的页面是用php编写的没有可靠的方法来区分AJAX请求和普通请求。一些库(如)将向请求附加一个附加的X-request-With:XMLHttpRequestHTTP头,但其他库可能不会。您可以使用浏览器提供的低级对象伪造AJAX请求,这些对象看起来与普通请求完全相同,因此不需要太多依赖 define('XHR',

我设置了一些页面,以便它们只响应ajax请求。问题是,我如何设置它,以便如果有人试图通过浏览器窗口发送请求(即通过键入请求),它们不会运行,并且只有在发出ajax调用时才会运行。这里的页面是用php编写的

没有可靠的方法来区分AJAX请求和普通请求。一些库(如)将向请求附加一个附加的
X-request-With:XMLHttpRequest
HTTP头,但其他库可能不会。您可以使用浏览器提供的低级对象伪造AJAX请求,这些对象看起来与普通请求完全相同,因此不需要太多依赖

define('XHR', (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));

如果您使用JS设置http头(在jQuery中自动完成),请使用此常量。

您可以检查的所有信息(头、引用者等)都来自浏览器,并且可以伪造


如果用户经过正确的身份验证(例如:通过cookie+数据令牌),那么通过浏览器窗口公开的系统不会比正常的ajax使用更多。

ajax是在浏览器窗口内完成的。我猜你的意思是通过在浏览器中键入URL来阻止人们访问它。你可以简单地使用POST。必须有人编写HTML才能访问您的页面


您还可以使用JSON发送请求,添加自定义的头等。

如果手动调用ajax url(或工具)可能会在服务器上造成危险,则没有解决方案。如果出于安全原因,您需要保护处理ajax调用的代码。只允许那些不会造成任何伤害的内容。

没有这样稳定的方法可以做到这一点

除了查找标题外,您还可以将正确的内容类型作为
应用程序/json
发送,至少在Firefox中会提示下载。它可能起到5秒钟的威慑作用:其他人提到的PAs,请记住这些东西是可以伪造的。HTTP头很容易伪造。这只会让人慢下来,而不会阻止他们。让他们慢下来是你想要的。越难做到,人们就越不可能做到。门/窗上的锁等并不能阻止人们闯入你的房子,但他们不太可能。同意,没有办法阻止它,所以请修复你的系统,这样做就不会有问题。从来没有想过这一点-现在我只检查其他标题。@DarinDimitrov,我可以请您看看php get_文件的内容()和curl()问题吗?