правильный способ создать вызов ajax с php и auth - PullRequest
1 голос
/ 08 декабря 2010

С точки зрения безопасности, может ли кто-нибудь дать мне пошаговый (но очень простой) путь к защите вызова ajax при входе в PHP?

Пример:

  1. на странице php есть идентификатор сеанса, присвоенный вошедшему в систему пользователю.
  2. идентификатор сессии динамически помещается в javascript перед отправкой страницы клиенту.
  3. клиент нажимает кнопку «отправить», которая отправляет данные (включая идентификатор сеанса) обратно на страницу обработки php.
  4. страница обработки php подтверждает идентификатор сеанса, выполняет задачу и отправляет обратно данные

Я застрял на том, как (и нужно ли) защищать данные сеанса перед отправкой через ajax-запрос. Я не собираю здесь банк, но меня беспокоит то, как много вызовов ajax направляются на «открытые» php-страницы, которые могут просто принимать запросы откуда угодно (учитывая, что источники могут быть подделаны).

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

PHP может получить данные сеанса без необходимости отправлять идентификатор сеанса через javascript. Просто используйте переменную $ _SESSION. Если вы хотите проверить, существует ли сессия, вы можете просто сделать

if(isset($_SESSION['some_val'))
   //do work son.

Вам нужно будет использовать JavaScript для асинхронной передачи пользовательского ввода обратно на сервер, но не для отслеживания сеанса.

0 голосов
/ 08 декабря 2010

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

Это еще одна часть вашего вопроса, которая беспокоит меня.

Я обеспокоен тем, что так много вызовов ajax идут на "открытые" php-страницы, которые могут просто принимать запросы из любой точки

Это меня тоже беспокоит; у вас не должно быть никаких открытых PHP-страниц. Каждый публичный скрипт .php должен иметь аутентификацию и авторизацию. IMHO, самый простой и наиболее приемлемый способ достижения этого - это иметь один скрипт контроллера (например, index.php), который выполняет аутентификацию и авторизацию, а затем отправляет запрос в соответствующий контроллер. Кроме этого контроллера, все остальные сценарии должны быть вне корня документа , чтобы они не могли вызываться напрямую.

Это означает, что вам когда-либо придется беспокоиться об аутентификации и авторизации только в одном месте; если вам нужно изменить его, он меняется только в одном месте. Это означает, что вам не нужно беспокоиться о случайном оставлении некоторых исполняемых файлов в некотором библиотечном PHP-файле, который не должен вызываться напрямую. Это означает, что вам не нужно шутить с правилами mod_rewrite, пытающимися защитить файлы .php, которые вообще не должны находиться в корне документа.

0 голосов
/ 08 декабря 2010

Не отправляйте данные сеанса с помощью JavaScript.

Вам не нужно (в большинстве случаев).

Просто отправьте данные с помощью JavaScript и позвольте PHP получить данные сеансаfrom ... session.

Зависит от того, как вы настроили данные сеанса.

Один простой пример: у вас есть сеанс с именем username.

Когда PHP получаетзапросить у javascript вы можете сделать: $ _SESSION ['username'] для получения данных сессии.

Это очень простой пример, чтобы показать, как это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...