PHP безопасная проверка сеанса? - PullRequest
1 голос
/ 26 июля 2010

У меня есть сеанс, который я дал пользователям, у которого есть соответствующий пароль = сохраненный пароль, как простая система входа в систему:

// Checks Password and Username
if ($pSys->checkPassword($AccountData['password'], $StoredData['password'])) {
    $_SESSION['login'] = true;
}

Вопрос: достаточно ли это безопасно?

// put this on every header page that needs to be loggedin.
function loginCheck(){
    if ( empty( $_SESSION['login'] )) {
        header( 'location:index.php' );
        die();
    }
}

Есть ли разница между die() и exit()? Во-вторых, некоторые говорят, что я должен добавить session_regenerate_id()? (Это избыточное убийство?) В любом случае, реальный вопрос задан выше.

Аддон *

Я прочитал PHP Session Security , но, похоже, это не соответствует моей проблеме (эта ссылка только для общего характера).

Вот метод checkPassword()

function checkPassword($password, $storedpassword) {
    if($password == $storedpassword){
        return true;            
    }
}

Ответы [ 3 ]

3 голосов
/ 26 июля 2010

Отвечая на первую часть: empty и die не сопоставимы:

  • empty предназначено для проверки того, что переменнаяне существует или имеет значение, равное false (см. также таблицу сравнения типов ).
  • die - псевдоним exit и используется длянемедленно прервите выполнение текущего сценария с дополнительным сообщением.

Теперь к вашему примеру аутентификации: Да, вы должны использовать session_regenerate_id, чтобы сгенерировать новый идентификатор сеанса и отозватьстарый идентификатор сеанса, задав для необязательного параметра для session_regenerate_id значение true:

if (!sizeof($ErrorAccount)) { // Checks Password and Username
    session_regenerate_id(true);
    $_SESSION['login'] = true;
}

Цель session_regenerate_id состоит в том, чтобы избежать фиксации сеанса атак.В этом нет необходимости, если сервер разрешает отправлять только идентификаторы сеансов с помощью файлов cookie, но, поскольку PHP по умолчанию разрешает их в URL, настоятельно рекомендуется сгенерировать идентификатор.

1 голос
/ 10 августа 2010

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

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

Подробнее

1 голос
/ 27 июля 2010

Поскольку вы ищете ответы о безопасности, также не храните сохраненный пароль в виде простого текста. По крайней мере, соль и хэшируйте свои пароли, затем сохраните хэш. Перефразируйте и сравнивайте хэши, а не простой текст.

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