Методы пользовательской системы - PullRequest
1 голос
/ 13 сентября 2010

Не знаю, задавался ли этот вопрос раньше, но я с этим разберусь.

Если бы вы создали систему на PHP, которая позволяла бы пользователям регистрироваться и входить в систему, включая уровни пользователей. Как бы вы полностью создали эту систему? Напомните себе о сессиях, какой именно лучший метод вы бы использовали, когда будете осторожны с сессиями - я имею в виду перехват сессий при включении паролей (конечно, хэшированных), уровня пользователя и т. Я обнаруживаю себя при кодировании системы входа пользователя в систему, это плохой метод при использовании сеансов для отображения модулей, например:

if(isset($_SESSION['user']) && isset($_SESSION['user_level']))
{
    if($_SESSION['user_level'] == 3)
    {
        // show admin tools
    }
    elseif($_SESSION['user_level'] == 2)
    {
        // show moderator tools
    }
}

Я даже использовал что-то вроде этого:

if(isset($_SESSION['user']) && !empty($_SESSION['user']))
{
    $sql = "SELECT user_id, username, user_level
            FROM members
            WHERE username = '" . $_SESSION['user'] . "'";

    $result = mysql_query($sql) or die(mysql_error());

    if(mysql_num_rows($result) == 1)
    {
        while($row = mysql_fetch_array($result))
        {
            $uid = $row['user_id'];
            $u_name = $row['username'];
            $u_level = $row['user_level'];
        }
    }
}

Итак, когда я использую что-то вроде этого:

if($u_level == 3)
{
    // show admin tools
}

Был бы лучший пример, не так ли?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

Это в принципе плохо. Вот что я делаю:

Я установил случайный идентификатор сессии (sessionid) в массиве $_COOKIE[]. Я использую cookie, потому что я использую ajax с php, что (я чувствую) делает вещи немного легче для меня. Не стесняйтесь использовать $_SESSION.

Тогда в моей базе данных есть таблица, которая говорит мне:

  1. Этот сеанс существует?
  2. когда начался этот сеанс?
  3. когда этот сеанс последний раз общался с сервером?
  4. К какому пользователю относится этот сеанс?
  5. с каким IP-адресом связан этот сеанс?

Таблица пользователей сообщает мне user level пользователя.

Помните: все, что вы получаете от $ _COOKIE, никогда не заслуживает доверия на 100%. Поэтому никогда не вкладывайте в них конфиденциальную информацию. Примеры того, что не следует указывать в этих переменных:

  1. ИД пользователя - внутренний идентификатор, который вы используете для пользователя (если он не предназначен для общего пользования, например, ИД пользователя)
  2. пользовательские привилегии / разрешения
  3. другая информация о сеансе, например время последней активности или время входа в систему

Надеюсь, это поможет,
JRH

0 голосов
/ 13 сентября 2010

Введение

Лично я бы не пытался внедрить систему входа в систему (многое может пойти не так с безопасностью).Многие умные люди собрали воедино знания, чтобы определить систему безопасного входа в систему (с открытым исходным кодом). Если вы все еще хотите знать, как реализовать такую ​​систему безопасно, я бы посоветовал вам взглянуть на спецификацию и реализацию OpenID , OAuth на вашем языке.

  1. Аутентификация (логин): OpenID
  2. Авторизация (авторизация разрешений): OAuth

Цитатас YAHOO

Пока Yahoo!использует OpenID в качестве механизма аутентификации пользователей, Yahoo!также использует OAuth для авторизации разрешения для потенциально конфиденциальных пользовательских данных.

Аутентификация

Цитата из OpenID

Не могу вспомнитьваши пароли?Устали от заполнения регистрационных форм?OpenID - это безопасный, быстрый и простой способ входа на веб-сайты.

Я бы лично использовал OpenID-потребительскую библиотеку вместо создания с нуля (я пыталсядля этого нужно много входов и выходов).

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

Источник информации:

Авторизация

Вы можете использовать OAuth для авторизации (разрешения)

Цитата из OAuth site

Открытый протокол для безопасной авторизации APIпростым и стандартным способом из настольных и веб-приложений.

...