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

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
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 websbkinfo, (Updated )

Комментарии (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) - вот этой строчки достаточно вместо всего этого кода
    Ответить

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

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

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


    8