The Fly's PHP - Делаем из Мухи Слона – Telegram
The Fly's PHP - Делаем из Мухи Слона
424 subscribers
29 photos
1 video
64 links
Авторский блог Сергея Мухина

Чат: @fly_php_public

Сайт автора: https://sergeymukhin.com
Download Telegram
Уязвимость OpenSSL USN-6119-1

Мэтт Касвелл обнаружил, что OpenSSL можеть неправильно обрабатывать определенные идентификаторы объектов ASN.1.

Уязвимость заключается в том, что злоумышленник может использовать эту проблему, чтобы удаленно заставить OpenSSL потреблять сильно ресурсы, что приведет систему к отказу в обслуживании. (CVE-2023-2650)

OpenSSL неправильно обрабатывает расшифровку шифра AES-XTS на 64-битных платформах ARM. Эта проблема затрагивает 18.04 LTS, 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 22.10 и Ubuntu 23.04. (CVE-2023-1255)

Инструкции по обновлению:

sudo pro fix USN-6119-1

Результатом будет чек лист пофиксенных или пропущенных USN

Проблему можно решить, обновив систему до следующих версий пакетов:

Ubuntu 23.04:

libssl3 3.0.8-1ubuntu1.2

Ubuntu 22.10:

libssl3 3.0.5-2ubuntu2.3

Ubuntu 22.04 LTS:

libssl3 3.0.2-0ubuntu1.10

Ubuntu 20.04 LTS:

libssl1.1 1.1.1f-1ubuntu2.19

Ubuntu 18.04 LTS:

libssl1.0.0 1.0.2n-1ubuntu5.13

libssl1.1 1.1.1-1ubuntu2.1~18.04.23

CVE, содержащиеся в этом USN, включают: CVE-2023-1255, CVE-2023-2650.
👍1🤯1
Всем привет, у меня тут подъехал второй отчет в 2023 году об используемых версий PHP:

Как можно заметить процент использования новой версии PHP 8.2 растет и это радует)

более полная информация и красивые диаграммы в новом посте https://sergeymukhin.com/blog/statistika-versii-php-vypusk-20232
👍5
Ребят, мы тут зарелизили #Phalcon 5.2.3.

По большей части были проведены исправления, особенно большой рефакторинг коснулся работы с json, изменены все методы json_encode/json_decode в пользу классов Phalcon\Support\Helper\Json\Encode и Phalcon\Support\Helper\Json\Decode.


- Класс Phalcon\Di\Injectable был расширен от stdClass для удаления предупреждения об устаревании динамических свойств для PHP 8.2
- Исправлен тип возврата Phalcon\Mvc\View::getVar()
- Исправлен Phalcon\Http\Request::getJsonRawBody для защиты от пустого тела запроса
- Добавлен метод getAdapter() в Phalcon\Mvc\Model\Metadata для получения адаптера внутреннего кеша при необходимости
- Добавлен новый адаптер Phalcon\Storage\Adapter\Weak, реализованный с #WeakReference, для кэширования/извлечения объектов, еще не собранных сборщиком мусора

Кто использует фреймворк в работе можете обновиться https://github.com/phalcon/cphalcon/releases/tag/v5.2.3
👍4
Хорошего начала недели, пусть это и будет уже вторник)
Итак, небольшое дополнение к RFC PHP8.3:

class_alias() теперь поддерживает псевдонимы встроенных классов PHP, как вы помните функция class_alias() создает псевдоним для переданного класса. Класс с псевдонимом ведет себя точно так же, как исходный класс.

Но до PHP 8.3 попытка создать псевдоним для встроенного класса PHP приводила к исключению ValueError:

class_alias('stdClass', 'MyClass'); 
class_alias('Traversable', 'NewTraversableInterface');

ValueError: class_alias(): Argument #1 ($class) must be a user-defined class name, internal class name given


Начиная с PHP 8.3 можно использовать псевдонимы для встроенных классов и интерфейсов и данный код отработает корректно.
👍2
Добрый день, ребят!
Тут новость одной строкой:

Автору дизайна elePHPant и автору логотипа PHP 8 Винсенту Понтье пришла в голову идея логотипа PHP 9.
👍2💩2🔥1
С началом недели!

Итак, Новая функция mb_str_pad в PHP 8.3.

В PHP различные строковые функции доступны в двух вариантах: один для байтовых строк, а другой для многобайтовых строк (mb). Однако заметным отсутствием среди многобайтовых строковых функций mbstring является эквивалент str_pad(). В функции str_pad() отсутствует поддержка многобайтовых символов, что вызывает проблемы при работе с языками, использующими многобайтовые кодировки, такие как UTF-8. Этот RFC предлагает добавить в PHP такую ​​функцию, которую мы будем называть mb_str_pad():

