2011-12-07 112 views
1

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

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

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

+3

不,您**必须**将您的验证码放入处理服务器端代码的每个请求中。 – Flukey

+2

这是一个糟糕的安全模型。 – NullUserException

+0

@NullUserException我没有说这是我的任何生产代码中的安全模型 - 我只是好奇... –

回答

6

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

你可以添加额外的HTTP标头,或者修改现有的(如Accept)当你从JavaScript的请求......但既然你想出于安全原因,做到这一点,那将不足。

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

做到这一点。 Ajax请求并不特殊。它们只是HTTP请求。针对Ajax创建的终点应像其他任何HTTP请求终点一样,通过身份验证/授权进行保护。

+0

谢谢 - 当通过AJAX访问时,PHP的$ _SESSION变量是否会完全相同? –

+0

当然可以。 – Quentin

+0

'WebSockets'怎么样? – candlejack

4

不,不管怎样,黑客都可以伪造Ajax请求。你需要在任何地方进行身份验证,否则你会被搞砸。

2

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

现在什么不能很容易被欺骗是一个安全的会话机制。如果您要求人们登录,那么无论如何您都应该这样做。

1

简单的答案,“不”。

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

1

AJAX与Standart请求几乎相同,您可以检查标题,但这不是安全的方式。如此之短,你不能这样做。在服务器端对你提出的建议进行认证。

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 
    } 
} 
-1

好了,你可以有另一种选择是使用post方法来获得从PHP的内容,并在你的PHP你应该设置为post方法的关键。然后系统删除跨源访问。 :)

相关问题