PHP - разрешить доступ только через AJAX - PullRequest
1 голос
/ 07 декабря 2011

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

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

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

Ответы [ 7 ]

6 голосов
/ 07 декабря 2011

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

номер

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

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

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

4 голосов
/ 07 декабря 2011

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

2 голосов
/ 07 декабря 2011

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

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

1 голос
/ 07 декабря 2011

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

1 голос
/ 07 декабря 2011

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

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

0 голосов
/ 19 марта 2015

Ну, альтернативный вариант, который вы могли бы использовать, - это использовать метод post для получения контента от php, и в вашем php вы должны установить ключ для метода post. А затем в масштабе всей системы удалите перекрестный доступ. :)

0 голосов
/ 07 декабря 2011

Аутентифицируйте ваши 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...