ФорумРазработкаБазы данных → Авторизация

Авторизация

  • franzose

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 19 октября 2008 г. 22:24

    У меня такой вопрос к форумцам.

    Для админки сайта написал скрипт проверки данных логин-пароль.

    auth.php

    <?php
    //подключаем настройки
    include('db_settings.php');

    $connect = mysql_connect($server, $user, $password) or die('соединиться с базой не удалось');
    mysql_select_db($db, $connect) or die('соединиться с базой не удалось');

    if (isset($_POST['submit']))
    {
    if (!empty($_POST['login']) && !empty($_POST['password']))
    {
    $login    = sha1($_POST['login']);
        $password = sha1($_POST['password']);

        $query = "SELECT * FROM `$db`.`users` WHERE login='".mysql_real_escape_string($login)."' AND password='".mysql_real_escape_string($password)."'";

        $qres = mysql_query($query, $connect) or exit;

           if ($data = mysql_fetch_assoc($qres))
        {
        //если верная пара логин-пароль

        //выставляем время жизни сессии
        ini_set('session.cookie_lifetime', SESSION_LIFETIME);

        //убиваем прошлую сессию
        //создаем новую
        session_unset();
        session_destroy();
        session_start();

        //создаем переменные сессии
        $_SESSION['login']    = $login;
        $_SESSION['password'] = $password;

        //перенаправляем на главную страницу
        header("Location: http://admin.example.ru/afterlogin");
        }
        else
        {
        //если неверная пара логин-пароль
               //отправляем на главную страницу admin'а
        session_start();
        session_destroy();

        //выводим сообщение об ошибке
        print ERROR_WRONG_SUBMIT;
        }
    }
    else
    {
    //если отправлен пустой запрос
    //отправляем на главную страницу admin'а
    session_start();
        session_destroy();
        header("Location: http://admin.example.com/");
    }
    }


    Суть ясна: при удачной попытке пользователь попадает на страничку http://admin.example.com/afterlogin
    Однако, дабы избежать попытки проникновения на эту страничку без авторизации, я написал еще один скриптик для того случая, если кто-то попытается зайти сразу на http://admin.example.com/afterlogin:


    <?php

    //загружаем настройки
    include('db_settings.php');

    //устанавливаем время жизни сессии (константа, определена в db_settings.php)
    ini_set('session.cookie_lifetime', SESSION_LIFETIME);
    session_start();

    //соединение с базой
       $connect = mysql_connect($server, $username, $password);
    mysql_select_db($db, $connect) or die('соединиться с базой не удалось… '.mysql_error($connect));
    mysql_query("set names cp1251", $connect);

    //если существуют переменные сессии,
    //устраиваем проверку
    if (isset($_SESSION['login']) && isset($_SESSION['password']))
    {
    //определяем переменные сессии
    $sess_login    = $_SESSION['login'];
    $sess_password = $_SESSION['password'];

    $query = "SELECT * FROM $db.`users` WHERE login='".mysql_real_escape_string($sess_login)."' AND password='".mysql_real_escape_string($sess_password)."'";

    $qres = mysql_query($query, $connect) or exit;

    //если данные не совпадают
    if ($data != mysql_fetch_assoc($qres))
    {
    session_start();
    session_destroy();
    //header("Location: http://admin.example.com/");
    print ERROR_WRONG_SUBMIT;
    }
    //если совпали, включаем код страницы afterlogin
    else
    {
    include('pages/afterlogin.html');
    }

    }
    //иначе перенаправляем на главную админскую страницу
    else
    {
    session_start();
    session_destroy();
    header("Location: http://admin.example.com/");
    }

    ?>


    Так вот. У меня вопрос. А если сделать в обоих файлах переменную типа $_SESSION['is_authorized'], которой присваивать либо true, либо false и во втором файле проверять лишь эту переменную? Будет ли это безопасный способ?
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 19 октября 2008 г. 22:41, спустя 16 минут 50 секунд

    внимание, сессия хранится на сервере, устанавливаете переменные только вы
    почему не доверять своим, установленным переменным???

    Авторизация и запоминание пользователей для начинающих
    все умрут, а я изумруд
  • franzose

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 19 октября 2008 г. 22:52, спустя 11 минут 21 секунду

    спасибо за ссылку, прочитаю обязательно!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!