Апрель 2024

Апрель 2024

Подборка свежих новостей, инструментов, видео и материалов из мира PHP.

Приятного чтения!

Новости

Заявление PHP об уязвимости в glibc/iconv

Шумиха вокруг CVE-2024-2961, связанная с PHP, была крайне преувеличена. У многих сложилось впечатление, что уязвимость существует в самом языке и оказывает огромное влияние на PHP-разработчиков. Однако это не так.

Уязвимость может быть удалённо использована только в том случае, если приложение использует функции и потоковые фильтры модуля iconv с не валидированными кодировками, полученными из внешних источников.

Ваш код должен быть довольно необычным, чтобы подвергнуться такой атаке:

1iconv ('utf-8', $_REQUEST['charset'],' my -text');

Лучше проявить излишнюю осторожность и проверить использование iconv.

Не стоит ожидать выпуска патча от PHP, поскольку glibc является динамически подключаемой библиотекой и не компилируется вместе с интерпретатором. Обновления glibc будет достаточно.

Вышли PHP 8.1.28, PHP 8.2.18 и PHP 8.3.6

❗ Это выпуски исправлений безопасности. В них исправлены CVE-2024-1874, CVE-2024-2756 и CVE-2024-3096, в PHP 8.3.6 дополнительно исправлена уязвимость CVE-2024-2757.

❗️Выпуск PHP 8.3.5 был пропущен, пожалуйста, не используйте этот тег.

Всё, что нужно знать о бэкдоре в XZ