function mb_str_pad(
string $string,
int $length,
string $pad_string = " ",
int $pad_type = STR_PAD_RIGHT,
?string $encoding = null,
): string {}


var_dump(str_pad('Проверка', 10, '_', STR_PAD_RIGHT));   // Выведет: string(8) "Проверка"

// Тут же посчитается все верно и выведет два конечных __ после слова
var_dump(mb_str_pad('Проверка', 10, '_', STR_PAD_RIGHT));// string(10) "Проверка__"
👍5👏2
Впереди вечер пятницы и выходные!

И можно почитать небольшой пост, по решению ошибки ERR_HTTP2_PROTOCOL_ERROR

Если у вас на сайте периодически стали выдаваться ошибки ERR_HTTP2_PROTOCOL_ERROR по запросу ресурса, и погуглить в интернете то многие сайты выдают стандартный набор советов, для простого пользователя, которые никак не касаются разработки.

Выполнить их, конечно можно, и проблема как пользователя возможно будет решена, но если вы разработчик/девопс и после деплоя приложения на сервере у вас возникает данная проблема, то одними такими действиями вы себе не поможете.

В конфиге вашего виртуального хоста nginx скорее всего есть такие директивы (или определены по умолчанию):

fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;

Вот как раз нехватка размера буфера и приводит к данной ошибке ERR_HTTP2_PROTOCOL_ERROR в ответ на запрос ресурсов. Следовательно увеличив размера буфера, например x2:

fastcgi_buffer_size 16k;
fastcgi_buffers 8 16k;

В принципе все)

Как обычно с картинками и более подробным описанием в новом посте https://sergeymukhin.com/blog/kak-ispravit-osibku-err-http2-protocol-error-v-brauzere
👍3🔥1
Всем привет и с 1 сентября!
Хоть и прошло много лет, а в груди все еще ёкает при наступлении первого числа осени!)

Итак, можно сказать уже последние RFC перед релизом

PHP 8.3: PHP CLI Lint (php -l) поддерживает проверку нескольких файлов одновременно

Как вы знали (или узнаете сейчас) PHP в CLI предоставляет функцию Linting, которая проверяет переданное имя файла на наличие синтаксических ошибок. Это полезно для быстрой проверки PHP-файла или фрагмента перед выполнением.

До PHP 8.3 было невозможно выполнить анализ нескольких файлов PHP за один вызов; независимо от количества предоставленных файлов, PHP CLI анализирует только первый файл:

php -l somefile.php

// No syntax errors detected in somefile.php

Начиная с PHP 8.3, можно передавать несколько файлов PHP, и PHP CLI проверяет их все за один вызов:

php -l somefile.php otherfile.php

// No syntax errors detected in somefile.php
// No syntax errors detected in otherfile.php

Если линтер обнаруживает какие-либо ошибки в любом из предоставленных файлов, он показывает ошибку и переходит к остальной части списка. Если какой-либо из файлов не прошел проверку, он выдает ошибку:

- Если файл был недоступен, код выхода будет 1.
- Если какой-либо из файлов не удалось валидировать, код выхода будет 255.
- Если присутствуют оба условия ошибки, код выхода будет 1.

Помимо передачи нескольких имен файлов по отдельности, также можно использовать шаблон glob для проверки нескольких файлов:

php -l src/*.php src/**/*.php
🎉4👍21
Всем большой привет!

Итак, первое, поздравляю всех с профессиональным праздником Днем Программиста (как вы помните это 256 день)

Второе, сегодня мой день рождения, потому праздную я вдвойне можно сказать 😄 и у меня для вас есть интересная информация напрямую от одного из главных контрибьюторов PHP Дмитрия Стогова о новом JIT-движке, который будет использоваться в следующих версиях PHP.

Как вы знаете JIT появился в PHP 8.0 и представлял из себя компиляцию "на лету" - Just In Time, так же вы вероятно знаете, что PHP является интерпретируемым языком, он не компилирует программы в прямом смысле этого значения, как, например это делают C или Rust.

Чтобы включить JIT нужно было указать несколько параметров конфига php.ini.

Новый JIT движок PHP

Дмитрий Стогов поделился информацией в internal рассылках PHP о новом JIT-движке, который будет использоваться в следующих мажорных версиях PHP. Теперь это настоящий оптимизирующий компилятор с промежуточным представлением, аналогичный серверному компилятору Java HotSpot.

Он создает основу для будущих улучшений и устраняет многие низкоуровневые детали существующего PHP JIT. Вместо поддержки ассемблерного кода для разных процессоров теперь PHP генерирует один IR и передает его независимому от PHP JIT-движку.

Новая реализация JIT основана на IR-Lightweight JIT Compilation Framework и в отличии от старого JIT-подхода в PHP 8.*, который генерирует собственный код непосредственно из байт-кода PHP, эта реализация генерирует промежуточное представление (IR) и делегирует все задачи более низкого уровня в IR Framework. IR для JIT похож на абстрактное синтаксическое дерево (AST) для компилятора.

