Ответ аутентификации Ajax - PullRequest
0 голосов
/ 22 марта 2010

У меня есть форма входа, которую я рассматриваю, должна ли она быть «ajax» или нет.
Причина, по которой я размышляю об этом, заключается в том, что если ответ на вызов ajax фиксирован (например, 0 для недействительного и 1действительно) Я могу перенаправить запрос ajax через консоль javascript и злонамеренно войти в систему.
Есть ли способ решить эту проблему безопасности?
Поэтому все формы входа, которые я видел до сих пор (включаяздесь на stackoverflow) не являются AJAX?

Ответы [ 2 ]

2 голосов
/ 22 марта 2010

Вы должны убедиться, что весь контент, который должен отображаться только зарегистрированным пользователям, должен передаваться только после процесса входа. Серверная сторона должна при каждом запросе проверять, вошел ли пользователь в систему или нет. Это может быть сделано традиционными методами (такими как идентификаторы сессии в cookie или post / get).

Короче говоря: не передавайте фиксированные значения, а передавайте обычный идентификатор сеанса, который варьируется от пользователя к пользователю.

1 голос
/ 22 марта 2010

Вы входите в систему с помощью ajax.

Серверная сторона проверяет логин и начинает сеанс.

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

В PHP (пример):

Логин:

<?php
header('Content-type: text/json');

session_start();

if ( check_password() ) {
  // send ok response
}
else {
  // send not ok response
}

// if that session variable exists, then we logged in successfully
$_SESSION['user']    = $user;

другие вызовы ajax:

<?php
header('Content-type: text/json');
session_start();

if ( ! isset($_SESSION['user'] )) {
  // send not ok response 
  // on the client, this will redirect to the login page
  exit;
}

$user=$_SESSION['user'];

... rest of the code here

Для каждого вызова ajax, когда приходит ответ, вы должны сначала проверить, в порядке ли ответ, - до вас, чтобы определить, как вы хотите, чтобы это было представлено.

В качестве примера ответ может выглядеть в JSON как

  • не зарегистрировано: { "ok":"N","error":"not logged in"}
  • зарегистрировано: { "ok":"Y","data":[{"name":"xxxx","age":19},{"name":"yyy","age":91}]}
  • или { "ok":"Y","data":"Some text"}

и т. Д., И т. Д. *

Если все в порядке, вы приступаете к обработке ответа. Если нет, вы можете, например, перенаправить на страницу входа.

Обратите внимание, что в PHP каждый вызов ajax автоматически включает идентификатор сеанса (это cookie), поэтому PHP знает, какой сеанс связан с конкретным запросом.

...