Подборка свежих новостей, инструментов, видео и материалов из мира PHP.
Приятного чтения!
Шумиха вокруг CVE-2024-2961, связанная с PHP, была крайне преувеличена. У многих сложилось впечатление, что уязвимость существует в самом языке и оказывает огромное влияние на PHP-разработчиков. Однако это не так.
Уязвимость может быть удалённо использована только в том случае, если приложение использует функции и потоковые фильтры
модуля iconv с не валидированными кодировками, полученными из внешних источников.
Ваш код должен быть довольно необычным, чтобы подвергнуться такой атаке:
1iconv ('utf-8', $_REQUEST['charset'],' my -text');
Лучше проявить излишнюю осторожность и проверить использование iconv.
Не стоит ожидать выпуска патча от PHP, поскольку glibc является динамически подключаемой библиотекой и не
компилируется вместе с интерпретатором. Обновления glibc будет достаточно.
❗ Это выпуски исправлений безопасности. В них исправлены CVE-2024-1874, CVE-2024-2756 и CVE-2024-3096, в PHP 8.3.6 дополнительно исправлена уязвимость CVE-2024-2757.
❗️Выпуск PHP 8.3.5 был пропущен, пожалуйста, не используйте этот тег.
Если вы не следили за этой историей, то вот вкратце, что произошло. Некто под GitHub-аккаунтом @JiaT75 в течение 2 лет вносил свой вклад в библиетеку `liblzma, создавая SSH-бэкдор незаметно для других сопровождающих. Он сделал более 700 коммитов, из которых лишь небольшое количество было вредоносным и спрятано в тестовых файлах.
Странное поведение было случайно обнаружено при проведении микробенчмаркинга утилиты XZ. Скорее всего, эта атака не является единичным случаем. По крайней мере, OpenJS Foundation уже сообщал о неудачных попытках захвата их проектов.
PHP Foundation будет сотрудничать с фондами Apache Software, Eclipse, Rust и Python Software для создания стандартов для закона Европейского союза о киберустойчивости (CRA).
CRA – это первый в мире закон, регулирующий индустрию программного обеспечения в целом. Он обязывает определенные проекты с открытым исходным кодом следовать политике кибербезопасности, сообщать об инцидентах и уязвимостях, а также сотрудничать с органами надзора за рынком.
Главные новинки этой версии:
Большинство новостей ядра PHP подробно освещаются в серии PHP Core Roundup от PHP Foundation, мы лишь быстро по ним пробежимся:
Хуки стали одним из самых больших и обсуждаемых 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 Валентина Удальцова, о котором мы говорили в конце прошлого года, перешел в стадию обсуждения.
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
Tim Düsterhus предлагает пересмотреть предыдущее решение RFC по именованию классов. Вместо того, чтобы относиться к аббревиатурам как к обычным словам, сделать имена классов согласованными с PascalCase.
BCMath в настоящее время поддерживает только процедурные функции. Saki Takamachi предлагает добавить в модуле поддержку объектов типов.
RFC о котором мы говорили в прошлом выпуске принят.
Сейчас PHP поддерживает два способа распространения идентификатора токена сессии: с помощью файлов cookie и с помощью параметров GET или POST.
В PHP 8.4, если параметр session.use_only_cookies отключён, а параметр session.use_trans_sid – включён, будет
выдаваться предупреждение об устаревании.
В PHP 9.0 распространение идентификатора токена сессии с помощью параметров GET или POST будет удалено.
Поддержка безопасности для версий PHP увеличена на один год. Таким образом, каждая версия PHP будет поддерживаться 4 года: 2 года исправлений ошибок и 2 года исправлений безопасности.
Изменения применяются немедленно ко всем поддерживаемым в настоящее время веткам, а ветка PHP 8.1 получит дополнительный год исправлений безопасности.
По традиции, у 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.
Нажимая «Подписаться» я даю согласие на обработку персональных данных.
Мы заботимся о ваших данных и не будем злоупотреблять доверием.