2011-12-07 6 views
1

В моей CMS у меня есть страница, которая загружает большое количество мини-интерфейсов в панель с использованием AJAX. Эти интерфейсы поступают из различных файлов PHP в каталоге /ajax.PHP - разрешить доступ только через AJAX

Возможно ли каким-либо образом разрешить доступ к этим файлам с помощью ajax, а не только к просмотру их?

Моя забота, конечно, заключается в том, что кто-то узнает о каталоге /ajax и получает доступ к основным функциям CMS без необходимости входа в систему. Конечно, я могу импортировать свой пользовательский класс и аутентифицировать каждый из файлов AJAX по отдельности, но можно ли разрешить доступ только через AJAX?

+3

Нет, вы ** должны ** поместить свой код аутентификации в каждый запрос, который обрабатывает серверный код. – Flukey

+2

Это ужасная модель безопасности. – NullUserException

+0

@NullUserException Я не сказал, что это была моя модель безопасности в любом производственном коде - мне было просто любопытно ... –

ответ

6

Возможно ли каким-либо образом разрешить доступ к этим файлам с помощью ajax, а не только путем просмотра их?

No.

Вы можете добавить дополнительные заголовки HTTP, или модифицировать существующие (например, Accept), когда вы делаете запрос от JavaScript ... но так как вы пытаетесь сделать это по соображениям безопасности, что бы быть недостаточным.

Конечно, я мог бы импортировать мой класс пользователей и аутентификации каждого из AJAX-файлов по отдельности

ли это. Запросы Ajax не являются особенными. Это всего лишь HTTP-запросы. Конечные точки, созданные для Ajax, должны быть защищены аутентификацией/авторизацией, как и любая другая конечная точка HTTP-запроса.

+0

thanks - будет ли переменная PHP '$ _SESSION' быть одинаковой при доступе через AJAX? –

+0

Да, конечно. – Quentin

+0

Как насчет 'WebSockets'? – candlejack

4

Нет. Хакер может просто подделывать запросы Ajax, во всяком случае. Вы должны аутентифицироваться повсюду, или вы будете ввернуты.

2

С внешней стороны браузера можно инициировать HTTP-запросы на любой публичный URL-адрес на вашем сайте. Нет ничего особенного в запросах AJAX, кроме заголовков, и их можно легко подделать.

Теперь, что не может быть легко подделанным является безопасным механизмом сессии. Если вы требуете, чтобы люди вошли в систему, то вы все равно должны это делать.

1

Простой ответ «нет».

Ваши файлы ajax также должны проверять, что пользователь зарегистрирован так же, как и передняя часть вашей системы.

1

AJAX - это почти тот же запрос, что и стандартный запрос, который вы можете проверить, но это не безопасный способ. Короче, вы не можете этого сделать. Аутентификация на стороне сервера того, что вы предложили.

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. И тогда система в целом удаляет перекрестный доступ. :)

Смежные вопросы