За последние 24 часа нас посетили 62998 программистов и 1743 робота. Сейчас ищет 1751 программист ...

Пароль слишком короткий

Тема в разделе "PHP для новичков", создана пользователем 6stPROD, 11 янв 2015.

  1. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Господа, как это обойти?

    Код (Text):
    1. <?php        
    2. $_config = array (  
    3.          // DB settings  
    4.          'host' => 'localhost', // адрес БД  
    5.          'user' => 'root', // логин к БД  
    6.          'pass' => '', // пароль к БД  
    7.          'port' => '3306', // порт к БД  
    8.          'dbname' => 'auth', // база  
    9. );  
    10. $tbc = 2;                        
    11. $database_encoding = 'UTF8';          
    12.  
    13. $link = new mysqli($_config['host'], $_config['user'], $_config['pass'], $_config['dbname']);  
    14. if ($link->connect_error) {  
    15.       die($str_error_2);  
    16. }      
    17.  
    18. if(empty($_POST)){  
    19. echo "        
    20. <center>        
    21. <form method=post action='/reg.php'>          
    22. <table>        
    23.    <tr>        
    24.           <td>Login: <Br>        
    25.           <input type=text name=account maxlength=20></td>        
    26.    </tr>        
    27.    <tr>        
    28.           <td> Password:<Br>        
    29.           <input type=password name=password maxlength=20></td>        
    30.    </tr>        
    31.    <tr>        
    32.           <td> Confirm Password: <Br>        
    33.           <input type=password name=password2 maxlength=20></td>        
    34.    </tr>        
    35.    <tr>        
    36.           <td> e-mail:<Br>          
    37.           <input type=text name=email maxlength=32></td>        
    38.    </tr>        
    39.       <tr>        
    40.           <td colspan=2 style=\"text-align: center;\"><br><input type=submit value=Зарегистрироваться></td>        
    41.       </tr>        
    42. </table>        
    43. </form></center>";        
    44.  
    45. }else{  
    46.  
    47.    $login = htmlentities($_POST['account']);  
    48.    $pass = htmlentities($_POST['password']);  
    49.    $pass2 = htmlentities($_POST['password2']);  
    50.    $email = htmlentities($_POST['email']);  
    51.      
    52.     $error = false;  
    53.     $errormsg = "";  
    54.      
    55.     $query = mysqli_query($link, "SELECT `id` FROM `account` WHERE `username`='{$login}' LIMIT 1");  
    56.  
    57.      $numrow = $query->num_rows;  
    58.        
    59.      if ($numrow == 1){  
    60.       $error = true;  
    61.       $errormsg = 'Такой аккаунт уже есть.<br><a href="reg.php">еще раз?</a>';  
    62.      }  
    63.        
    64.        
    65.      if (preg_match("/^[a-zA-Z0-9_]+$/", $login) && strlen($login) >= 3) {  
    66.       $error = true;  
    67.       $errormsg = 'Логин слишком короткий.<br><a href="reg.php">еще раз?</a>';  
    68.       if (preg_match("/^[a-zA-Z0-9]+$/", $pass) && strlen($pass) >= 3 ) {  
    69.        $error = true;  
    70.        $errormsg = 'Пароль слишком короткий.<br><a href="reg.php">еще раз?</a>';  
    71.        if ( !preg_match('/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?$/iD', (string) $email) ) {  
    72.         $error = true;  
    73.         $errormsg = 'Емайл введён не верно.<br><a href="reg.php">еще раз?</a>';  
    74.         if($pass !== $pass2){  
    75.          $error = true;  
    76.          $errormsg = 'Пароли не совпадают.<br><a href="reg.php">еще раз?</a>';  
    77.         }  
    78.        }  
    79.       }  
    80.      }  
    81.      
    82.      if(!$error){  
    83.       $login = strtoupper($login);  
    84.       $pass = sha1(strtoupper($login) .':'. strtoupper($pass));  
    85.       $query = mysqli_query($link, "INSERT INTO `account`  
    86.                     SET  
    87.                     `username`='{$login}',  
    88.                     `sha_pass_hash`='{$pass}',  
    89.                     `email`='{$email}';  
    90.                     ");  
    91.       $result = $link->query($query);  
    92.          
    93.       echo "Успешно";  
    94.      }else{  
    95.       echo "Ошибка: ".$errormsg;  
    96.      }  
    97.  
    98. }  
    99. $link->close(); //отключение от базы данных  
    100. ?>
     
  2. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Длину пароля никак не обойти.
    В Вашем условии он должен быть >=3.
    Только изменить условие.
     
  3. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Пример как это можно сделать?
     
  4. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Вот часть с условиями допустимости пароля
    if (preg_match("/^[a-zA-Z0-9]+$/", $pass) && strlen($pass) >= 3 )

    Отметил большим шрифтом цифры. Это и есть длина пароля.
     
  5. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Я это прекрасно понимаю) но все дело в том что я ставил разные значения, и 6 и 10 и 40 и все равно вместо успешной регистрации выдает ошибку короткого пароля(
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Код (PHP):
    1. if ( ... strlen($pass) >= 3 ) {  
    2.        $error = true; 
     
  7. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация

    вы считаете что дело в этом?
    Код (Text):
    1. (preg_match("/^[a-zA-Z0-9]+$/", $pass)
     
  8. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Работает то все верно.
    У Вас там везде логичские ошибки в коде.
    В результате получаете не то чего ожидаете.
    Присмотритесь внимательнее.
    Или уже сперва поспать надо, а завтра на свежую голову все пойдет как по маслу )
     
  9. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    благодарю за заботу, помогите новичку то уж)
     
  10. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Ваша логика:
    если прошла регулярка логина и он больше трех символов, то ошибка.
    Если прошла регулярка пароля и он больше трех символов, то ошибка.

    Добавлено спустя 1 минуту 20 секунд:
    Копипастить плохо)

    Добавлено спустя 1 минуту 47 секунд:
    Вот уже теплее, почти горячо
     
  11. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    $error = false; во всех вариантах не помог, блин, не понимаю, ну подскажите пожалуйста)
     
  12. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Код (Text):
    1. <?php        
    2. $_config = array (  
    3.          // DB settings  
    4.          'host' => 'localhost', // адрес БД  
    5.          'user' => 'root', // логин к БД  
    6.          'pass' => '', // пароль к БД  
    7.          'port' => '3306', // порт к БД  
    8.          'dbname' => 'auth', // база  
    9. );  
    10. $tbc = 2;                        
    11. $database_encoding = 'UTF8';          
    12.  
    13. $link = new mysqli($_config['host'], $_config['user'], $_config['pass'], $_config['dbname']);  
    14. if ($link->connect_error) {  
    15.       die($str_error_2);  
    16. }      
    17.  
    18. if(empty($_POST)){  
    19. echo "        
    20. <center>        
    21. <form method=post action='/reg.php'>          
    22. <table>        
    23.    <tr>        
    24.           <td>Login: <Br>        
    25.           <input type=text name=account maxlength=20></td>        
    26.    </tr>        
    27.    <tr>        
    28.           <td> Password:<Br>        
    29.           <input type=password name=password maxlength=20></td>        
    30.    </tr>        
    31.    <tr>        
    32.           <td> Confirm Password: <Br>        
    33.           <input type=password name=password2 maxlength=20></td>        
    34.    </tr>        
    35.    <tr>        
    36.           <td> e-mail:<Br>          
    37.           <input type=text name=email maxlength=32></td>        
    38.    </tr>        
    39.       <tr>        
    40.           <td colspan=2 style=\"text-align: center;\"><br><input type=submit value=Зарегистрироваться></td>        
    41.       </tr>        
    42. </table>        
    43. </form></center>";        
    44.  
    45. }else{  
    46.  
    47.    $login = htmlentities($_POST['account']);  
    48.    $pass = htmlentities($_POST['password']);  
    49.    $pass2 = htmlentities($_POST['password2']);  
    50.    $email = htmlentities($_POST['email']);  
    51.      
    52.     $error = false;  
    53.     $errormsg = "";  
    54.      
    55.     $query = mysqli_query($link, "SELECT `id` FROM `account` WHERE `username`='{$login}' LIMIT 1");  
    56.  
    57.      $numrow = $query->num_rows;  
    58.        
    59.      if ($numrow == 1){  
    60.       $error = true;  
    61.       $errormsg .= 'Такой аккаунт уже есть.<br><a href="reg.php">еще раз?</a>';  
    62.      }  
    63.        
    64.        
    65.      if (!preg_match("/^[a-zA-Z0-9_]+$/", $login) && strlen($login) >= 3) {  
    66.       $error = true;  
    67.       $errormsg .= 'Логин слишком короткий.<br><a href="reg.php">еще раз?</a>';  
    68.       if (!preg_match("/^[a-zA-Z0-9]+$/", $pass) && strlen($pass) >= 3 ) {  
    69.        $error = true;  
    70.        $errormsg .= 'Пароль слишком короткий.<br><a href="reg.php">еще раз?</a>';  
    71.        if ( !preg_match('/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?$/iD', (string) $email) ) {  
    72.         $error = true;  
    73.         $errormsg .= 'Емайл введён не верно.<br><a href="reg.php">еще раз?</a>';  
    74.         if($pass !== $pass2){  
    75.          $error = true;  
    76.          $errormsg .= 'Пароли не совпадают.<br><a href="reg.php">еще раз?</a>';  
    77.         }  
    78.        }  
    79.       }  
    80.      }  
    81.      
    82.      if(!$error){  
    83.       $login = strtoupper($login);  
    84.       $pass = sha1(strtoupper($login) .':'. strtoupper($pass));  
    85.       $query = mysqli_query($link, "INSERT INTO `account`  
    86.                     SET  
    87.                     `username`='{$login}',  
    88.                     `sha_pass_hash`='{$pass}',  
    89.                     `email`='{$email}';  
    90.                     ");  
    91.       $result = $link->query($query);  
    92.          
    93.       echo "Успешно";  
    94.      }else{  
    95.       echo "Ошибка: ".$errormsg;  
    96.      }  
    97.  
    98. }  
    99. $link->close(); //отключение от базы данных  
    100. ?>
    Добавлено спустя 4 минуты 20 секунд:
    Дальше сами справитесь?)
     
  13. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Оно то конечно помогло) но теперь пароль даже одно\двух символьный проходит) что то странное творится
     
  14. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Код (Text):
    1. <?php        
    2. $_config = array (  
    3.          // DB settings  
    4.          'host' => 'localhost', // адрес БД  
    5.          'user' => 'root', // логин к БД  
    6.          'pass' => '', // пароль к БД  
    7.          'port' => '3306', // порт к БД  
    8.          'dbname' => 'auth', // база  
    9. );  
    10. $tbc = 2;                        
    11. $database_encoding = 'UTF8';          
    12.  
    13. $link = new mysqli($_config['host'], $_config['user'], $_config['pass'], $_config['dbname']);  
    14. if ($link->connect_error) {  
    15.       die($str_error_2);  
    16. }      
    17.  
    18. if(empty($_POST)){  
    19. echo "        
    20. <center>        
    21. <form method=post action='/reg.php'>          
    22. <table>        
    23.    <tr>        
    24.           <td>Login: <Br>        
    25.           <input type=text name=account maxlength=20></td>        
    26.    </tr>        
    27.    <tr>        
    28.           <td> Password:<Br>        
    29.           <input type=password name=password maxlength=20></td>        
    30.    </tr>        
    31.    <tr>        
    32.           <td> Confirm Password: <Br>        
    33.           <input type=password name=password2 maxlength=20></td>        
    34.    </tr>        
    35.    <tr>        
    36.           <td> e-mail:<Br>          
    37.           <input type=text name=email maxlength=32></td>        
    38.    </tr>        
    39.       <tr>        
    40.           <td colspan=2 style=\"text-align: center;\"><br><input type=submit value=Зарегистрироваться></td>        
    41.       </tr>        
    42. </table>        
    43. </form></center>";        
    44.  
    45. }else{  
    46.  
    47.    $login = htmlentities($_POST['account']);  
    48.    $pass = htmlentities($_POST['password']);  
    49.    $pass2 = htmlentities($_POST['password2']);  
    50.    $email = htmlentities($_POST['email']);  
    51.      
    52.     $error = false;  
    53.     $errormsg = "";  
    54.      
    55.     $query = mysqli_query($link, "SELECT `id` FROM `account` WHERE `username`='{$login}' LIMIT 1");  
    56.  
    57.      $numrow = $query->num_rows;  
    58.        
    59.      if ($numrow == 1){  
    60.       $error = true;  
    61.       $errormsg .= 'Такой аккаунт уже есть.<br><a href="reg.php">еще раз?</a>';  
    62.      }  
    63.        
    64.        
    65.      if (!preg_match("/^[a-zA-Z0-9_]{3,20}$/", $login)) {  
    66.       $error = true;  
    67.       $errormsg .= 'Логин слишком короткий.<br><a href="reg.php">еще раз?</a>';  
    68.       if (!preg_match("/^[a-zA-Z0-9]{3,20}$/", $pass)) {  
    69.        $error = true;  
    70.        $errormsg .= 'Пароль слишком короткий.<br><a href="reg.php">еще раз?</a>';  
    71.        if ( !preg_match('/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?$/iD', (string) $email) ) {  
    72.         $error = true;  
    73.         $errormsg .= 'Емайл введён не верно.<br><a href="reg.php">еще раз?</a>';  
    74.         if($pass !== $pass2){  
    75.          $error = true;  
    76.          $errormsg .= 'Пароли не совпадают.<br><a href="reg.php">еще раз?</a>';  
    77.         }  
    78.        }  
    79.       }  
    80.      }  
    81.      
    82.      if(!$error){  
    83.       $login = strtoupper($login);  
    84.       $pass = sha1(strtoupper($login) .':'. strtoupper($pass));  
    85.       $query = mysqli_query($link, "INSERT INTO `account`  
    86.                     SET  
    87.                     `username`='{$login}',  
    88.                     `sha_pass_hash`='{$pass}',  
    89.                     `email`='{$email}';  
    90.                     ");  
    91.       $result = $link->query($query);  
    92.          
    93.       echo "Успешно";  
    94.      }else{  
    95.       echo "Ошибка: ".$errormsg;  
    96.      }  
    97.  
    98. }  
    99. $link->close(); //отключение от базы данных  
    100. ?>
    А так?)

    Добавлено спустя 27 минут 49 секунд:
    Это странное зовется логическая ошибка).
    что надо было -> то мы обошли)
    Что получилось?
    Читаем алгоритм:
    Если логин не совпал с шаблоном регулярного выражения и длина логина больше или равна 3.
    мануал:
    Замечание:
    Функция strlen() возвратит количество байт, а не число символов в строке.

    Добавлено спустя 2 минуты 40 секунд:
    iconv_strlen

    (PHP 5)
    iconv_strlen — Возвращает количество символов в строке

    Описание ¶

    int iconv_strlen ( string $str [, string $charset = ini_get("iconv.internal_encoding") ] )
    В отличие от strlen(), iconv_strlen() учитывает кодировку строки. Длина строки не обязательно будет соответствовать количеству байт в ней, так как в различных кодировках различные символы кодируются различным количеством байт, например, юникод может быть и двух-, и четырёхбайтным.

    Добавлено спустя 3 минуты 11 секунд:
    также учтите что при попытке набрать запрещенные символы в логине или пароле сообщение будет аля логин/пароль слишком короткий
     
  15. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Ещё раз. "Если пароль больше либо равен 3 символам, пишем что пароль слишком короткий". Логика?
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    совет: не ограничивай длину пароля. пароль это личное дело пользователя. ты можешь дать рекомендацию что считаешь пароль как ТЫ считаешь очень короткий, а пользователь с мыслями "да пошел ты" оставит паролем "1". и ты должен принять такое решение пользователя с мыслям "а. ну ок.". ты отвечаешь за целостность данных и их сохранность. защита учетной записи - личное дело пользователя. может он пароли хранит на бумажке прилепленной на мониторе - не важно тогда какая длина у пароля. то есть точно более нуля символов можно требовать. ну и ограничить допустим в 256 символов - здоровые люди будут всегда удовлетворены.
     
  17. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    моя цель направить тс в нужном направлении, а не решить за него задачу, т.к. считаю таковой подход наиболее эффективным методом обучения)
     
  18. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    maxmuha благодарю, ваш вариант помог, спасибо! Только можно в кратце объяснить что получилось, я так понял что мы убрали проверку длинны пароля, получается нас должны пускать даже если пароль будет равен одному символу, но как не странно метод работает
     
  19. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Код (Text):
    1. preg_match("/^[a-zA-Z0-9]{3,20}$/", $pass)
    шаблон этого регулярного выражения звучит так:
    pass может содержать прописные и заглавные латинские буквы, а также цифры, при этом длина pass от трех до двадцати символов.

    мой последний вариант длину логина и пароля проверяет в регулярном выражении, а не считает их отдельным методом.

    Если Вы хотите делать многоуровневую проверку с отдельными ошибками,
    например логин содержит недопустимые символы, логин слишком короткий и т.д. и т.п. , то этот алгоритм нужно доработать, а лучше написать другой.

    В Вашем скрипте недопустимые символы, как и их количество меньше трех, выдаст ошибку о коротком логине или пароле.

    Попробуйте сперва без php кода представить алгоритм программы.
    Хоть на листке бумаги написать, а потом уже свои мысли превратить в код.
     
  20. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Благодарю !