"PHP" / Говнокод #25607 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
<?php
/**
 * $URL: svn://svn.subversion.ru/usr/local/svn/mzz/trunk/system/forms/validators/formHostnameRule.php $
 *
 * MZZ Content Management System (c) 2005-2007
 * Website : http://www.mzz.ru
 *
 * This program is free software and released under
 * the GNU/GPL License (See /docs/GPL.txt).
 *
 * @link http://www.mzz.ru
 * @version $Id: formHostnameRule.php 3864 2009-10-21 04:50:04Z zerkms $
 */
/**
 * formHostnameRule: правило, проверяющее имя хоста
 *
 * @package system
 * @subpackage forms
 * @version 0.1.1
 */
class formHostnameRule extends formAbstractRule
{
    private $validTlds = array(
    'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao',
    'aq', 'ar', 'arpa', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb',
    'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo',
    'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd',
    'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop',
    'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do',
    'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj',
    'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh',
    'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu',
    'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il',
    'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm',
    'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kr', 'kw',
    'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu',
    'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm',
    'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv',
    'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng',
    'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe',
    'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt',
    'pw', 'py', 'qa', 're', 'ro', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd',
    'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr',
    'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tf', 'tg', 'th', 'tj',
    'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw',
    'tz', 'ua', 'ug', 'uk', 'um', 'us', 'uy', 'uz', 'va', 'vc', 've',
    'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm',
    'zw'
    );
    protected function _validate($value)
    {
        if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $value)) {
            return true;
        }
        $domainParts = explode('.', $value);
        if (sizeof($domainParts) < 2) {
            return false;
        }
        if (strlen($value) > 254 || strlen($value) < 4) {
            return false;
        }
        $tld = array_pop($domainParts);
        if (!in_array(strtolower($tld), $this->validTlds)) {
            return false;
        }
        $validChars = 'a-z0-9\-';
        foreach ($domainParts as $part) {
            if (strpos($part, '-') === 0 || (strlen($part) > 3 && strpos($part, '--', 2) === 2) || substr($part, -1) === '-') {
                return false;
            }
            if (!preg_match('#^[' . $validChars . ']{1,63}$#i', $part)) {
                return false;
            }
        }
        return true;
    }
}
?>

Домены валидировали-валидировали, да недовалидировали.

https://github.com/wiistriker/govnokod_legacy/blob/master/mzz/system/forms/validators/formHostnameRule.php

Запостил: gost gost, (Updated )

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

  • Помню те древние времена, когда из длинных доменов первого уровня были только arpa, info, aero, name, mobi, jobs, museum, travel. Причём популярным из них был только info, а на остальных длинных и сайтов-то не было. Тогда «Windows XP» ещё считалась новомодной системой.
    Ответить
  • –— Мамо, чому я перевіряю е-мейли по фіксованому списку доменів?
    —– Тому що у пехапешніков не буває нормальних дітей.
    Ответить
  • список не полный. а в остальном всё ок.
    Ответить
    • Что ок? А как обновлять этот список? Вручную мониторить список доменов и редактировать файл formHostnameRule.php?
      Ответить
      • А Вам подучить русский язык.
        а говнокод годный, тем более, что уже первая проверка
        [code language="php"]preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\ .\d{1,3}$#', $value)[/code]
        для IPv4 не верна, а 2-4 можно заменить на filter_var(...).
        впрочем, зачем я это объясняю "члену сообщества"?
        Ответить
    • Rooster, что ты делаешь с девизом: Блондинка, моя любовь, моя любовь, я люблю тебя... может показалось!?
      Ответить
  • > if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3} \.\d{1,3}$#', $value))
    Оно разве не должно быть:
    ^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$
    ?

    ЗЫ. когда-то пробовал регать по IP, ни один из вариантов не прошёл.
    Ответить
      • В RFC5322 тоже есть что-то в квадратных скобках:
        addr-spec       =   local-part "@" domain
        
           local-part      =   dot-atom / quoted-string / obs-local-part
        
           domain          =   dot-atom / domain-literal / obs-domain
        
           domain-literal  =   [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]
        
           dtext           =   %d33-90 /          ; Printable US-ASCII
                               %d94-126 /         ;  characters not including
                               obs-dtext          ;  "[", "]", or "\"
        
        The domain portion identifies the point to which the mail is
           delivered.  In the dot-atom form, this is interpreted as an Internet
           domain name (either a host name or a mail exchanger name) as
           described in [RFC1034], [RFC1035], and [RFC1123].  In the domain-
           literal form, the domain is interpreted as the literal Internet
           address of the particular host.  In both cases, how addressing is
           used and how messages are transported to a particular host is covered
           in separate documents, such as [RFC5321].  These mechanisms are
           outside of the scope of this document.


        Literal Internet address –— это, вероятно, и есть айпишник.
        Ответить
        • Всё равно большинство почтовых сервисов их не признаёт, можно считать что их нету.
          Ответить
          • Скажу больше: я пока не знаю, какие сервисы их признают. Есть хоть один на примете, чтобы потестировать?
            Ответить
    • Ага, ещё одна потёкшая обсракция — этот валидатор валидирует домен (абстрактный, не конкретно и-мейловский), а валидатор и-мейла делегирует проверку домена из адреса этому модулю и закономерно проёбывается на вот таких мелочах.
      Ответить
      • Ага, ezo является поисковой системой по умолчанию - это живая поисковая система (эстетически, а не конкретно), делегирование делегата на доменное имя и адрес сайта и общественности.
        Ответить
  • Домен - это подарочная помойка и много людей.
    Ответить
  • а не проще захардкодить все возможные емейлы?
    Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8