Авторизация куки + сессии + пгскул

Тема в разделе "PHP", создана пользователем afonya09, 5 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    PHP:
    session_start();
     if (
    $_POST['loginout']) {    
        
    setcookie("login"""time()-36000);
        
    setcookie("password"""time()-36000);
        
    session_destroy();
        
    Header("Location: ".$_SERVER['HTTP_REFERER']);   
    }

    if (
    $_POST['login']!='' && $_POST['password']!='' && $_SESSION['grant'] != 1) {    
        
    $login pg_escape_string($_POST['login']);
        
    $password pg_escape_string(md5(md5($_POST['password'])));    
        
    $result pg_query($db"SELECT user_id FROM people where user_name='".$login."' and user_pass='".$password."'");
        if (
    $result) {
              
    $row pg_fetch_row($result);          
              
    $_SESSION['grant'] = 1;    
              
    $_SESSION['login'] = $login;          
              
    setcookie("login"$logintime() + 36000,"/"$_SERVER['SERVER_NAME'], 0);
            
    setcookie("password"$passwordtime() + 36000,"/"$_SERVER['SERVER_NAME'], 0);
            
    Header("Location: ".$_SERVER['HTTP_REFERER']); 
        }  
    }

    if (
    $_SESSION['grant']!=1) {
        if (isset(
    $_COOKIE['login']) && isset($_COOKIE['password'])) {       
            
    $login pg_escape_string($_COOKIE['login']);
            
    $password pg_escape_string($_COOKIE['password']);
            
            
    $result pg_query($db"SELECT user_id FROM people where user_name='".$login."' and user_pass='".$password."'");
            if (
    $result) {
                  
    $row pg_fetch_row($result);              
                  
    $_SESSION['grant'] = 1;
                  
    $_SESSION['login'] = $login;    
            }  
        }   
    }
    if (
    $_SESSION['grant'] == 1){
        echo 
    "<form action=index.php?loginout=ok method=post name=au><input type=submit value=Выйти  name=loginout>";
    }else {
        echo 
    "<form action=index.php method=POST name=au>Name:<input type=text name=login maxlenght=20>";
            echo 
    "Pass:<input type=password name=password maxlenght=16 size=12>";
    echo 
    "<input type=submit value=Войти name=sub> ";
    echo 
    "<a href=index.php?act=1>Регистрация</a><hr noshade></form>";
    }
    Ваше мнение насколько безопасно от взлома??
     
  2. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    А зачем вы используете pg_escape_string без проверки на включение магических кавычек
    отфильтруйте вх данные в том числе и куки через РВ
    забыли exit;
     
  3. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    Разве pg_escape_string не достаточно??
    Зачем exit у меня дальше модули грузяца.
     
  4. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Зачем md5-строку то проверять? в ней уж точно ковычка не появится.. ;)
     
  5. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    Точно сразу не понял но это ведь не ведет к уезвимости ведь так??
    Ну а если с точки зрения безопасности насколько все безопасно кража кук не в счет??
     
  6. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    если магические кавычки включены то pg_escape_string добавит лишние слэши...насчет exit не дописал что надо сделать рефреш и exit чтобы перегрузить страницу и очистить форму .
     
  7. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    Зачем перегружать?? Лишний траффик и нагрузка!!!
     
  8. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Если обработчик и форма в одном скрипте то перегрузить надо обязательно чтобы очистить поля формы иначе по ф5 будут снова вводиться те-же данные.. если форма отдельно от обработчика то надо в обработчике после внесения данных в бд делать редирект на основную или куда нибудь и завершить работу скрипта..причина та-же самая...трафик мизер ну если уж совсем хочется его минимизировать пользуйтесь аяксом...
     
  9. NoN

    NoN Постоялец

    Регистр.:
    25 ноя 2008
    Сообщения:
    79
    Симпатии:
    33
    Я делаю так..

    Есть таблица с sesions_key, в ней поля hash_key и user_id,
    при успешном логине или где поставили галочку запомнить меня, в табилицу пишется случайнос генерированый хеш и id пользователя, и этот хеш пишется ему в куки.

    Далее если он заходит на сайт и у него нет сессии то проверяется куки, и если есть в куках хеш и он присутсвует в таблице, то пользователь автоматически авторизируется.
     
  10. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    я бы не советовал хранитьв куках пароль, пускай даже в захешированном виде.
    при краже кук, подбор пароля вопрос времени.
    хотя двойной хеш в несколько тысяч раз лучше, чем одинарный, но все же это является недостаточно безопасным.
    лучше генерировать случайный хеш при авторизации, и заносить его в БД для данного пользователя, и в куки ему
    только хеш должен быть действительно случайным.
    то есть не просто от времени, умноженного на случайное число(такой хеш довольно быстро выявляется, а затем подбирать хеши для доступа по кукам только дело техники)
    хеш должен братся от строки случайной длины, содержащей в себе что угодно, но главное, чтобы одна такая строка не была похожа на другую
     
Статус темы:
Закрыта.