За последние 24 часа нас посетили 17584 программиста и 1719 роботов. Сейчас ищут 939 программистов ...

Создание спортивного дневника

Тема в разделе "PHP для новичков", создана пользователем Stasrot1, 29 сен 2007.

  1. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    абсолютно верно
    соль используется для усложнениия пароля и не более того.
     
  2. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Спасибо! Немного базу откоректирую. И в скрипт регистрации внесу изменения относительно "соли".

    И еще:
    Особенно интересно что такое "КАПТЧА"!????? :)
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  4. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Теперь понял! Спасибо! Только что получил файлы по ЛС, буду изучать, хотя спать уже клонит.
     
  5. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Мне не все понятно в твойх скриптах, общая логика ясна, но по части синтаксиса я пока слаб и неочень понимаю что значит вопросик к примеру вот сдесь, боюсь только что это вообще очень плохо, что я этого еще не знаю!

    Вот сдесь к примеру:
    PHP:
    1. <?php  $cmd = isset($_GET['cmd'])?trim($_GET['cmd']):'login'; ?>
    Это наверное самое непонятное.

    Вот еще: тоже не понятно что значит, скорее всего это какое то упрощение более сложного синтаксиса? :
    PHP:
    1. $str .=
    В общем если немного побольше комментариев по синтаксису и чуть меньше по логке, я думаю у меня будет полная ясность в этом вопросе!

    Извини если кажусь слишком настырным. Но все же я очень хочу реализовать свой проет, а сейчас делаю систему, которая бы регистрировала разработчиков, идейных авторов и так далее, ну вы сами поняли! Это будет отдельный модуль моей системы (SportAnalayzer).

    К тому же я договорился предварительно с одной компанией о создании специального, спциализированного и заточенного под греблю навигационного прибора GPS с которого планируется поставка данных в разрабатываемую систему, как лучше организовать обмен данными с этим устройством, вот варианты по Блюту3су это дешевле так как енадо делать в устройстве GPRS передачу, или все таки по GPRS устройство управляется я так понял Явой. Что мне может посоветуете по этому поводу?

    С уважением, заранее спасибо. :)
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    PHP:
    1. <?php
    2.   if(isset($_GET['cmd']))
    3.   {
    4.     $cmd = trim($_GET['cmd']);
    5.   }
    6.   else
    7.   {
    8.     $cmd = 'login';
    9.   }
    10. ?>
    $str = $str . 'что-то';
     
  7. Anonymous

    Anonymous Guest

  8. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Спасибо!
     
  9. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Пробую дописать свой скрипт по авторизации пользователей на сайте.
     
  10. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Доброй ночи! Вот туго что то у меня получается, еле логику натянул, проверьте вроде правильно? Осталось запрограммировать ее на ПХП. Постараюсь сам разобраться.
    Вот код скрипта авторизации:
    PHP:
    1. <?php
    2. //session_name(aftoriz_razrabotchikov);
    3. echo '
    4. <head>
    5.     <title>Афторизация разработчика системы "SportAnalayzer"</title>
    6. </head>';
    7. echo "<body bgcolor='#d0fa92'>";
    8.  
    9.  
    10. $forma_aftoriz= "<form action='' method=POST>
    11. <table>
    12. <tr>
    13.   <table>
    14.   <tr>
    15.     <td>Имя разработчика:</td>
    16.     <td><input type=text name='aftoriz_name_avtora' size='37' maxlength='30' value='$_SESSION[aftoriz_name_avtora]'></td>
    17.   </tr>
    18.  
    19.   <tr>
    20.     <td>Ваш пароль:</td>
    21.      <td><input type=password name='aftoriz_password' size='37' maxlength='30' value = '$_SESSION[aftoriz_password]'></td>
    22.   </tr>
    23.  </table>
    24. </tr>
    25. <tr>
    26. <table>
    27. <tr>
    28. <td>
    29.     <input type=submit name='aftoriz' value='Афторизоваться'>
    30. </td>
    31. </tr>
    32.      
    33. </table>
    34. </tr>
    35. </table>
    36. </form>
    37. ";    
    38.  
    39. if (!isset($_POST['aftoriz_name_avtora']) && !isset($_POST['aftoriz_password'])) {
    40.  echo 'Здравствуйте, введите свои учетные данные для афторизации среди разработчиков системы!';
    41. $error='n';
    42.  echo $forma_aftoriz;
    43. }
    44. else
    45. {
    46. //Удаляем начальные и конечные пробелы в вводимом значении поочереди в каждом нужном нам поле при помощи trim();.
    47. //Сейчас проверяем наличие переменной $_POST['name_avtora'].
    48.     if (isset($_POST['aftoriz_name_avtora'])) {$name=trim($_POST['aftoriz_name_avtora']); $name=htmlspecialchars($name); $_SESSION['aftoriz_name_avtora']=$name;} else $name=="";
    49.     //Если значение переменной пусто, то выводим сообщению пользователю об ошибке и устанавливаем флажек об ошибке $error='y';.
    50.     if ($name=="")  {$error='y';
    51.            //Если переменнвая $name_avtora не установлена, просим повторить ввод данных пользователем.
    52.     echo 'Вы не ввели "<font color="#FF0000">Имя разработчика</font>"<br>';
    53.         };
    54.        
    55.         //Сейчас проверяем наличие переменной $_POST['password'].
    56.     if (isset($_POST['aftoriz_password'])){ $pasw1=$_POST['aftoriz_password'];
    57.     $pasw1=htmlspecialchars($pasw1); $_SESSION['aftoriz_password']=$pasw1;}
    58.  else $pasw1=="";
    59.     //Если значение переменной пусто, то выводим сообщению пользователю об ошибке.
    60.     if ($pasw1=="")  {$error='y';
    61.            //Если переменнвая $password не установлена, просим повторить ввод данных пользователем.
    62.     echo 'Вы не ввели "<font color="#FF0000">Ваш пароль</font>"<br>';
    63.     };
    64.  
    65. if ($error=='y') {echo "<a href=# onClick='history.back()'><br><br>Вернитесь назад и отредактируйте пожалуйста не корректные данные!.</a><br>";}
    66.  else {
    67.  echo 'Все данные введены правильно!!! Можно занятся ими далее.<br>';
    68.  
    69.  
    70.  
    71.  //выяснить есть ли пользователь в БД с указанным при афторизации именем?
    72.  $massiv_names_bd='массив имен из бд'
    73. if ($name==какое то значение из массива имен из БД) {
    74.  
    75.  
    76.  //если данный пользователь существует, то присвоить его идентификационный номер из БД переменной $user_id
    77. код:
    78. $user_id='Данные из БД';
    79. //прочитать из БД соль для указанного при афторизации пользователя и присвоить ее значение переменной $salt
    80. код:
    81.  $salt='Данные из БД';
    82.  //Получить хеш введенного при афторизации пароля
    83.  $passaftoriz=md5(md5($pasw1.$salt));
    84.  //Получить хеш пароля из БД для пароля афторизующегося пользователя
    85.  $pass_bd="Запрос к БД с получением хеша пароля для конкретного пользователя"
    86.  //Если хеши совпадают, то пользователь считается афторизованным и получает доступ к закрытым частям системы
    87. if ($passaftoriz==$pass_bd) {echo 'Вы афторизованы';}
    88. //Если хеши несовпали, сообщить что неправильный пароль или заходиш не под тем именем.
    89. else {
    90. echo 'Неправильный пароль или Вы заходите не под своим именем!';
    91. }
    92.  }
    93. //если такого пользователя, с указанным именем в БД нет, то сообщить ему об этом
    94. else {
    95. echo 'Такого пользователя не существует, попробуйте афторизоваться снова под другим именем или зарегистрируйтесь в системе для разработчиков';
    96. echo $forma_aftoriz;
    97. }
    98.  
    99. };
    100.  
    101. echo '</body>';
    102.  
    103. ?>
    В БД добавил поле с "солью" записываемой при регистрации пользователя индивидуально для каждого. В итоге пользователи у меня регятся правильно на мой взгляд, только вот авторизоваться у них пока не получается, будим учить! :)
     
  11. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Зачем индивидуальная соль для каждого? Если соль находится в скрипте php, откуда её не достать...
     
  12. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Это технический вопрос. Наверное, я точно не знаю, это должно сказаться на безопасности хранимых паролей, они будут каждый генирироваться со своей солью, и в случае подбора одной соли от одного пользователя она не поможет другому так как у последнего другая соль. Хотя может это только затруднит задачу взломщику а не остановит его. Тем неменее от того что я ее использую ничего толком не меняется для пользователя!
    И еще что значит
    Я так понимаю, что соль можно взять и из БД и из скрипта если она указана гдето в нем как константа например две буквы.
     
  13. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Kreker
    а чтоб уникальность паролей окончательно организовать ;)

    Stasrot1
    при перевой загрузке формы авторизации $_SESSION[aftoriz_name_avtora] пуста и можно нарваться на предупреждение от php, если показ ошибок включён. Писал же, @$_SESSION[aftoriz_name_avtora] . Заполнять таким образом поле с паролем нет смысла. Если человек ошибся в каком-нибудь символе, всё равно увидит только звёздочки.

    Из того, что смущает:
    пароль и htmlspecialchars(пароль) — не одно и то же. md5() вернёт разные хэши и, следовательно, пароли не совпадут.

    и ещё вот это $massiv_names_bd='массив имен из бд'. Тащить из базы всех пользователей — слишком расточительно. Надо проверять запросом наличие в БД пары логин-пароль и всё.
     
  14. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Luge, Я ведь при регистрации пользователя его пароль тоже пропускаю через htmlspecialchars(), потом его хеширую и только после заношу в БД.
    В скрипте авторизации я получаю пароль от авторизуемого пользователя, пропускаю через указанную выше функцию, только после этого получаю его хеш и после всего этого сравниваю их хеши! Вроде все правильно! Хеши должны получаться одинаковые так как и в том и другом случае я использую по сути одну и ту же последовательность действий.

    Теперь вроде у тебя этот пункт не должен вызывать сомнения, да? А то они у меня появятся!


    А по поводу расточительства? Как это делается тогда?
    Код (Text):
    1. Надо проверять запросом наличие в БД пары логин-пароль и всё.
     
  15. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Мне кажется, что достаточно одной соли для всех. Даже вдруг, если через несколько недель злоумышленник все-таки отгадает соль, то ему придется снова тратить время на другие пароли. А если еще и защиту от брутфорса поставить (бан по ип)...
    Лучше уж так трепетно относись к защите бд от инъекций. Если таковая случиться, никакая соль не поможет.
     
  16. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Про это подробнее можно? Или ссылочку, а если не сложно то укажите пожалуйста на мои уязвимые места, заранее спасибо.

    И вот про это:
    Тоже ссылочку или поподробнее, пожалуйста!

    За все заранее спасибо! :)
     
  17. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Luge, выручай, пробую изменить твой код, дело в том, что когда пользователь не ввел к примеру и пароль и емайл, то выводится только одно сообщение, что не введен емайл и сообщение о том, что пароль не введен не выводится! А когда поле для емайла заполнено а пароль нет, то выводит сообщение о пароле, в общем скрипт выводит только одну ошибку, а на самом деле их не одна а две и более!
    Я пробую применить массив и в него заношу данные и пробую их обработать, в общем чтото не то я делаю, похоже с логикой запутался! :-(
     
  18. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    почту проверь
     
  19. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Проверил, и усвоил, спасибо. Теперь буду делать так, чтобы скрипт регистрации разработчиков нерегистрировал пользователей с одинаковыми именами, а он у нас именно так и делает!
     
  20. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Уже сделал!!! :) С первого раза! Ура!
     
  21. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Вот вопрос: если я авторизовался то как мне переместить пользователя на нужную страницу после авторизации? Вместо вот этого:
    PHP:
    1. <?php
    2. else if($cmd == 'profile'){
    3.     if(isset($_SESSION['USER']['DEV_ID'])){
    4.     $str .= '<table>
    5.     Вы вошли в свой профайл :-) Вот ваши данные: <br>
    6.      <tr>
    7.        <td>Имя разработчика:</td>
    8.  
    9.        <td>'.htmlspecialchars($_SESSION['USER']['DEV_NAME']).'</td>
    10.      </tr>
    11.      <tr>
    12.        <td>E-mail разработчика:</td>
    13.  
    14.        <td>'.htmlspecialchars($_SESSION['USER']['DEV_EMAIL']).'</td>
    15.      </tr>
    16.  
    17.      <tr>
    18.        <td>Пол:</td>
    19.  
    20.        <td>'.$dev_gender[$_SESSION['USER']['DEV_GENDER']].'</td>
    21.      </tr>
    22.  
    23.      <tr>
    24.        <td>Вид:</td>
    25.  
    26.        <td>'.$dev_type[$_SESSION['USER']['DEV_TYPE']].'</td>
    27.      </tr>
    28.  
    29.      <tr>
    30.        <td>URL разработчика</td>
    31.  
    32.        <td>'.htmlspecialchars($_SESSION['USER']['DEV_URL']).'</td>
    33.      </tr>
    34.    </table><br><br>
    35.    <a href="users.php?cmd=logout">Выйти</a>';
    36.     }
    37. ?>
    Вставить вот это?:
    PHP:
    1. <?php
    2. else if($cmd == 'profile'){
    3.     if(isset($_SESSION['USER']['DEV_ID'])){
    4.    
    5. include 'путь к нужному файлу со скриптом который пользователь увидит сразу после авторизации.php';
    6.  
    7.     $str .=  '<a href="users.php?cmd=logout">Выйти</a>';
    8.     }
    9. ?>
    Правильно?
     
  22. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Думаю что пора подключить проверку (или валидность) указанного при регистрации емайла! Поискал по форуму и поиску, в итоге вот что нашел, мне кажется весьма полезно, буду сам изучать и результаты выложу.
    Вот ссылочка:http://www.codenet.ru/webmast/php/PHP-Registration-Activate.php Там длинная статья про это и не только.
     
  23. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    после авторизации header('Location: страница_куда_их_слать'); die();
     
  24. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Спасибо, я так и предполагал, но почему то склонился к варианту написанному мной выше, но я так понимаю, что то как я написал можно использовать в других целях, например подключить туда еще какой кусок кода из другого файла?
    И все уже спать ложусь, поздно уже, а завтра на тренировку утром.... :)
     
  25. Stasrot1

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

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Добрый вечер! Добавил к скрипту регистрации проверку на длинну имени и пароля по следующему принципу:
    если (длина строки <= 3) {то вы ввели короткий логин}
    если (длина строки >=15) {то вы ввели слишком длинный пароль}
    Делал через strlen() Как можно упрастить мой скрипт, у меня вот это не пошло : если (длина строки <= 3 && длина строки >=15) {Вв ввели слишком длинный или короткий логин!};
    Почему последний вариант не пашет? Подскажите пожалуйста!