1. PHP / Говнокод #5067

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    defined('HEADER') or die();
    
    $nameChars = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
    $ErrorStr = NULL;
    
    if($cfg->login_registration != 'On' || isset($_SESSION['login']))
    	return script::firbidden();
    
    $keys = array('login', 'passw', 'passw2', 'email', 'fname', 'lname', 'code');
    $post = script::apost($keys);
    
    if(isset($_POST['submit'], $_SESSION['captcha'])) {
    	$user = new user($post['login']);
    	
    	if(strtolower($post['code']) != $_SESSION['captcha']) {
    		$ErrorStr = "Неверный код с картинки";
    		unset($_SESSION['captcha']);
    	} else if($user->load()) {
    		$ErrorStr = "Логин уже зарегистрирован";
    	} else if(!preg_match("/^[0-9A-z]{4,16}$/", $post['passw'])) {
    		$ErrorStr = "Неверный пароль";
    	} else if($post['passw'] != $post['passw2']) {
    		$ErrorStr = "Пароли не совпадают";
    	} else if(!preg_match("/^([$nameChars]{1}){2,16}$/iu", $post['fname'])) {
    		$ErrorStr = "Имя введено не верно";
    	} else if(!preg_match("/^([$nameChars]{1}){2,16}$/iu", $post['lname'])) {
    		$ErrorStr = "Фамилия введена не верно";
    	} else if(!preg_match("/^[A-z0-9\.\-\_]{3,16}\@[A-z0-9\.\-]{5,16}$/i", $post['email'])) {
    		$ErrorStr = "Почтовый адрес введен неверно";
    	} else {
    		$user->passw = md5($post['passw']);
    		$user->email = strtolower($post['email']);
    		$user->fname = $post['fname'];
    		$user->lname = $post['lname'];
    		
    		if(!$user->save())
    			$ErrorStr = "Невозможно сохранить файл пользователя";
    		else
    			return script::redirect('h=login');
    	}
    }
    ...

    Регистрация...

    Запостил: Devzirom, 26 Декабря 2010

    Комментарии (55) RSS

    • script::firbidden();
      --
      имя, фамилия ... {2,16}
      Добро пожаловать, ху ли
      Ответить
    • Что-то я вашего диалекта не понимаю, кроме последней строчки, естественно.
      Ответить
    • > /^[0-9A-z]{4,16}$/
      я хочу ввести свой любимый пароль %+666&999+% а мне говорят, что он неправильный, хны!
      ага, вводи, сука, свое 123456 и все!
      Ответить
      • > свое 123456
        щас кое-кто придёт и копирайт спросит...
        --
        а после "%+666&999+%" php-программист усомнится в своей компетенции...
        Ответить
        • он уже сделал нотариально заверенный скриншот?
          Ответить
          • Ведь есть же http://govnokod.ru/4977
            Осталось получить патент на этот пароль...
            Ответить
            • патент? насколько я хорошо понимаю законы, патент на такие традиционные вещи, как цифры, алфавит и слова, туда же и пароли, нельзя получить - только если оформить их как то художественно - тогда можно получить авторские права как на предмет искусства
              Ответить
              • показать все, что скрытоГоспода, а не найти ли вам более интересный код, для столь занимательной темы?
                Ответить
                • Кстати:
                  "Моя личная кабинка → Настройки → Персональные → Уведомлять меня о новых комментариях к моему говнокоду → Нет, прекратите это немедленно!"
                  Ответить
              • P.S.: спасибо Кириллу И Мефодию за любезно предоставленные буквы
                Ответить
              • Есть возможность оформить, как интеллектуальную собственность, как бренд, например...
                --
                (чего-то уже понеслось куда-то вдаль)
                Ответить
                • Любезный, простите за нескромной вопрос, не думаю, что он ущемит ваше достоинство, скажите на милость, сколько вам лет?
                  Ответить
                  • "Я старый сказочник, я знаю много сказок..."
                    Ответить
                  • A/S/L anyone???
                    Ответить
                  • кстати, паттерн на проверку ящика - говно, ибо он пропустит даже следующее: [email protected]. А, как известно, самый высокобуквенный домен первого уровня содержит 6 букв - домен museum. Да и заэкранировано там все без разбору... Предлагаю решение
                    /^(?:[a-z0-9_-]\.?)+@(?:[a-z0-9]\.?)+[a-z]{2,6}$/i
                    .
                    И несколько мило наблюдать в данном случае ООП и процедурку, когда валидацию параметров можно было без труда реализовать на стратегии.
                    Ответить
                    • [:|||||:] обсуждали 9001 раз уже
                      Ответить
                      • согласен, даже не [:|||||:], а [:|||||||||||||:], а чё делать =)
                        Ответить
                    • Это уже проблемы пользователя... Почтовый ящик будет служить только для восстановления доступа. И если честно, мне плевать, что они там напишут. Я не спам базу собираю. Это просто элементарная проверка.
                      Ответить
                      • /^([$nameChars]{1}){2,16}$/iu

                        Говно =)
                        1. Можно единичку вообще убрать.
                        2. Использована запоминающая группировка не в том месте и не в то время.
                        Ответить
                      • с таким подходом это более, чем полностью намекает на заспамливание базы всяким хламом. Ибо я так понял, что проверки на существование реального ящика и подтверждения регистрации нет
                        Ответить
                        • Нет, базы тоже нет =)
                          Ответить
                          • тем более, файлы =)
                            Ответить
                            • xml

                              имя файла = логин + .xml
                              самое важное в файле - хеш пароля, а остальное о пользователе - просто хлам, который нужен, чтобы просто обращаться к пользователю и иметь возможность отправить сообщение на почтовый ящик, для восстановления пароля.

                              Так-же в файлах находится и другая информация, о которой вам пока рано знать =)
                              Ответить
                              • недорос? ухаха=)))
                                Ответить
                                • Нет, это будет слишком громко сказано, да и зачем всем знать это? =)

                                  Насчёт чистки, файлы удаляются будут через определенный период времени. Допустим через месяц не измененные, или по запросу администратора или владельца
                                  Ответить
                                  • ну, я бы всё равно заделал бы стратегию валидатора и фабрику отображения ошибок=) Достаточно просто и выглядит веселее, нежели обычный текст, да и в коде чище.
                                    И плюс в строке $cfg->login_registration != 'On' изменил быстринг на буул=)
                                    Смотрю код выборочно, так как цели разнести его в щепки перед собой не ставил=) С Ув. =)
                                    Ответить
                                    • Да, $cfg->login_registration != 'On', действительно лучше превратить в бул, это дельный совет!

                                      На самом деле, никто так и не заметил, что не проверяется пригодность логина, что не стирается код капчи из сессии... Этот код уже переписан, не стало
                                      множества if-else if, переменная $ErrorStr превратилась в массив,
                                      у фамилии и имени, проверяется только длина /^.{2,16}$/iu, проверку email'а менять не стал, только добавил длинны, для xn доменов. С паролями решил повременить.

                                      Предусмотреть всего невозможно, как не крути, обязательно найдется тот, кто скажет, что это говнокод =) И это стимулирует! =)

                                      С Ув! И с наступающим НГ!
                                      Ответить
                    • Зачем изобретать велосипед с квадратными колесами, если уже изобретён с круглыми по мировому стандарту RFC:
                      http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
                      Ответить
                      • php загнётся...
                        Ответить
                        • Ни у кого не загибается, а у Вас официальный, предоставленный комитетом стандартизации RFC, код "загибает php".
                          Где такой слабый php нашли?
                          Ответить
                          • Такой regexp, php обрабатывает в 10 раз дольше, чем другой намного более упрощённый, и как следствие более часто используемый в массах.
                            Как правило, проверка email пользователя, в большинстве своём, сводится к действиям отправки на указанный email некоего условного проверочного кода, которое впоследствии детектится с привязкой к этому пользователю. Тысячам сайтов нет нужды особо точно контролировать email.
                            То есть, получается - в интересах пользователя ввести правильный email адрес.
                            Отсюда и тысячи велосипедиков...
                            Ответить
                    • museum и travel говорите? XN-домены забыли! Может быть, у меня ящик в национальном арабском или китайском домене.

                      Про ограничение на длину. Недавно завёл себе ящик на сайте
                      http://abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/

                      P.S. Извините, что поддался общему настроению и обсуждаю проверку валидности адресов.
                      Ответить
                      • Для меня - это уже крайности
                        Ответить
                      • Явно перебор
                        Ответить
                        • Согласен, что вероятность появления на сайте юзера мейла домена abc...ijk.com или IDN пока невысока (хотя кто знает, домен рф = XN--P1AI вовсю рекламируется), но бывает почта в домене третьего уровня и выше ( http://zzn.com/ например).
                          Ответить
                  • Да, думаю, что это не страшно...
                    Хм... И к чему такой вопрос?
                    Ответить
                    • И всё-же, я настаиваю, чтобы ВЫ ответили!
                      Ответить
                      • Кажется, Петр (если не ошибаюсь), это "информация, о которой вам пока рано знать =)"
                        :)
                        Ответить
      • Хм, спасибо! И почему я об этом раньше не думал, один фиг в md5... =)
        Ответить
        • это вы типа брутальную фильтрацию данных организовали? да, точно, шибко умный юзер не пройдет!
          Ответить

    Добавить комментарий