在我的CMS中,我有一个页面,它使用AJAX将大量迷你接口加载到面板中。这些接口来自/ajax
目录中的各种PHP文件。
是否有可能以某种方式仅允许使用ajax访问这些文件,而不仅仅是浏览它们?
当然,我关心的是有人发现/ajax
目录,并且无需登录即可访问CMS的核心功能。当然我可以导入我的用户类并单独验证每个AJAX文件,但是是否可以只允许通过AJAX进行访问?
答案 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
方法设置一个键。然后系统范围删除跨源访问。 :)