За последние 24 часа нас посетили 49867 программистов и 1755 роботов. Сейчас ищут 685 программистов ...

Можно ли так поступать с авторизацией?

Тема в разделе "Вопросы от блондинок", создана пользователем tommyangelo, 13 апр 2010.

  1. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Доброго времени суток.

    Имеется скрипт admin.php, отвечающий за редактирование содержимого веб-сайта.
    Устроен по принципу - анализ GET и include различные файлы с формами, файлы записывающие всё в базу и т.п.

    Авторизацию сделал так -

    PHP:
    1. <?php
    2.  
    3.  
    4. if ($_SESSION['auth'] === "auth") {
    5.    
    6.    //тут switch GET и целая пачка case : include
    7.    
    8.    }
    9.  
    10. else {
    11.  
    12.   //если нажата POST['submit'] дергаем пароль из базы и сверяем с полученным из формы.
    13.    
    14.    Совпадает - $_SESSION['auth'] = "auth" и перенаправление на самого себя
    15.    
    16.    Не совпадает - сообщение об ошибке
    17.  
    18.    если не нажата - выводим форму.
    19.  
    20. }
    21. ?>
    Собственно вопрос - нормальна ли данная авторизация, или ... ... белую краску для волос уже купил))

    П.с. - запись в базе всего одна и более не предвидится. Т.е. исключительно админ-редактор.
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а самые критичные вещи таки не показал: проверка пароля и подключение файла.

    А вообще, для бытовых нужд нормально
     
  3. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    файл просто include_once(blabla.php)

    проверка

    PHP:
    1.  
    2. <?php
    3. $login = get_chars($_POST['login']); // get_chars - stripslashes + trim + strip_tags
    4. $password = get_chars($_POST['password']);
    5.  
    6. $sql="SELECT * FROM admin_users WHERE login = '".$login."' AND password = '".md5($password)."'";
    7.  
    8. $rs = mysql_query($sql);
    9. $arr = mysql_fetch_assoc($rs);
    10.  
    11. if (mysql_num_rows($rs)>0 && md5($password)==$arr['password']) {
    12. $_SESSION['auth'] = "auth";
    13. header("Location:".$http_path."admin");
    14. }
    15. ?>
     
  4. Superk

    Superk Активный пользователь

    С нами с:
    5 фев 2010
    Сообщения:
    32
    Симпатии:
    0
    $login=mysql_escape_string($login);
    $sql="SELECT * FROM admin_users WHERE login = '".$login."' AND password = '".md5($password)."'";

    session_start после проверки логина с паролем, а не в начале страницы

    $_SESSION['auth'] === "auth" - в твоем случае, сойдет, так лучше не делать.
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    session_start в начале, потому что при каждом обновлении страницы (в include-файлах содержатся формы) мы не запрашиваем пароль, а просто проверяем наличие $_SESSION['auth']===auth

    mysql_escape_string - спасибо, дорисую. Я слегка путаюсь с её применением)
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    http://phpfaq.ru/slashes

    и
    надеюсь не
    PHP:
    1. <?php
    2. include $_GET['page'].'.php';
    3. ?>
    ?
     
  7. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    нет-нет))
    там я писал что switch-case.

    Значения GET['page'] только те, что в case упоминаются - default выводит меню.
     
  8. Superk

    Superk Активный пользователь

    С нами с:
    5 фев 2010
    Сообщения:
    32
    Симпатии:
    0
    тогда
    PHP:
    1.  
    2. <?php
    3.  
    4. if ($_SESSION['auth'] === "auth") {
    5.    
    6. //тут switch GET и целая пачка case : include
    7.  
    8. }
    9. else  session_destroy();
    10. ?>
    11.  
     
  9. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    ммм....если честно, не понимаю смысла.

    в сессию ничего кроме этой переменной не записывается.
     
  10. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    tommyangelo, в сессию запишите необходимую Вам информацию об авторизованном пользователе.
    Важно, чтобы сессию авторизованного пользователя не угнали, получив SID.
    Этого будет достаточно для обеспечения безопасности Вашего приложения.
     
  11. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Нужно записать лишь тот факт, авторизован он или нет. Используется переменная $_SESSION['auth'].

    А где можно почитать о том, как угнать SID ?
     
  12. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Cид передается в куках или GET/POST, в последнем случае он приписывается параметром ко всем внутренним ссылкам и формам. Обычно называется PHPSESSID
     
  13. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Понятно. Спасибо большое. Буду продолжать учить)