Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработчик формы регистации
 
 автор: xin   (21.04.2010 в 01:53)   письмо автору
 
 

Здравствуйте!Я новичок в плане php, но базу знаю хорошо.В моей форме регистрации 6 полей:"Ваше Имя","Фамилия","Логин","Пароль","Повтор пароля","Ваш Email".Все поля должны заноситься в БД Помогите,пожалуйста,видоизменить скрипт приведённый ниже, а то у меня уже мозги в косичку заплетаются плюс боюсь накосячить видоизменяя этот скрипт
// Страница регситрации нового пользователя

# Соединямся с БД
mysql_connect("localhost", "myhost", "myhost");
mysql_select_db("testtable");


if(isset($_POST['submit']))
{
    $err = array();

    # проверям логин
    if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login']))
    {
        $err[] = "Логин может состоять только из букв английского алфавита и цифр";
    }
    
    if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30)
    {
        $err[] = "Логин должен быть не меньше 3-х символов и не больше 30";
    }
    
    # проверяем, не сущестует ли пользователя с таким именем
    $query = mysql_query("SELECT COUNT(user_id) FROM users WHERE user_login='".mysql_escape_string($_POST['login'])."'");
    if(mysql_result($query, 0) > 0)
    {
        $err[] = "Пользователь с таким логином уже существует в базе данных";
    }
    
    # Если нет ошибок, то добавляем в БД нового пользователя
    if(count($err) == 0)
    {
        # Убераем лишние пробелы
        $login = trim($_POST['login']);
        
        # Убераем лишние пробелы и делаем двойное шифрование
        $password = md5(md5(trim($_POST['password'])));
        
        mysql_query("INSERT INTO users SET user_login='".$login."', user_password='".$password."'");
       echo "<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=register_success.php'>
          </HEAD>"; ; exit();
    }
    else
    {
        print "<b>При регистрации произошли следующие ошибки:</b><br>";
        foreach($err AS $error)
        {
            print $error."<br>";
        }
    }
}
?>

Большая просьба: Помогите!

  Ответить  
 
 автор: oliss   (21.04.2010 в 02:11)   письмо автору
 
   для: xin   (21.04.2010 в 01:53)
 

Так в чём проблема ? В какой кодировке у вас данные?
может вместо strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30 стоит проверять сразу в рв if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login']))

  Ответить  
 
 автор: xin   (21.04.2010 в 02:50)   письмо автору
 
   для: oliss   (21.04.2010 в 02:11)
 

Данные у меня в кодировке windows-1251.Мне нужно чтобы все данные заносились в БД.Соответственно в БД для них есть поля: name, lastname, login, password, passagain, email.Как вставить это дело в скрипт не накосячив я пока не понял

  Ответить  
 
 автор: neadekvat   (21.04.2010 в 07:33)   письмо автору
 
   для: xin   (21.04.2010 в 01:53)
 

> "INSERT INTO users SET user_login='".$login."', user_password='".$password."'"
Что вы там хорошо-то знаете?
INSERT INTO table (col1,col2) VALUES (value1, value2);

Плюс у вас в обработке есть лишние действия. Например, зачем очищать от пробелов после регулярного выражения? Оно (рег.выражение) все равно не пропустит логин с пробелами.

  Ответить  
 
 автор: xin   (21.04.2010 в 18:43)   письмо автору
 
   для: neadekvat   (21.04.2010 в 07:33)
 

trim вообще то не лишнее! Это чтобы потом не было гемороя

  Ответить  
 
 автор: neadekvat   (21.04.2010 в 18:56)   письмо автору
 
   для: xin   (21.04.2010 в 18:43)
 

Какого геморроя? Я же говорю, что "/^[a-zA-Z0-9]+$/" не пропустит пробел в принципе. trim надо делать ДО проверки на соответствие этому шаблону, чтобы случайный пробел не стал причиной отказа в регистрации.

  Ответить  
 
 автор: xin   (21.04.2010 в 19:13)   письмо автору
 
   для: neadekvat   (21.04.2010 в 18:56)
 

Извиняюсь.Когда я вам писал я думал о другом куске кода...вот такие пироги...

  Ответить  
 
 автор: Trianon   (21.04.2010 в 09:45)   письмо автору
 
   для: xin   (21.04.2010 в 01:53)
 

зачем Вам в БД поле passagain?
Зачем там хранить повторенный пароль?
Это помимо того, зачем хранить пароль вообще.

  Ответить  
 
 автор: xin   (21.04.2010 в 18:23)   письмо автору
 
   для: Trianon   (21.04.2010 в 09:45)
 

Я начал разбираться.Поле passagain как то в процессе уже удалил.Только теперь возникла другая проблема: в конце кода обработчика я поставил условие: если "Пароль" и "Повтор пароля" совпадают, то осуществляется редирект на определённую страницу(вход на сайт), если же нет, то редирект осуществляется на страницу формы регистрации, но без указания ошибок.Как сделать чтобы ошибки при регистрации писались на сайте ?Если подскажите, то буду очень благодарен.В принципе я сам могу "потыкаться", но с вами я сэкономлю время.

  Ответить  
 
 автор: Trianon   (21.04.2010 в 18:47)   письмо автору
 
   для: xin   (21.04.2010 в 18:23)
 

при редиректе одним из GET-параметров целевой странице можно передать код сообщения об ошибке. И на этой странице его вывести.

