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

    0

    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
    public function passes($attribute, $hostname)
        {
            if (!mb_stripos($hostname, '.')) {
                return false;
            }
    
            $domain = explode('.', $hostname);
            $allowedChars = ['-'];
            $extenion = array_pop($domain);
    
            foreach ($domain as $value) {
                $fc = mb_substr($value, 0, 1);
                $lc = mb_substr($value, -1);
    
                if (
                    hash_equals($value, '')
                    || in_array($fc, $allowedChars)
                    || in_array($lc, $allowedChars)
                ) {
                    return false;
                }
    
                if (!ctype_alnum(str_replace($allowedChars, '', $value))) {
                    return false;
                }
            }
    
            if (
                !ctype_alnum(str_replace($allowedChars, '', $extenion))
                || hash_equals($extenion, '')
            ) {
                return false;
            }
    
            if (filter_var($hostname, FILTER_VALIDATE_DOMAIN) === false) {
                return false;
            }
    
            return true;
        }

    валидация домена...

    Запостил: websbkinfo, 09 Февраля 2019

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

    • почему пхпшники такие имбецилы?

      домен можно валидировать только одним образом: спросить об этом DNS сервер
      Ответить
      • Но ведь тогда всё будет работать сразу и правильно. Как тогда выпускать новые версии? Как фиксить поддержку какого-нибудь зимбабвийского домена?
        Ответить
        • Change list:

          PTH-2001: .ru domain supported
          PTH-2002: .org domain supported
          PTH-2003: .tj domain supported
          PTH-2004: .tj domain support fix
          Ответить
      • А если DNS сервер упадёт? Нельзя всё пускать на самотёк и оставлять столько точек отказа.
        Ответить
      • Первичная валидация кому навредит?
        Ответить
        • Тем, кто через неё не пройдёт. Код из топика, если я правильно понимаю, зарежет домены в ".рф" и прочих юникодных TLD (не то чтобы они были нужны).
          Ответить
          • З.Ы. А, вроде всё ок. Пропустил вырезание минусов.
            Ответить
    • filter_var($hostname, FILTER_VALIDATE_DOMAIN) - вот этой строчки достаточно вместо всего этого кода
      Ответить

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