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

    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
    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
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    <?
    error_reporting(E_ALL ^ E_DEPRECATED);
    defined('_SECUR_GAMES') or die('Unknown Error!');
      function bbcode($var = "") {
            $var = preg_replace('#\[b\](.*?)\[/b\]#si', '<span style="font-weight: bold;">\1</span>', $var);
            $var = preg_replace('#\[i\](.*?)\[/i\]#si', '<span style="font-style:italic;">\1</span>', $var);
            $var = preg_replace('#\[u\](.*?)\[/u\]#si', '<span style="text-decoration:underline;">\1</span>', $var);
            $var = preg_replace('#\[s\](.*?)\[/s\]#si', '<span style="text-decoration: line-through;">\1</span>', $var);
            $var = preg_replace('#\[big\](.*?)\[/big\]#si', '<big>\1</big>', $var);
            $var = preg_replace('#\[small\](.*?)\[/small\]#si', '<small>\1</small>', $var);
            $var = preg_replace('#\[center\](.*?)\[/center\]#si', '<center>\1</center>', $var);
            $var = preg_replace('#\[right\](.*?)\[/right\]#si', '<span class="right">\1</span>', $var);
            $var = preg_replace('#\[hr\](.*?)\[/hr\]#si', '<hr>\1</hr>', $var);
            $var = preg_replace('#\[br\](.*?)\[/br\]#si', '<br>\1</br>', $var);
            $var = preg_replace('#\[p\](.*?)\[/p\]#si', '<p>\1</p>', $var);
            $var = preg_replace('#\[gold\](.*?)\[/gold\]#si', '<span style="color:gold">\1</span>', $var);       
          return $var;
        }
        function calculate_age($birthday) {
          $birthday_timestamp = strtotime($birthday);
          $age = date('Y') - date('Y', $birthday_timestamp);
          if (date('md', $birthday_timestamp) > date('md')) {
            $age--;
          }
          return $age;
        }
    	function generatePassword($length=8){
    	  $chars = 'qwedazxscvfrtgnbhyujmkiolp1234567890WEDAZXSCVFRTGNBHYUJMKIOLP';
    	  $numChars = strlen($chars);
    	  $string = '';
    	  for ($i = 0; $i < $length; $i++) {
    	    $string .= substr($chars, rand(2, $numChars) - 1,2);
    	  }
    	  return $string;
    	}
    	function generatePass_word($length=8){
    	  $chars = 'qcvfrtgnbhyujmlp567890WEDAZXSCVFRBHYIOLP';
    	  $numChars = strlen($chars);
    	  $string = '';
    	  for ($i = 0; $i < $length; $i++) {
    	    $string .= substr($chars, rand(2, $numChars) - 1,2);
    	  }
    	  return $string;
    	}
    	function generateLogin($length=8){
    	  $chars = 'qweascv8fjmk6iolp123450WEXSCVFRTGNUOLP';
    	  $numChars = strlen($chars);
    	  $string = '';
    	  for ($i = 0; $i < $length; $i++) {
    	    $string .= substr($chars, rand(2, $numChars) - 1,2);
    	  }
    	  return $string;
    	}
    	function check($str)
    	{
    		$str = htmlentities($str, ENT_QUOTES, 'UTF-8');
    		$str = str_replace("\'", "&#39;", $str);
    		$str = str_replace("\r\n", "<br/>", $str);
    		$str = strtr($str, array(chr("0") => "", chr("1") => "", chr("2") => "", chr("3") => "", chr("4") => "", chr("5") => "", chr("6") => "", chr("7") => "", chr("8") => "", chr("9") => "", chr("10") => "", chr("11") => "", chr("12") => "", chr
    		("13") => "", chr("14") => "", chr("15") => "", chr("16") => "", chr("17") => "", chr("18") => "", chr("19") => "", chr("20") => "", chr("21") => "", chr("22") => "", chr("23") => "", chr("24") => "", chr("25") => "", chr("26") => "", chr("27") =>
    		"", chr("28") => "", chr("29") => "", chr("30") => "", chr("31") => ""));
    		$str = str_replace('\\', "&#92;", $str);
    		$str = str_replace("|", "I", $str);
    		$str = str_replace("||", "I", $str);
    		$str = str_replace("/\\\$/", "&#36;", $str);
    		$str = str_replace("[l]http://", "[l]", $str);
    		$str = str_replace("[l] http://", "[l]", $str);
    		$str = mysql_real_escape_string($str);
    		return $str;
    	}
    	class PAGINGS
    	{
    		public $total;
    		private $total_pages;
    		private $page;
    		private $start;
    		private $end;
    		public $get;
    		public $count_get;
    
    		public function __construct($size, $query)
    		{
    			$this->total = mysql_result(mysql_query(preg_replace('~SELECT (.*?) FROM~isU', 'SELECT COUNT(*) FROM', $query).' ;'), 0);
    			$this->total_pages = ceil($this->total / $size);
    			$this->page = isset($_POST['page']) ? $_POST['page'] : $_GET['page'];
    			$this->page = !empty($this->page) && ctype_digit($this->page) && $this->page >= 1 && $this->page <= $this->total_pages ? $this->page : 1;
    			$this->start = ($this->page * $size) - $size;
    			$this->end = $this->start + $size < $this->total ? $this->start + $size : $this->total;
    			$this->get = mysql_query($query.' LIMIT '.$this->start.', '.htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($size)))))).' ;');
    			$this->count_get = @ mysql_num_rows($this->get);
    		}

    Взял перл из спора с каким-то мамкиным экспертом, утверждавшим "функциональщина - сраный легаси, ооп - наше всё". Здесь ещё куча алмазиков:
    https://bymas.ru/downloads/view/77400

    Запостил: monobogdan, 05 Августа 2019

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

    • > qwedazxscvfrtgnbhyujmkiolp1234567890WEDA ZXSCVFRTGNBHYUJMKIOLP
      Что за раскладка?

      Чем отличается generatePassword от generatePass_wiord.
      Ответить
      • Хз. Жаль тут ограничение в 100 строк, там по списку и инстансы класса, которые синглтоном должны быть. И куча перегрузок функций вида remains($a), remainss($b), remainsss($c).

        Вот фулл файл:
        https://bymas.ru/downloads/zip_open.php?act=pre&id=77400&index=458
        Ответить
      • Мне кажется, что раскладка QWERTY, просто змейкой по клавишам прошлись.
        Ответить
        • Ну да. Там по два символа из строки берется - видимо, чтобы пароль вводить удобнее было, каждые два символа получаются рядом на клавиатуре.
          Ответить
      • А generatePassword от generatePass_word отличаются алфавитом. Ваш кэп.
        Ответить
    • А где сам спор, а то я тут не увидел ни функциональщины, ни развёрнутого ООП?
      Ответить
      • функциональщина это когда есть слово function, вон их тут скока
        Ответить
      • Нету
        Ответить
        • ёбаное днище какое:)
          Ответить
        • Понял. Распространённая среди новичков путаница в терминологии.

          Функциональным программирование принято называть разновидность декларативного программирования (другой разновидностью декларативного является логическое). Его особенность в том, что выполняются операции над функциями. Ну типа как в математике бывают производные и интегралы от функций.

          Тут же разговор шёл о процедурном программировании, а не о функциональном. Процедура — это и есть функция (Паскаль различает процедуры и функции, в нём процедура — это та же функция, но без возвращаемого значения; Си и то, и другое называет функциями; Фортран же процедуры называет подпрограммами (subroutine) — тут наименование является делом вкуса разработчиков языков программирования). Но когда речь идёт о стилях программирования, термины «процедурный» и «функциональный» различаются.

          Вот для старта поиска:
          https://ru.wikipedia.org/wiki/Парадигма_программирования
          Ответить
          • Это не моя путаница, а моего школособеседника. Сначала хотел запостить ветку обсуждения но потом передумал - зачем его позорить?)

            А говорил он что-то в духе "процедурщина устарела, ООП лучше", хотя это высказывание как минимум некорректно.
            Ответить
            • Ахах, монобогдан, бдять. А стерео -, полибогдана у вас нет? )
              Ответить
              • Нет, но есть квадробогдан

                Касательно поста - это просто кусок из его кода, спор вёлся не в контексте этой пасты.
                Ответить
                • Гексабогдана у вас не найдется (мне хотя бы чуть-чуть... ну плз...).
                  Ответить
            • >процедурщина устарела, ООП лучше
              А потом спрашиваешь такого человека: а что такое ООП?
              И оказывается что ООП это оборачивать случайные куски кода в классы, чтобы писатьпотом не

              getFoo()
              а
              new Foo()->getFoo();
              Ответить
              • Ну так я к этому и клоню)

                Челик считает, что писать основную часть логики процедурно - плохо, и ООП здесь лучше, не понимая, что ООП - не средство для неймспейсинга, а лишь удобный способ абстрагировать данные конкретного инстанса. Как же он ошибается, особенно это касается относительно простых приложений с передроченной архитектурой(эти ваши фреймворки тому пример, когда ебучий CRUD блог растягивается на миллион контроллеров, мапперов, моделей и видов).
                Ответить
                • Laravel мне не понравился из-за Node болезней(дохуиллион зависимостей), у Zend нет доков, у CodeIgniter уёбищная архитектура. Поэтому f3 и люмены - самое то, чтобы посадить макаку с гикбрейнса и не дать ей насрать в кодовой базе.
                  Ответить
                  • Скажи это конарде
                    Ответить
                  • Зависимости это не проблема, имхо.
                    Яне пишу на пыхе, но если бы пришлсоь, я бы конечно взял какой-то фреймворк

                    Писать руками mysql_query 400 раз я бы не стал
                    Ответить
                    • Зачем?

                      > Писать руками mysql_query 400 раз я бы не стал
                      Есть аналог ODBC - PDO, есть дата мапперы. Чо ещё надо?
                      Ответить
                      • Например, надо чтобы я один раз описал модель, и получил для нее CRUD и формочки для создания, поиска и удаления.
                        Как в Django.
                        Ответить
                        • Это activerecord маппер называется
                          Ответить
                          • причем тут маппер вообще?
                            В джанго я говорю
                            class Author(models.Model)
                                name = models.CharField()
                                last_name = models.CharField()
                            
                            class Book(models.Model)
                                title = models.CharField()
                                author = models.ForegnKey(Author)

                            и за меня генерится таблица, и админка где я могу создавать авторов и привязывать к ним книги и я всегда могу сказать

                            Book.objects.filter(author_id=32)

                            и получить все книги автора
                            и я могу сказать
                            class MyView(views.ListView)
                               class Meta:
                                  model = models.Book

                            и получить вьюшку со списком книг
                            и поставить django-filter и сделать фильтр по книгам.
                            Все это за пол часа пишется
                            Ответить
                            • А, сори, совсем забыл же что в питоне все максимально по уебански сделано. И медленный он пиздец. Лучше на пыхе писать.
                              Ответить
                              • Поэтому я за "PHP".
                                Ответить
                              • конечно, лучше много раз написать вручную круд

                                > И медленный он пиздец
                                когда некто говорит что "язык foo медленее языка bar", то сразу становится понятно что этот кто-то полный дебил, а может быть даже и пхпшник
                                Ответить
                            • Переведи на "PHP".
                              Ответить
                              • хз, симфони какие-нить
                                Ответить
                                • Нормальные только микрофреймворки, реализующие минимум необходимого. Обычные мне не особо зашли, хотя макакам норм.
                                  Ответить
                                  • >Обычные мне не особо зашли
                                    Исчерпывающе
                                    Ответить
                • ООП это просто инструмент. Иногда он удобен, иногда нет.
                  Сказать 'ООП всегда лучше процедурного подхода' это всё равно, что сказать 'веб интерфейс всегда лучше комманд лайна' или "массив всегда лучше набора"
                  Ответить
    • generatePassword и generatePass_word
      generateLogin а почему нет generateLo_gin
      Ответить
    • http://aleshastupin.com/wp-content/uploads/0964.jpg
      Ответить
      • Зачем ты пиаришь тут картинки какого-то слабоумного мальчика? Я не дам ему денег на лечение.
        Ответить
      • «Wordpress» –— говно.
        Ответить
        • +1

          больгшинство ддос аттак совершается через сломанные вордпрессы

          Если переместиться в 1995-й год и убить авторов ПХП, то представь каким чистым и безопасным стал бы наш мир
          Ответить
      • Да ты поехавший!
        Ответить
    • > $str = str_replace("[l] http://", "[l]", $str);
      А это, блять, защита от чего?
      Ответить
      • От ссылок после бб-кода [l]. Ваш кэп.

        Мне пока не попадалась реализация BB с таким кодом, поэтому я не знаю, что этот код означает: link или list.

        Кстати, дарю 0-day exploit: вставляйте ссылки с https://, тогда ничего не заменится.
        Ответить
    • $this->total = mysql_result(mysql_query(preg_replace('~ SELECT (.*?) FROM~isU', 'SELECT COUNT(*) FROM', $query).' ;'), 0);

      Поясните за ваш PHP. Что это за хуйня тут вообще происходит?
      Ответить
      • Просто регексп. По задумке автора превращает любой произвольный запрос в запрос на выборку каунта.
        Ответить
      • Заменяет "SELECT len FROM huis" на "SELECT COUNT(*) FROM huis".
        Если повторять замену рекурсивно, ничего не изменится.
        Ответить
    • Какой защищенный сайт! Ни одна инъекция не пройдет!
      https://bymas.ru/downloads/zip_open.php?act=pre&id=77400&index=449
      Ответить
      • > 'or','OR','"or','"or"','"OR','"OR"'
        ORу с этого!
        Ответить
      • типичный ПХП код
        Ответить
      • >>> htmlspecialchars(stripslashes(addslashes (strip_tags(mysql_real_escape_string(tri m($use_id))))))
        Методология защиты под названием «три гондона».
        Ответить
        • Интересно, а нет ли у этого наслоения гондонов какой-то уязвимости? В духе испорченного лишними функциями экранирования.
          Ответить
          • в любом коде на PHP всегда есть XSS, Sql injection и двойное экранирование

            Отто Фон Бисмарк
            Ответить
          • Интересно, что в итоге делает пара stripslashes(addslashes())
            Ответить
          • Гондоны — это Расмус Лердорф, Энди Гутманс и Зеев Сураски?
            Ответить
        • Кажется нашёл интересный момент: mysql_real_escape_string() согласно доке экранирует нолик, а strip_tags() его удаляет. Т.е. в теории можно разбалансировать экранировку следующего символа. У кого-нибудь есть старое PHP чтобы проверить?
          Ответить
    • В Московii ночь длинных ножей через три... два...

      Суд арестовал жителя Подмосковья, обвиняемого в призывах к насилию над детьми силовиков

      Пресненский суд Москвы отправил под арест жителя Подмосковья Владислава Синицу, обвиняемого в призывах к расправе над детьми сотрудников правоохранительных органов. По версии следствия, он опубликовал призыв под ником Макс Стеклов.

      Дело против Синицы возбуждено по статье об экстремизме (282 УК РФ). По версии следствия, он под псевдонимом разместил пост, направленный на "возбуждение вражды и ненависти ко всем сотрудникам правоохранительных органов и членам их семей".
      Ответить
    • Он прав, функциональщина для петухов, именно поэтому я против перла
      Ответить
      • для орлов, ты хотел сказать?
        Ответить
        • сначала ты функционалишь, а потом верстаешь на реакте и считаешь себя "программистом"
          Ответить
          • Сначала ты функционалишь, а потом верстаешь на ректале.
            Ответить
            • О даа... "Игра в ООП" сильно затягивает, главное, сильно не увлечься, а то заплутаешься в созданном тобой же лабиринте.
              Ответить
          • в то время как настоящие программисты пишут mysql_real_escape и текут
            Ответить
    • Хакеры взломали сервер крупного подрядчика российских спецслужб и ведомств, а затем поделились с журналистами описаниями десятков непубличных проектов в области интернета: от деанонимизации пользователей браузера Tor до исследования уязвимости торрентов.

      "Наутилус" и Tor

      Проект "Наутилус-С" был создан, чтобы деанонимизировать пользователей браузера Tor.

      Tor распределяет интернет-соединение случайным образом по узлам (серверам) в разных концах света, позволяя своим пользователям обходить цензуру и скрывать свои данные. Также он позволяет заходить в даркнет - "скрытую сеть".

      Программный комплекс "Наутилус-С" разработан "Сайтэком" в 2012 году по заказу НИИ "Квант". Он включает в себя "выходной" узел Tor - сервер, через который отправляются запросы на сайты. Обычно такие узлы поддерживаются энтузиастами на добровольной основе.

      Но не в случае с "Сайтэком": зная, в какой момент конкретный пользователь отправляет запросы через Tor (например, от интернет-провайдера), операторы программы могли при определенном везении сопоставить их по времени с заходами на сайты через подконтрольный узел.

      В "Сайтэке" также планировали подменять трафик пользователям, попавшим в специально созданный узел. Сайты для таких пользователей могли выглядеть иначе, чем на самом деле.

      Аналогичную схему хакерских атак на пользователей Tor обнаружили в 2014 году эксперты Университета Карлстада в Швеции. Они описали 19 связанных между собой враждебных "выходных" узлов Tor, 18 из которых управлялись напрямую из России.

      На то, что эти узлы связаны, указывала также общая для них версия браузера Tor - 0.2.2.37. Такая же версия указана в "руководстве оператора" "Наутилус-С".

      https://www.bbc.com/russian/features-49050982
      Ответить
      • > версия браузера
        Лолшто. Может быть сервера?
        Ответить
        • Ох уж эти журнализды, для которых «Tor» — это «Tor Browser».
          Ответить
          • Ну и low-latency сети типа tor'а вообще не защищены от подобных атак. Выходная нода может "пометить" трафик определённым таймингом между cell'ами. И дальше эти тайминги пойдут более-менее неизменными по всей цепочке.
            Ответить
            • Ну примерно так же эти ваши амазоны тоже могут пометить вас с VPN. У них в инфраструктуре свои виртуальные интерфейсы, которые слушаются 24/7, я гарантирую это
              Ответить
          • гавно этот Ваш тор-броувзер.
            Хочешь узнать, какой парфюм использует прокурор, а также пообщаться с ним лично -
            поставь тор и начни торговать там опиумом для народа
            Ответить

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