По сравнению с классическими оптимизирующими компиляторами (такими как GCC и LLVM), IR Framework использует очень короткий конвейер оптимизации. В сочетании с компактным IR-представлением это делает его чрезвычайно быстрым и позволяет генерировать довольно хороший машинный код за разумное время.

Более подробно и с примерами в новом посте https://sergeymukhin.com/blog/novyi-jit-dvizok-dlia-php-84-i-php-9
🎉7👍2
Ребят, привет!

Сегодня четверг и пара интересных новостей:

- Выпущен второй релиз кандидат для PHP 8.3

Как вы помните первый релиз кандидат PHP 8.3 был выпущен 31 августа, теперь же и второй кандидат доступен для тестирования, осталось еще 4 кандидата для финального выпуска.
Обратите внимание, что версии-кандидаты PHP 8.3 предназначены только для тестирования будущей версии PHP и не готовы для производственных систем.


31 Августа  RC 1
14 Сентября RC 2
28 Сентября RC 3
12 Октября RC 4
26 Октября RC 5
9 Ноября RC 6
23 Ноября GA


- Стали подготавливать список устаревших функции для PHP 8.4
👍4🐳1
Доброе утро, бодро работаем в пятницу и все те же пара новостей!

- Выпущен третий релиз кандидат для PHP 8.3 от
28 Сентября RC 3
Выше в посте можно увидеть график выхода всех релизов.


И к новостям о следующей версии PHP 8.4:

Вывод phpinfo() в PHP 8.4 будеть показывать размер целого числа, поддерживаемый текущей настройкой PHP в битах, также включается в выходные данные PHP CLI. Как вы помните, ранее все предыдущие версии (начиная с PHP 5.0.5) поддерживают константу PHP_INT_SIZE для определения размера целого числа.
3👍2
Всем отличной пятницы, друзья!

Я тут немного расслабился в отпуске и пока не могу от него еще отойти, но давайте быстро наверстаем упущенное по текущим новостям:

1. Во-первых 12 и 26 Октября прошли 4 и 5 Релиз Кандидаты PHP 8.3

2. Как вы знаете интернет (те же сервисы Гугла и клиенты Cloudflare) потрясла HTTP/2 атака Rapid Reset (быстрого сброса)
При определенных условиях эту уязвимость можно использовать для выполнения атаки типа "отказ в обслуживании" в nginx или других продуктах, реализующих серверную часть спецификации HTTP/2. Чтобы защитить ваши системы от этой атаки, рекомендуется немедленно обновить конфигурацию NGINX или другого веб-сервера.

3. В PHP 8.4 стали появляться первые RFC, направленные на изменение текущего функционала, в частности
Алгоритмическая сложность хеширование паролей Bcrypt по умолчанию изменена с 10 на 12, чтобы сделать пароли более устойчивыми и сложными.

Это изменение по существу эквивалентно:

password_hash("some password", PASSWORD_BCRYPT, ["cost" => 12]);
👍51
Доброе утро!

За окном пятница, впереди выходные, давайте немного пробежимся по новостям:

1. 9 ноября вышел предпоследний релиз кандидат PHP 8.3 RC6
а это означает что следующий выпуск будет финальный, и по плану он 23 ноября, что уже довольно скоро)

2. Я продолжаю цикл статей о следующей версии HTTP/3 и здесь вы можете почитать о том, как подключить 3 версию http на Nginx
пример хоста nginx для подключения http3:
server
{
# для лучшей совместимости рекомендуется использовать один порт для quic и https
# указываем протокол quic и параметр reuseport для правильной работы с несколькими рабочими процессами
listen 443 quic reuseport;
listen 443 ssl;

# включаем поддержку http2
http2 on;
# включаем поддержку http3
http3 on;
# разрешаем GSO
quic_gso on;
# разрешаем проверку адреса
quic_retry on;

# Для работы QUIC требуется версия протокола TLSv1.3.
ssl_protocols TLSv1.2 TLSv1.3;

ssl_certificate /path_certs/fullchain.pem;
ssl_certificate_key path_certs/privkey.pem;

# для перенаправления браузеров в quic-порт
add_header Alt-Svc 'h3=":443";max=86400';

...

}
👍5🔥2
Релиз PHP 8.3

Ну вот и настало 23 ноября 2023 года, а с ним релиз следующей версии PHP 8.3.
Были небольшие проблемы с выпуском в планируемый срок, но официально он все же состоялся.

В PHP 8.3 есть улучшения классов только для чтения, новая функция json_validate(), дополнения к недавно добавленному классу Randomizer, обнаружение переполнения стека и многое другое.

Как установить можно почитать в последнем посте Как установить PHP 8.3 в Ubuntu/Debian.