>В принципе я сам могу "потыкаться", но с вами я сэкономлю время.
Знаете, это не аргумент ни разу. Не только и не столько потому, что при этом Вы автоматически наченаете тратить время других людей.
Но и потому, что экономя время на учебе, Вы многократно теряете его при практическом приложении усилий.

  Ответить  
 
 автор: xin   (21.04.2010 в 18:59)   письмо автору
 
   для: Trianon   (21.04.2010 в 18:47)
 

А как добиться того , чтобы сообщение об ошибке выводилось в определённом месте страницы?(в этом вопросе я "Дуб")

  Ответить  
 
 автор: psychomc   (21.04.2010 в 18:57)   письмо автору
 
   для: xin   (21.04.2010 в 01:53)
 

... $password = md5(md5 ...

а вот это разве нормально?

  Ответить  
 
 автор: xin   (21.04.2010 в 19:02)   письмо автору
 
   для: psychomc   (21.04.2010 в 18:57)
 

>... $password = md5(md5 ...
>
>а вот это разве нормально?

Для меня - да!

  Ответить  
 
 автор: neadekvat   (21.04.2010 в 19:08)   письмо автору
 
   для: xin   (21.04.2010 в 19:02)
 

А чем md5(md5(md5(md5(md5...) хуже вашего md5(md5, почему не используете его?

  Ответить  
 
 автор: xin   (21.04.2010 в 19:22)   письмо автору
 
   для: neadekvat   (21.04.2010 в 19:08)
 

Можно и ваш вариант записать...А смысл?

  Ответить  
 
 автор: oliss   (21.04.2010 в 19:30)   письмо автору
 
   для: xin   (21.04.2010 в 19:22)
 

а смысл в нагрузке, что даёт мд5

  Ответить  
 
 автор: neadekvat   (21.04.2010 в 19:32)   письмо автору
 
   для: xin   (21.04.2010 в 19:22)
 

Вот, а какой смысл в md5(md5, когда можно md5 и усе? =)

  Ответить  
 
 автор: Valick   (21.04.2010 в 19:55)   письмо автору
 
   для: neadekvat   (21.04.2010 в 19:32)
 

двойной md5 труднее отбрутофорсить

  Ответить  
 
 автор: neadekvat   (21.04.2010 в 20:02)   письмо автору
 
   для: Valick   (21.04.2010 в 19:55)
 

А не надо давать возможность брутить пароли пользователей =)
Не вижу смысла хранить в базе данных хэш-сумму от хэш-суммы =)

  Ответить  
 
 автор: Valick   (21.04.2010 в 20:11)   письмо автору
 
   для: neadekvat   (21.04.2010 в 20:02)
 

не надо давать возможность брутить пароли пользователей
это каким образом?
смысл есть. вряд ли обычный пользователь будет придумывать пароль длиннее 32 символов, в основном брут проходит по "словарю", двойной md5 увеличивает этот словарь в два раза, а вот если еще чуть "подсолить"....

  Ответить  
 
 автор: neadekvat   (21.04.2010 в 20:26)   письмо автору
 
   для: Valick   (21.04.2010 в 20:11)
 

Так, стопэ..
> это каким образом?
Вы хотите, что у вас все доступы к базе открыты?

> вряд ли обычный пользователь будет придумывать пароль длиннее 32 символов
Какая разница, какая длина пароля?

> двойной md5 увеличивает этот словарь в два раза, а вот если еще чуть "подсолить"....
Двойной md5, соль и бла-бла
О чем вы? Если вас будут брутить через сайт - то какая нафиг разница, сколько раз там md5 и какая соль, ведь вы же сами своим скриптом за взломщика все проделаете.
А если доступ к базе получат.. Пора менять руки.

  Ответить  
 
 автор: Valick   (21.04.2010 в 21:52)   письмо автору
 
   для: neadekvat   (21.04.2010 в 20:26)
 

1) закрыто, и что? Если б шаловливые ручки хацкеров не лезли туда где закрыто, то и хеш не нужен вовсе
2) длинна пароля прямопропорциональна времени подбора
3) брутить через форму на сайте? жестко... а вот про кривизну рук вспоминают обычно люди которые сами не могут похвастаться прямизной

  Ответить  
 
 автор: neadekvat   (21.04.2010 в 22:12)   письмо автору
 
   для: Valick   (21.04.2010 в 21:52)
 

1. Вы считаете, что пароли хэшурются, чтобы зоркий взгляд взломщика не увидел в чистом виде в тот момент, когда он зашел в бд, используя ваш логин и пароль?
2. А как же качество пароля? Я поставлю NDfe но запаритесь подбирать. Сомневаюсь, что такой набор букв встречается в словарях. Кроме того, существуют рекомендации по созданию паролей, а на некоторых сайтах даже запрещают ставить пароли типа 123456 и qwery.
3. Нужели вы полагаете, что так не делают? Жестоко - это то, как вы ошибаетесь в этом вопросе. Тот же веблансер только недавно ввел ограниченное кол-во попыток на час времени для входа в аккаунт, ибо их запарили брутить через стандартную форму входа.
> а вот про кривизну рук вспоминают обычно люди которые сами не могут похвастаться прямизной
Не ищите скрытого смысла там, где его нет. Я не сказал "делайте как я, пряморукий суперпупер программист", я сказал, что если человек допустил утечку пароля - он криворукий. Под криворукий подходит и "невнимательный", "навиные", "глупый" и т.д.

  Ответить  
 
 автор: psychomc   (21.04.2010 в 23:18)   письмо автору
 
   для: Valick   (21.04.2010 в 21:52)
 

по нету ходят базы паролей с чистым md5, но по идее так же легко сделать из них md5md5md5 и подобрать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования