PHP - 仅允许通过AJAX访问

时间:2011-12-07 19:24:29

标签: php javascript jquery ajax apache

在我的CMS中,我有一个页面,它使用AJAX将大量迷你接口加载到面板中。这些接口来自/ajax目录中的各种PHP文件。

是否有可能以某种方式仅允许使用ajax访问这些文件,而不仅仅是浏览它们?

当然,我关心的是有人发现/ajax目录,并且无需登录即可访问CMS的核心功能。当然我可以导入我的用户类并单独验证每个AJAX文件,但是是否可以只允许通过AJAX进行访问?

7 个答案:

答案 0 :(得分:6)

  

是否有可能以某种方式仅允许使用ajax访问这些文件,而不仅仅是浏览它们?

没有

当您从JavaScript发出请求时,您可以添加额外的HTTP标头或修改现有标头(例如Accept)但是由于您出于安全原因尝试执行此操作,这将是不够的。

  

当然,我可以导入我的用户类并单独验证每个AJAX文件

那样做。 Ajax请求并不特殊。它们只是HTTP请求。为Ajax创建的端点应该使用身份验证/授权进行保护,就像任何其他HTTP请求端点一样。

答案 1 :(得分:4)

没有。无论如何,黑客可能只是伪造Ajax请求。你需要在任何地方进行身份验证,否则你会被搞砸。

答案 2 :(得分:2)

从浏览器外部,任何人都可以向您网站上的任何公共网址发起HTTP请求。除了标题之外,AJAX请求没有什么特别之处,而且这些请求很容易被欺骗。

现在无法轻易欺骗的是一种安全的会话机制。如果你要求人们登录,那么无论如何你应该这样做。

答案 3 :(得分:1)

简单回答,“不”。

您的ajax文件还应验证用户的登录方式与系统前端的登录方式相同。

答案 4 :(得分:1)

AJAX与标准请求的请求几乎相同,您可以检查标头,但这不是安全的方式。这么短,你不能这样做。在服务器端验证您的建议。

答案 5 :(得分:0)

验证您的AJAX文件。如果有很多,请创建一个类并在每个单独的AJAX文件中扩展它。

/ajax/abstract.php

<?php
abstract class AjaxHandler {

    public function __construct() {
        // import authentication handler
        if ($authenticated) {
            $this->display();
        }
        else {
            header('HTTP/1.1 401 Unauthorized');
            exit;
        }
    }
}

然后在每个文件中,即/ajax/get_user_profile.php

<?php
class GetUserProfile extends AjaxHandler {

    public function display() {
        // do your routine
    }
}

答案 6 :(得分:-1)

好吧,你可以选择的另一个选择是使用post方法从php中获取内容,在php中你应该为post方法设置一个键。然后系统范围删除跨源访问。 :)