我正在使用一些PHP页面做一些AJAX的东西,但我不希望它们可以直接访问。 Facebook做了类似的事情,例如:domain.com/ajax/my_ajax_form.php
如果我要使用AJAX加载该页面,它可以正常工作,但是如果用户尝试通过键入该URL直接加载文件,那么它将通过错误进行,例如。
if( IS FILE LOADED DIRECT? )
{
header ( HTTP/1.0 404 );
}
答案 0 :(得分:5)
您可以查找HTTP_X_REQUESTED_WITH
标题。
$is_ajax = array_key_exists('HTTP_X_REQUESTED_WITH', $_SERVER)
&& $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
if (! $is_ajax) {
die('go away.');
}
但请注意,它不是标准的,但需要在请求方明确设置。 AFAIK,至少jQuery和Mootools设置了它,可能大多数其他设置它,但不要相信我的话。
答案 1 :(得分:5)
这是不可能的。你不能依赖$_SERVER['HTTP_X_REQUESTED_WITH']
,即使你可以,也没关系。任何人都可以通过POST
或GET
将相同的请求发送到您的浏览器所执行的服务器。
您应该做的是验证请求,如果有效,则返回正确的结果。如果它无效,请不要返回404.(浏览器可以缓存404之类的错误。如果您的客户端代码出现问题,后续请求可能会失败!)如果请求无效,则返回某种错误。
同样,不可能来保护这样的东西。您应该验证会话并请求数据。就是这样。
答案 2 :(得分:2)
最简单的方法是仅通过POST
访问该网页,而不是通过GET
访问该网页。虽然记住 - 如果浏览器可以做到 - 那么黑客也可以。
答案 3 :(得分:1)
您必须使用会话变量,或者更常见的是 Cookie。
使用Cookie:(在JavaScript中设置)
请注意这不安全!这只是为了防止轻松链接。
使用会话变量:(在服务器端设置的Cookie)
此方法与用户身份验证一样安全。