Для Windows бинарники как обычно можно скачать https://windows.php.net/download/
👍5🔥3
Forwarded from Пых (Валентин Удальцов)
🎅 Через пару часов PHP Community Meetup!

Затусим в конце года, как обычно! Обсудим PHP 8.3, заслушаем доклады, запустим опрос сообщества и наверняка похоливарим на разные темы.

Что будет:
• Евгений Прохоров прямо на наших глазах ускорит PHP,
• Кирилл Несмеянов докажет, что никто, кроме него, не знает PHP,
• шеф-повар Александр Макаров приготовит Composer под новым соусом,
• Валентин Удальцов (это я) покажу вам PHP 8.3 во всей красе.

Проведёт мероприятие Михаил Каморин, а подсказывать текст из-за кулис будет наш бессменный режиссёр и продюсер — Алиса Круглова!

Залетайте в трансляцию на PHP Point, будет весело, как мне сейчас! Всех ждём в 12 по Москве.

https://youtu.be/JyxGieyBj3k
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉4
Ребята, привет, всех с наступающим Новым Годом!

Я тут немного пропадал, но в любом случае, у меня есть для вас новости, итак что у нас нового в PHP 8.4:

1. В PHP 8.4 появится поддержка AEGIS-128L и AEGIS256 в Sodium
AEGIS - это семейство алгоритмов шифрования с проверкой подлинности на основе AES, которые работают быстрее, чем AES-GCM. Расширение Sodium в PHP 8.4 поддерживает алгоритмы шифрования AEGIS-128L и AEGIS256, если расширение Sodium скомпилировано с версией libsodium 1.0.19 или новее. Расширение Sodium в PHP 8.4 добавляет шесть новых функций и четыре новые константы PHP для AEGIS-128L и AEGIS-256AEAD.

2. Новый метод DateTime createFromTimestamp

До PHP 8.4, чтобы создать экземпляр DateTime или DateTimeImmutable из временной метки UNIX, его нужно было создать с помощью createFromFormat:

$dt = DateTimeImmutable::createFromFormat('U', (string) 1703485481);
$dt->format('Y-m-d'); // "2023-12-25"


С PHP 8.4 классы DateTime и DateTimeImmutable в PHP 8.4 имеют новый метод createFromTimeStamp, позволяющий легко создать экземпляр из заданной временной метки UNIX в виде целого числа или значения с плавающей запятой.

$dt = DateTimeImmutable::createFromTimeStamp(1703485481);
$dt->format('Y-m-d'); //"2023-12-25"


Далее, если вы разработчик своих пакетов PHP, то возможно вам будет полезна информацию о предложении Composer установки девтулсов в require-dev в новом посте
https://sergeymukhin.com/blog/composer-zastavit-ustanovku-paketa-require-dev

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

Всем удачи и хорошего Нового Года!!!
🎄12👍43
🎄С НОВЫМ 2024 ГОДОМ!🎄

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

Как заметили в комментариях к предыдущему посту в дайджесте PHP 8.4 я не упомянул про новый движок JIT, про него есть более подробный пост выше.

А вот в продолжении к нему, недавно принятый RFC, про cпособ отключения/включения JIT по умолчанию:

До PHP 8.4 JIT был как был и включен и отключен по умолчанию, используя значение по умолчанию opcache.jit_buffer_size=0 вместо opcache.jit=disable. Это фактически отключает JIT не потому, что jit=disable, а потому что размер буфера установлен равный 0.

В этом RFC предлагается изменить эти значения по умолчанию на выключенный jit и размер буфера на 64 мегабайт:
opcache.jit=disable
opcache.jit_buffer_size=64m


Еще одна интересная новость, Валентин Удальцов автор канала Пых опубликовал RFC в котором пасрер PHP может пренебрегать скобками при обращении к объектам, созданным через new, т.е. вместо
(new Class())->method()

можно будет писать:
new Class()->method()


В данный момент это невозможно сделать, т.к. парсер PHP выдаст ошибку синтаксиса. Будем следить за развитием этого RFC.

Ну и как обещал разыграл слона и он уезжает к @Drummi, поздравляю! @Drummi напишите мне в личку адрес, куда я отправлю слона.

Надеюсь 2024 год будет насыщен на новые интересные и полезные RFC PHP.
🎄7👍3
Всем привет и хороших праздничных выходных!)

Ребят, тут phpcommunity.ru сделало свой ежегодный опрос среди разработчиков, можно неспеша пройти его — до закрытия осталось 3 дня.
Что интересно, там тоже можно будет выиграть php слона)

Ну и как обычно результаты будут в конце января, из них мы узнаем какой сейчас современный пхп разработчик, чем он "дышит" и  интересуется.

https://forms.gle/n9QErGz5iGYrWEzj9
👍3