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

    −2

    1. 1
    Пидарашки, приведите реальный пример говнокода.

    Запостил: Antifriz_otrabotanyi, 05 Декабря 2019

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

    • if (new Boolean(x > 0).toString().length() == Math.round(Math.pow(Math.sin(Math.PI/6), -2))) {
          System.out.println("x > 0");
      }


      https://ideone.com/aVwOK3
      Ответить
    • Почему, если говнокод, то сразу "PHP"?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • >> global $database;
        >> return $database;

        Паттерн «Синголтон».
        Ответить
      • >exception $ex
        Ебля с эксепшенами
        Ответить
      • > it shows all errors
        Прямо в браузер?
        Ответить
        • Оказывается, в файл:
          https://github.com/EFTEC/PdoOne/blob/master/lib/PdoOne.php
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Погуглил, что такое «Twitter's snowflake». Нашёл вот это:
              https://developer.twitter.com/en/docs/basics/twitter-ids

              https://github.com/twitter-archive/snowflake

              Ничего не понял.
              Ответить
            • The problem

              Some programming languages such as Javascript cannot support numbers with > 53-bits. This can be easily examined by running a command similar to: (90071992547409921).toString() in a browser console or by running the following JSON snippet through your JSON parser.
              {"id": 10765432100123456789, "id_str": "10765432100123456789"}

              In affected JSON parsers the ID will not be converted successfully and will lose accuracy. In some parsers there may even be an exception.

              Если число не помещается в 53 бита, жопоскрипт его интерпретирует как плавающего питуха что ли?
              Ответить
              • Проверяем выхлоп (90071992547409921).toString().
                Pale Moon (какой-то из форков «SpiderMonkey»):
                "90071992547409920"
                Chrome (V8):
                "90071992547409920"
                Opera/Presto (Carakan):
                "90071992547409920"
                Internet Explorer (Chakra):
                "90071992547409920"
                QupZilla (JavascriptCore, такой же движок в «Safari»):
                "90071992547409920"
                Netscape 4.8 (не знаю, какой там движок, может быть, Rhino?):
                "90071992547409920"

                Похоже, что числа, не влезающие в 32 бита, переводятся в double. Пока влезает в 53 бита, ошибок округления нет. Прямо как в «Бейсике» на «Спектруме» и на «Атари», где целые и плавпитухи не различались.

                А если бы использовали промежуточный 80-битный формат плавпитуха, то в мантиссу бы влезло 64 бита и вообще никто бы не заметил подвоха.
                Ответить
                • Это говно, типы данных отличные от строки не нужны.
                  Ответить
              • Ещё одно последствие разработки языка путём сранья на салфетку.
                JavaScript numbers are always stored as double precision floating point numbers
                Ответить
            • > if (PHP_INT_SIZE == 4)
              А я думал пхп высокоуровныевый язык.
              Ответить
        • vanished
          Ответить
        • >> Прямо в браузер?

          Вот тут неплохо сделали:
          http://webfile.ru/265

          Удобно, всё понятно.

          Главное, всю цепочку вызовов показывает с фрагментами исходников.

          Угадайте, на каком языке написано.
          Ответить
          • > DOCROOT/index.php
            И правда удобно, пути не палятся. Правда, совершенно непонятно, нафига отладочную инфу в проде высирать, тем более на 404 ошибку…

            С другой стороны, учитывая, сколько в Интернете сайтцов на «Джанге» с «Debug = True», затирание конфиденциальных данных в стектрейсе выглядит полезным.
            Ответить
          • http://webfile.ru/movie
            И пароль от постгреса показывает. Удобно.
            Ответить
            • Кто-нибудь проверял, он наружу торчит или доступен только с локалхоста?
              Ответить
              • Они за «Cloudflare» и IP, при беглом осмотре, не палят. Именно поэтому я за «Cloudflare».

                Но вообще история записей говорит, что они, скорее всего, в 95.163.64.0/18 сидят. Можно просканить 5432 порт, если у кого-нибудь есть желание и абузоустойчивая впска.
                Ответить
            • А де там пороль?
              Ответить
              • Кликни по ссылке (arguments)
                Там будет реальный пример пароля.
                Ответить
                • Какой позор )))

                  Слушай, а это у какахана такая отладка или это униКАЛьная разработка?
                  Ответить
                  • Это стандартное отладочное сообщение, включенное по умолчанию:
                    http://web.archive.org/web/20161017100645/kohanaframework.org/3.3/guide/kohana/errors

                    На сайте «Любимой» «Коханы» единственная кнопка «Скачать». Т. е. документация доступна только в офлайне или в вебархиве.

                    В подвале сайта: «RIP Kohana 2007 - 2017». Последняя версия была в 2016. Возможно, в какой-то из версий PHP 7.x она перестанет работать. На замену готовят форк:
                    https://github.com/koseven/koseven/
                    Ответить
                    • Хихи, у форка такой же позор:
                      https://koseven.ga/documentation/kohana/errors

                      Всё правильно сделали.

                      MAKE KOHANA GREAT AGAIN!
                      Ответить
                      • А вот «Django», даже при включённом «debug = True», тщательно затирает из дебажного выхлопа всё, что напоминает пароли. Именно поэтому я за «Django».
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                        • А как оно отличает пароли от обычного текста?
                          Ответить
                          • ЕМНИП, смотрит в названия ключей: если видит там «password», «key» и тому подобное — фильтрует.
                            Ответить
                            • Нагуглил вот это:
                              def sensitive_post_parameters(*parameters):
                                  """
                                  Indicate which POST parameters used in the decorated view are sensitive,
                                  so that those parameters can later be treated in a special way, for example
                                  by hiding them when logging unhandled exceptions.
                              
                                  Accept two forms:
                              
                                  * with specified parameters:
                              
                                      @sensitive_post_parameters('password', 'credit_card')
                                      def my_view(request):
                                          pw = request.POST['password']
                                          cc = request.POST['credit_card']
                                          ...
                              
                                  * without any specified parameters, in which case consider all
                                    variables are sensitive:
                              
                                      @sensitive_post_parameters()
                                      def my_view(request)
                              Ответить
                              • Ага. Хардкорный багор )))
                                def get_traceback_frame_variables(self, request, tb_frame):
                                	"""
                                	Replace the values of variables marked as sensitive with
                                	stars (*********).
                                	"""
                                	# Loop through the frame's callers to see if the sensitive_variables
                                	# decorator was used.
                                	current_frame = tb_frame.f_back
                                	sensitive_variables = None
                                	while current_frame is not None:
                                		if (current_frame.f_code.co_name == 'sensitive_variables_wrapper' and
                                				'sensitive_variables_wrapper' in current_frame.f_locals):
                                			# The sensitive_variables decorator was used, so we take note
                                			# of the sensitive variables' names.
                                			wrapper = current_frame.f_locals['sensitive_variables_wrapper']
                                			sensitive_variables = getattr(wrapper, 'sensitive_variables', None)
                                			break
                                		current_frame = current_frame.f_back
                                
                                	cleansed = {}
                                	if self.is_active(request) and sensitive_variables:
                                		if sensitive_variables == '__ALL__':
                                			# Cleanse all variables
                                			for name in tb_frame.f_locals:
                                				cleansed[name] = CLEANSED_SUBSTITUTE
                                		else:
                                			# Cleanse specified variables
                                			for name, value in tb_frame.f_locals.items():
                                				if name in sensitive_variables:
                                					value = CLEANSED_SUBSTITUTE
                                				else:
                                					value = self.cleanse_special_types(request, value)
                                				cleansed[name] = value
                                	else:
                                		# Potentially cleanse the request and any MultiValueDicts if they
                                		# are one of the frame variables.
                                		for name, value in tb_frame.f_locals.items():
                                			cleansed[name] = self.cleanse_special_types(request, value)
                                
                                	if (tb_frame.f_code.co_name == 'sensitive_variables_wrapper' and
                                			'sensitive_variables_wrapper' in tb_frame.f_locals):
                                		# For good measure, obfuscate the decorated function's arguments in
                                		# the sensitive_variables decorator's frame, in case the variables
                                		# associated with those arguments were meant to be obfuscated from
                                		# the decorated function's frame.
                                		cleansed['func_args'] = CLEANSED_SUBSTITUTE
                                		cleansed['func_kwargs'] = CLEANSED_SUBSTITUTE
                                
                                	return cleansed.items()
                                Ответить
                                • В общем, чтобы заменял, ему нужно передать список «нехороших слов».

                                  А по умолчанию какие настройки?
                                  Ответить
                                  • Ну вот настройки подключения к БД вырезает, если я ничего не путаю.
                                    Ответить
    • показать все, что скрытоvanished
      Ответить
    • Въебал по минусу ублюдкам!
      Ответить

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