Если вы не следили за этой историей, то вот вкратце, что произошло. Некто под GitHub-аккаунтом @JiaT75 в течение 2 лет вносил свой вклад в библиетеку `liblzma, создавая SSH-бэкдор незаметно для других сопровождающих. Он сделал более 700 коммитов, из которых лишь небольшое количество было вредоносным и спрятано в тестовых файлах.

Странное поведение было случайно обнаружено при проведении микробенчмаркинга утилиты XZ. Скорее всего, эта атака не является единичным случаем. По крайней мере, OpenJS Foundation уже сообщал о неудачных попытках захвата их проектов.

Объединение усилий для разработки стандартов кибербезопасности

PHP Foundation будет сотрудничать с фондами Apache Software, Eclipse, Rust и Python Software для создания стандартов для закона Европейского союза о киберустойчивости (CRA).

CRA – это первый в мире закон, регулирующий индустрию программного обеспечения в целом. Он обязывает определенные проекты с открытым исходным кодом следовать политике кибербезопасности, сообщать об инцидентах и уязвимостях, а также сотрудничать с органами надзора за рынком.

Вышел PhpStorm 2024.1

Главные новинки этой версии:

  • Автодополнение строки целиком с помощью локального ИИ
  • Поддержка Symfony AssetMapper
  • Новый терминал
  • Улучшения для Pest
  • Поддержка PHPUnit 11.0

PHP Core

Большинство новостей ядра PHP подробно освещаются в серии PHP Core Roundup от PHP Foundation, мы лишь быстро по ним пробежимся:

RFC: Property hooks

Хуки стали одним из самых больших и обсуждаемых RFC, в одном из предыдущих выпусках мы о них уже упоминали.

Они позволят разработчикам переопределять стандартное поведение get и set свойств объекта.

1class Foo
2{
3 private int $runs = 0;
4 
5 public function getRuns(): int { return $this->runs; }
6 
7 public function setRuns(int $runs): void
8 {
9 if ($runs <= 0) throw new Exception();
10 $this->runs = $runs;
11 }
12}
13 
14$f = new Foo();
15 
16$f->setRuns($f->getRuns() + 1);

С помощью хуков свойств можно упростить:

1class Foo
2{
3 public int $runs = 0 {
4 set {
5 if ($value <= 0) throw new Exception();
6 $this->runs = $value;
7 }
8 }
9}
10 
11$f = new Foo();
12$f->runs++;

Larry Garfield и Ilija Tovilo вдохновлялись языками Kotlin, C# и Swift при разработке этого RFC.

RFC был принят подавляющим большинством голосов и мы с нетерпением ждем хуки в PHP 8.4.

📣 RFC: new MyClass()->method() without parentheses

RFC Валентина Удальцова, о котором мы говорили в конце прошлого года, перешел в стадию обсуждения.

📣 RFC: array_find

Joshua Rüsweg предлагает добавить новую функцию для поиска первого элемента, для которого callback-функция возвращает значение true.

1$array = [ 'a' => 'dog', 'b' => 'cat', 'c' => 'cow', 'd' => 'duck', 'e' => 'goose'];
2 
3// Поиск первого животного, имя которого начинается с «с»
4var_dump(array_find($array, function (string $value) {
5 return str_starts_with($value, 'c');
6})); // cat

📣 RFC: Casing of acronyms in class and method names

Tim Düsterhus предлагает пересмотреть предыдущее решение RFC по именованию классов. Вместо того, чтобы относиться к аббревиатурам как к обычным словам, сделать имена классов согласованными с PascalCase.

📣 RFC: Support object type in BCMath

BCMath в настоящее время поддерживает только процедурные функции. Saki Takamachi предлагает добавить в модуле поддержку объектов типов.

📊 RFC: Deprecate GET/POST sessions

RFC о котором мы говорили в прошлом выпуске принят.

Сейчас PHP поддерживает два способа распространения идентификатора токена сессии: с помощью файлов cookie и с помощью параметров GET или POST.

В PHP 8.4, если параметр session.use_only_cookies отключён, а параметр session.use_trans_sid – включён, будет выдаваться предупреждение об устаревании.

В PHP 9.0 распространение идентификатора токена сессии с помощью параметров GET или POST будет удалено.

📊 RFC: Release cycle update

Поддержка безопасности для версий PHP увеличена на один год. Таким образом, каждая версия PHP будет поддерживаться 4 года: 2 года исправлений ошибок и 2 года исправлений безопасности.

Изменения применяются немедленно ко всем поддерживаемым в настоящее время веткам, а ветка PHP 8.1 получит дополнительный год исправлений безопасности.

RFC: Deprecate implicitly nullable parameter types

RFC: Dedicated StreamBucket class

RFC: Grapheme cluster for str_split function: grapheme_str_split

RFC: Rounding Integers as int

Выбраны релиз-менеджеры PHP 8.4

По традиции, у PHP 8.4 будет два новичка-релиз-менеджера: Saki Takamachi, разработчик ядра PHP, поддерживаемый PHP Foundation, и Calvin Buckley.

Им будет помогать ветеран релиз-менеджер PHP 8.3 Eric Mann.

Инструменты

  • Modelflow AI – A set of PHP packages that integrates various AI models and embeddings into a unified interface.

  • CodeWithKyrian/transformers-php – A toolkit for PHP developers to add machine learning capabilities to their projects easily. Intro post: Announcing TransformersPHP.

  • distantmagic/resonance – A framework specifically designed for building web applications with AI and ML capabilities. It’s based on Swoole and has built-in web and WebSocket servers.

  • tempestphp/highlight – Fast, extensible, server-side code highlighting for web and terminal. Intro post: I wrote a code highlighter from scratch. See how to use it with Twig and Symfony.

  • pronskiy/phpup – A single-file binary with zero dependencies that includes Composer and other PHP tools. It’s inspired by rustup and allows installing a per-project PHP based on your composer.json.

  • maglnet/ComposerRequireChecker – A CLI tool to check whether a specific composer package uses imported symbols that aren’t part of its direct composer dependencies.

  • Can I PHP? – A Raycast extension that enables checking if a certain function or method is available in different versions of PHP.

  • opencodeco/codespaces-php – A GitHub Codespaces template for PHP that allows you to start developing a PHP project in no time on a remote machine. Try it out!

  • php-forge/foxy – A BUN/NPM/Yarn/PNpM bridge for Composer that’s compatible with Yii assets, Symfony Webpack Encore, and Laravel Mix.

  • nazmulpcc/php-webview – A WebView extension for PHP. This is a PoC, but in theory, it could be a nice basis for NativePHP.

  • buttress/phpx – An experimental DOMDocument wrapper that generates safe HTML with ergonomic syntax.

  • luzrain/phpstreamserver – A PHP application server and process manager written in PHP on top of revoltphp/event-loop. It’s somewhat similar to php-pm/php-pm.

  • JBZoo/CSV-Blueprint – A strict and automated line-by-line CSV validation tool based on customizable YAML schemas.

  • shipmonk-rnd/composer-dependency-analyser – A tool for the fast detection of composer dependency issues, such as unused dependencies, shadow dependencies, and misplaced dependencies.

  • paragonie/phpecc – A pure PHP elliptic curve cryptography library.

  • libvips/php-vips – An extremely fast image manipulation package that’s ~5 times faster than Imagick or GD and consumes less memory. It’s a good FFI example.

Symfony

Laravel

Статьи

Видео

Сергей Пантелеев
Релиз-менеджер PHP 8.2
Роман Пронский
Администратор PHP Foundation
Краткий дайджест в нашем Telegram
Ещё больше новостей в блоге компании JetBrains
PHP-дайджест в видео формате на канале CutCode
Рассылка PHP-дайджестов
Подпишитесь на рассылку, чтобы не пропустить новый выпуск

Нажимая «Подписаться» я даю согласие на обработку персональных данных.

Мы заботимся о ваших данных и не будем злоупотреблять доверием.