За последние 24 часа нас посетили 55668 программистов и 1707 роботов. Сейчас ищут 1014 программистов ...

Регистрация и авторизация: правильный код

Тема в разделе "PHP для новичков", создана пользователем Валерия, 23 янв 2008.

  1. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ооо! жесть!!! давно такого не видел.
    =)
     
  2. Anonymous

    Anonymous Guest

    [​IMG]
    Это я вааще на память сохранил.
     
  3. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    я в избранное добавил =)
    как будет полный стаканчик, поржу.
     
  4. Ares

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

    С нами с:
    5 окт 2007
    Сообщения:
    25
    Симпатии:
    0
    поясните формат такого пути.

    я так понял это что-то из оперы хеширования. Это делается для безопасного сохранения в БД. Или нет (в примере мы этого не зделали)? Какая функция обратно преобразует строку $ques, для того чтобы вывести её?


    Оцените пожалуста уровень защиты даного примера. Практично ли будет добавить сюда такой элемент защиты?
     
  5. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Ares

    http://php.net/mysql_real_escape_string - утрудись прочтением;)

    ссылка вызовет индексный файл директории с параметром p и значением rules
     
  6. Валерия

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

    С нами с:
    14 ноя 2007
    Сообщения:
    50
    Симпатии:
    0
    Пара дней ушла на запуск сайта, времени не было на форум :) Запустилась на минимуме возможностей, ибо геймеры заждались :)
    Переходим к следующему вопросу: Авторизация на сайте. Вход по логину и выход. Как реализовать ?
    Так как тут не принято на вопрос "А как ... ?" отвечать кодом, то скиньте хотя бы ссылки и намеки на общий принцип, я почитаю и напишу, что смогу :)
    Заранее спасибо, очень жду ответом.
    Хочу реализовать все модулем auth.php, который будет вызываться на каждой странице, проверять, выполнен ли вход, и выставлять переменную $LogIn=true, потом во все остальные части страницы добавлю проверки if($LogIn){То, что выводится для авторизированного пользователя}else{То, что будут видеть гости}
     
  7. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Мадам, умные люди придумали пословицу "только дурак учится на своих ошибках", но сами эти люди никогда этой пословице не следуют. Потому что, когда ты совершаешь ошибку, ты имеешь возможность видеть:
    1) причины, которые привёли к этой ошибке;
    2) путь (шаги), котороые привёли к этой ошибке;
    3) умозаключения, котороые привёли к этой ошибке;
    4) результаты этой ошибки.
    А самое главное, ты все эти пункты можешь проанализировать, дабы в дальнейшем избежать этой, и, как выяснится в процессе анализа, многих других ошибок.
    А все, кто наблюдал за тем, как ты делал эту ошибку, смогут только сделать вывод, что "вот так и так делать нельзя, потому что получится вот так" и не более того. То есть - будут видеть только пункты 2 и 4 - на самом деле - не самые важные для выводов. А точнее - самые не важные.

    Я это к чему - к тому, что подход "не принято на вопрос "А как ... ?" отвечать кодом" как раз предназначен для того, чтобы Вы сами могли делать и, главное, анализировать ошибки, дабы на них учиться и избегать их в дальнейшем.

    А по поводу Вашего вопроса - Вам нужно изучить механизм сессий.
    Начать можно с этого:
    http://phpfaq.ru/sessions
    и этого:
    http://php.ru/manual/features.sessions.html

    С уважением, Роман.

    PS. На вопрос - "а почему именно умные люди придумали эту пословицу?" ответ прост. Если бы пословица звучала именно так, как она и должна звучать: "только умные люди учатся на своих ошибках" - то каждый дурак, который считает себя умным (а таких - подавляющее большинство), считал бы себя вправе совершать кучу ошибок и мир бы просто рухнул из-за кучи идиотских ошибок, которые не надо совершать, потому что и так понятно, что это даже не ошибка, а просто глупость. Например, постулат: "чтобы понять, почему именно нельзя употреблять наркотики, надо их попробовать". Результат сможете представить?
    PPS. Что-то я разошёлся. А всё почему? Потому что у моего любимого провайдера рухнул dns-сервер и я жду, когда его починят, ибо, придурок, не озаботился спросить у яндекса пару-тройку запасных dns-серверов. Хотя знал, что у моего прова dns-сервер частенько падает.
     
  8. Валерия

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

    С нами с:
    14 ноя 2007
    Сообщения:
    50
    Симпатии:
    0
    RomanBush, ну я и не против вовсе такого подхода, ибо совершенно с вами согласна. Хотя до вашего стиля мне далеко, все же позволю себе высказаться - получив в ответ на вопрос "А как ... ?" 5 кусков кода с указаниями вставить их в разные файлы, возможно, и получится что-то рабочее, но (!) когда в следующий раз встанет вопрос о5 об этом же, прийдется либо тупо копировать, либо просить снова, ибо получившие чужой код редко утруждают себя его разбором. Работает да и ладно... :)
    Спасибо за ссылки, чуток попозже почитаю, и прододжим ;)
    Удачи с днс, надеюсь быстро подымут :)
     
  9. Валерия

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

    С нами с:
    14 ноя 2007
    Сообщения:
    50
    Симпатии:
    0
    Ну в общем, вот что получилось. Сразу предупреждаю, механизмы работы сессий пока что понятны мне не до конца. Жду советов по исправлению ошибок. (Защиту пока не пишем, проверки тоже. Сначала с сессиями будем разбираться.)
    Моя цель - сделать так, чтобы пользователь входил, и в зависимости от отметки "Запомнить меня" потом автоматически входил при каждом посещении сайта или же только на один раз, а при следущем просмотре вводил логин и пасс снова. Видимо, cookies надо будет использовать потом, но сначала сессии. :) Итак...
    auth.php
    PHP:
    1.  
    2. <?php
    3. $authform = '
    4. <form name="form1" method="post" action="">
    5. <h2>Авторизация:</h2>
    6. Логин:<input name="inlogin" type="text"><br>
    7. Пароль:<input name="inpass" type="password"><br>
    8. <input type="submit">
    9. </form>
    10. ';
    11. if (isset($_POST['inlogin'])){
    12.     $login = $_POST['inlogin'];
    13.     $pass = $_POST['inpass'];
    14.     mysql_connect("localhost", "root", "root") or die ("Could not connect to MySQL");
    15.     mysql_select_db ("authtest") or die ("Could not select database");
    16.     $query = "SELECT * FROM `users` WHERE `login`='$login' LIMIT 1;";
    17.     $result = mysql_query($query) or die(mysql_error());
    18.     if ($result!=0){
    19.         $user = mysql_fetch_assoc($result);
    20.         if ($user['pass']==$pass){
    21.             $_SESSION['login'] = $login;
    22.             echo "Вы вошли как $login<br><a href = \"exit.php\">Выйти</a>";
    23.         }
    24.         else echo 'Неправильный пароль!! Попробуйте еще.<br>'.$authform;
    25.     }
    26.     else echo 'Пользователь не найден!! Попробуйте еще.<br>'.$authform;
    27. }
    28. else {
    29.     echo $authform;
    30. }
    31. ?>
    32.  
    exit.php
    PHP:
    1.  
    2. <?php
    3. $login = $_SESSION['login'];
    4. unset($_SESSION['login']);
    5. echo $login.", Вы вышли.<br><a href=\"auth.php\">На страницу авторизации</a>";
    6. ?>
    7.  
     
  10. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    В файле - exit.php
    вместо
    можно написать просто:
    Код (Text):
    1. session_destroy();
    а в общем - нормально. Теперь надо сделать всевозможные проверки. Начиная от проверки на то, не забыли ли ввести пароль, заканчивая тем, что надо хотя бы strip_tags на все $_POST натравить.
    И ещё - подлкючение к базе обычно выносят в отдельный файл, который инклудится к странице.
    И ещё момент:
    правильней написать:
    Код (Text):
    1. if ($result){
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    А вот этого я бы делать не стал, что если у меня будет пароль "<b></b>" ?

    Как не раз было сказано следует ознакомиться с http://phpfaq.ru/slashes (и не просто "следует" а "критически необходимо")
     
  12. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Значит, ты не сможешь войти.
    Кстати, подал хорошую мысль - надо мне на своих сайтах сделать - если в пароле юзера есть теги - блокировать таких умных по ip. Во избежание...

    /me пошёл делать.
     
  13. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Мдя, слов нет (точнее есть но цензура их не пропустит)
     
  14. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
  15. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    хм. У меня специфика сайта такая. Параноидальная.
     
  16. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Это не сайт у вас такой, а программист на нём параноик :D

    Кстати её автора вроди тоже Романом зовут (могу ошибаться но вроде)
     
  17. Anonymous

    Anonymous Guest

    Чем теги плохи в пароле?
    Только не говори, что ты хранишь пароль пользователя?
     
  18. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Дык это же опасно, XSS можно туда забить :D
     
  19. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Теги плохи тем, что те посетители, которые реально мне (читай сайту) нужны - просто даже не знают, что такое теги. А суперкулхацкеры мне вообще не нужны. Поэтому проще их сразу блокировать по ip, чем думать, нафига они регились у меня - как нормальные посетители или для выяснения возможностей взлома. Если это нормальный чел - он по человечески напишет мне письмо-вопрос, что мол случилось и как бы мне зарегица. А суперкулхацкер либо вообще не будет писать, либо начнёт орать про дискриминацию и тому подобную чушь. И тогда я займусь вычислением его в оффлайне, с телефонным звонком с просьбой больше не беспокоить общественность.
     
  20. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    пароль я не храню, с головой всё в порядке. :)
     
  21. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ой как сомнительно...
     
  22. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    не, ну если в смысле параноидальности - то могу смело сказать, что вы все за мной следите и только и думаете, как бы меня взломать. Это абсолютно точно.