Подборка свежих новостей и материалов из мира PHP.
Для PHP 8.2 предложили добавить тип null
; опубликована уязвимость в PHP с disable_functions, которая на самом деле не уязвимость; новый сайт от сообщества — phpopendocs.com; PHP 8.1 RC 3, Xdebug 3.1 и другие релизы.
Также в выпуске порция инструментов, полезные статьи, видео.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.
Новости
-
PHP 8.1.0 RC 3
Очередной релиз-кандидат доставлен по расписанию. Что нового будет в PHP 8.1 можно посмотреть в постах What's new in PHP 8.1 и PHP 8.1: before and after и на PHP.Watch.
Свежий пост от Brent Roose про использование оператора
new
для дефолтных значений параметров: PHP 8.1: new in initializers. -
«Уязвимость» в PHP для обхода
disable_functions
Исследователь опубликовал метод обхода ограничений, заданных при помощи директивы
disable_functions
вphp.ini
.С помощью
disable_functions
можно запретить использование в PHP-скриптах функции, например, можно запретитьsystem
,exec
,proc_open
иshell_exec
для блокирования вызова внешних программ.
//eval()
, кстати, не получится запретить.Уязвимостью эту проблему назвать нельзя, потому что
disable_functions
— это не секьюрити фича и полагаться на нее ради безопасности — плохая идея.Напишите в комментариях, используете ли вы
disable_functions
?Цитата Никиты Попова на Reddit:
Является ли что-то проблемой безопасности, зависит от вашей модели угрозы. Что касается проекта PHP, то наша модель угрозы — это удаленный злоумышленник. Мы считаем секьюрити проблемой случай, когда злоумышленник имеет возможность выполнить произвольный PHP-код на сервере (RCE).
Подробнее о том, что в PHP считается проблемой безопасности, а что нет: wiki.php.net/security.
А если интересно разобраться, то вот классный разбор того, как работает
disable_functions
и как устроены подобные эксплоиты. И даже как можно автоматически искать подобные проблемы.В тему разбор реальной RCE-уязвимости в fiveai/Cachet, популярном проекте на Laravel: Code Execution via Laravel Configuration Injection.
-
composer/composer 2.1.9
В обновлении исправлена уязвимость на Windows (CVE-2021-41116). Пользователям Windows обязательно стоит обновиться.
-
PHPOpenDocs.com
Экспериментальный сайт для полуофициального контента по PHP.
Из полезного уже есть, страница для спонсорства со списком контрибьюторов сгруппированных по версиям PHP. А также раздел Internals с кучей ссылок про устройство кода PHP и как начать контрибьютить.
-
PHP Russia 2022
Уже известны даты для конференции — 6-7 июня. Начали подготовку и прием заявок на доклады!
PHP Internals
-
[RFC] Allow null as standalone type
Предлагается добавить возможность использовать
null
в декларациях типов.Во-первых, это недостающий кусок для полноты системы типов в PHP — есть
mixed
, добавилиnever
, объединения и пересечения, не хватает юнит-типа.Во-вторых, такой тип позволит покрыть некоторые граничные случаи и улучшить статический анализ.
Например, в объединениях можно использовать псевдотип
false
, но нельзя указать, что функция возвращаетfalse|null
, толькоbool|null
. -
[RFC] Deprecate partially supported callables
Этот RFC уже на голосовании и, судя по всему, пройдет в PHP 8.2. Подробнее про предложение читайте в PHP-Дайджесте № 211.
Инструменты
- Xdebug 3.1.0 — Обновился популярный отладчик для PHP. Добавлена поддержка PHP 8.1, много фиксов и несколько узкоспецифических фич.
- php-runtime/runtime — Компонент Runtime отделяет логику загрузки приложения от глобального состояния, и таким образом позволяет запускать приложение в любых окружениях без изменений, например, на PHP-FPM, ReactPHP, Swoole и т.д.
Изначально это был компонент для Symfony, но получился настолько хорош, что авторы выделили его в отдельную организацию на Гитхабе. - rindow/rindow-neuralnetworks — Фреймворк для обучения нейронных сетей по мотивам Python Keras. Согласно документации поддержка GPU пока доступна в экспериментальном режиме и только под Windows.
- nunomaduro/termwind — Библиотека для форматирования вывода консольных программ с синтаксисом в стиле Tailwind CSS. PHP 8+
- termage/termage — Еще одна похожая библиотека для форматирования вывода в консоль.
- piko-framework/router — PHP-разработчики никогда не писали роутеры /s и вот один на базе сжатого префиксного дерева. Если верить бенчмаркам, то быстрее роутера Symfony.
- unitpay/shamir — Реализация схемы разделения секрета Шамира (Shamir's Secret Sharing). Прислал AlexGx.
- icanhazstring/random-issue-picker — Если хотите поучаствовать в Hacktoberfest, но не знаете с чего начать, то вот инструмент, который выберет случайную issue на гитхабе или гитлабе.
Symfony
Laravel
- sajya/server — JSON-RPC 2.0 API сервер для Laravel.
- Разделение кода и текста: первая рабочая версия
- Ресурсы для API в Laravel
- Laravel Worldwide Meetup #10: Немного про AWS Lambda, и про фреймворк для тестов Pest.
- Конвертирование тестов на чистом PHPUnit в Pest
- Пишем онлайн-магазин на Laravel — Серия стримов.
Статьи
- The Road to PHP: Static Analysis — Рассылка в 10 дней от Brent Roose про статический анализ.
- Шпаргалка по встроенным исключениям в PHP.
- Процедуральное искусство (generative art) на PHP — Автор рассказывает, как можно генерировать картинки от простых аватарок до пиксельных городов:
- Игра на FFI: quasilyte/kphp-game
Ребятки из KPHP реализовали экспериментальную поддержку FFI, а в качестве демо возможностей сделали на нем небольшую игру.Что примечательно, KPHP-FFI совместим с FFI из традиционного PHP, то есть игру можно запустить и на обычном PHP 7.4+.
Что-то подобное показывал SerafimArts на своих стримах про PHP + Vulcan.
Подробнее про FFI можно почитать тут.
Аудио/Видео
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск дайджеста, плюсаните пост, пожалуйста.
Кстати, Юля опубликовала заметку про выборку дней рождения в Postgres.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 212
Автор: Роман Пронский