- PVSM.RU - https://www.pvsm.ru -

Подборка свежих новостей и материалов из мира PHP.
Для PHP 8.2 предложили добавить тип null; опубликована уязвимость в PHP с disable_functions, которая на самом деле не уязвимость; новый сайт от сообщества — phpopendocs.com; PHP 8.1 RC 3, Xdebug 3.1 и другие релизы.
Также в выпуске порция инструментов, полезные статьи, видео.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita [2]. Если понравился выпуск, плюсаните пост, пожалуйста.
НовостиОчередной релиз-кандидат доставлен по расписанию [4]. Что нового будет в PHP 8.1 можно посмотреть в постах What's new in PHP 8.1 [5] и PHP 8.1: before and after [6] и на PHP.Watch [7].
Свежий пост от Brent Roose про использование оператора new для дефолтных значений параметров: PHP 8.1: new in initializers [8].
disable_functions
Исследователь опубликовал [9] метод обхода ограничений, заданных при помощи директивы disable_functions в php.ini.
С помощью disable_functions [10] можно запретить использование в PHP-скриптах функции, например, можно запретить system, exec, proc_open и shell_exec для блокирования вызова внешних программ.
// eval(), кстати, не получится запретить [11].
Уязвимостью эту проблему назвать нельзя, потому что disable_functions — это не секьюрити фича и полагаться на нее ради безопасности — плохая идея.
Напишите в комментариях, используете ли вы disable_functions?
Цитата Никиты Попова на Reddit [12]:
Является ли что-то проблемой безопасности, зависит от вашей модели угрозы. Что касается проекта PHP, то наша модель угрозы — это удаленный злоумышленник. Мы считаем секьюрити проблемой случай, когда злоумышленник имеет возможность выполнить произвольный PHP-код на сервере (RCE).
Подробнее о том, что в PHP считается проблемой безопасности, а что нет: wiki.php.net/security [13].
А если интересно разобраться, то вот [14] классный разбор того, как работает disable_functions и как устроены подобные эксплоиты [14]. И даже как можно автоматически искать подобные проблемы [15].
В тему разбор реальной RCE-уязвимости в fiveai/Cachet [16], популярном проекте на Laravel: Code Execution via Laravel Configuration Injection [17].
В обновлении исправлена уязвимость на Windows (CVE-2021-41116 [19]). Пользователям Windows обязательно стоит обновиться.
Экспериментальный сайт для полуофициального контента по PHP.
Из полезного уже есть, страница для спонсорства [21] со списком контрибьюторов сгруппированных по версиям PHP. А также раздел Internals [22] с кучей ссылок про устройство кода PHP и как начать контрибьютить.
Уже известны даты для конференции — 6-7 июня. Начали подготовку и прием заявок на доклады!
PHP Internals
Предлагается добавить возможность использовать null в декларациях типов.
Во-первых, это недостающий кусок для полноты системы типов в PHP — есть mixed, добавили never, объединения и пересечения, не хватает юнит-типа [25].
Во-вторых, такой тип позволит покрыть некоторые граничные случаи и улучшить статический анализ.
Например, в объединениях можно использовать псевдотип false, но нельзя указать, что функция возвращает false|null, только bool|null.
Этот RFC уже на голосовании и, судя по всему, пройдет в PHP 8.2. Подробнее про предложение читайте в PHP-Дайджесте № 211 [27].
Инструменты
Symfony
Laravel
Разделение кода и текста: первая рабочая версия [42]
Ресурсы для API в Laravel [43]
Laravel Worldwide Meetup #10: Немного про AWS Lambda [44], и про фреймворк для тестов Pest [45].
Конвертирование тестов на чистом PHPUnit в Pest [46]
Пишем онлайн-магазин на Laravel [47] — Серия стримов.
Статьи
Что примечательно, KPHP-FFI совместим с FFI из традиционного PHP, то есть игру можно запустить и на обычном PHP 7.4+.
Что-то подобное показывал SerafimArts [52] на своих стримах про PHP + Vulcan [53].
Подробнее про FFI можно почитать тут [54].
Аудио/ВидеоПодписывайтесь на Telegram-канал PHP Digest [56].
Этот дайджест подготовлен совместно с Insolita [2]. Если понравился выпуск дайджеста, плюсаните пост, пожалуйста.
Кстати, Юля опубликовала заметку про выборку дней рождения в Postgres [57].
Заметили ошибку или опечатку? Сообщите в личку хабра [58] или телеграм [59].
Прислать ссылку можно через форму [60] или просто написав мне в телеграм [59].
Поиск ссылок по всем дайджестам [61]
← Предыдущий выпуск: PHP-Дайджест № 212 [62]
Автор: Роман Пронский
Источник [63]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/368673
Ссылки в тексте:
[1] Noriko YAMAMOTO: https://twitter.com/nauleyco
[2] Insolita: https://twitter.com/DonnaInsolita
[3] PHP 8.1.0 RC 3: https://www.php.net/archive/2021.php#2021-09-30-1
[4] расписанию: https://wiki.php.net/todo/php81#timetable
[5] What's new in PHP 8.1: https://stitcher.io/blog/new-in-php-81
[6] PHP 8.1: before and after: https://stitcher.io/blog/php-81-before-and-after
[7] на PHP.Watch: https://php.watch/versions/8.1
[8] PHP 8.1: new in initializers: https://stitcher.io/blog/php-81-new-in-inititalizers
[9] опубликовал: https://github.com/mm0r1/exploits/tree/master/php-filter-bypass
[10] disable_functions: https://www.php.net/manual/en/ini.core.php#ini.disable-functions
[11] не получится запретить: https://tech.geekjob.ru/disable-evil-eval-in-php-8/
[12] на Reddit: https://www.reddit.com/r/PHP/comments/q2cvkb/yet_another_php_7080_disable_functions_bypass/hflmnfc/?context=3
[13] wiki.php.net/security: https://wiki.php.net/security
[14] вот: https://x-c3ll.github.io/posts/UAF-PHP-disable_functions/
[15] автоматически искать подобные проблемы: https://x-c3ll.github.io//posts/find-bypass-disable_functions/
[16] fiveai/Cachet: https://github.com/fiveai/Cachet
[17] Code Execution via Laravel Configuration Injection: https://blog.sonarsource.com/cachet-code-execution-via-laravel-configuration-injection
[18] composer/composer 2.1.9: https://github.com/composer/composer/releases/tag/2.1.9
[19] CVE-2021-41116: https://github.com/composer/composer/security/advisories/GHSA-frqg-7g38-6gcf
[20] PHPOpenDocs.com: https://phpopendocs.com/about
[21] страница для спонсорства: https://phpopendocs.com/sponsoring
[22] Internals: https://phpopendocs.com/internals
[23] PHP Russia 2022: https://phprussia.ru/moscow/2022
[24] [RFC] Allow null as standalone type: https://wiki.php.net/rfc/null-standalone-type
[25] юнит-типа: https://en.wikipedia.org/wiki/Unit_type
[26] [RFC] Deprecate partially supported callables: https://wiki.php.net/rfc/deprecate_partially_supported_callables
[27] в PHP-Дайджесте № 211: https://habr.com/ru/post/577660/#:~:text=%5BRFC%5D%20Deprecate%20partially%20supported%20callables
[28] Xdebug 3.1.0: https://xdebug.org/announcements/2021-10-04
[29] php-runtime/runtime: https://github.com/php-runtime/runtime
[30] rindow/rindow-neuralnetworks: https://github.com/rindow/rindow-neuralnetworks
[31] Python Keras: https://keras.io
[32] документации: https://rindow.github.io/neuralnetworks/index.html#hello-there
[33] nunomaduro/termwind: https://github.com/nunomaduro/termwind
[34] termage/termage: https://github.com/termage/termage
[35] piko-framework/router: https://github.com/piko-framework/router
[36] сжатого префиксного дерева: https://en.wikipedia.org/wiki/Radix_tree
[37] unitpay/shamir: https://github.com/unitpay/shamir
[38] AlexGx: https://habr.com/ru/users/alexgx/
[39] icanhazstring/random-issue-picker: https://github.com/icanhazstring/random-issue-picker
[40] Неделя Symfony #771 (4-10 октября 2021): https://symfony.com/blog/a-week-of-symfony-771-4-10-october-2021
[41] sajya/server: https://github.com/sajya/server
[42] Разделение кода и текста: первая рабочая версия: https://habr.com/ru/post/579904/
[43] Ресурсы для API в Laravel: https://laravel.demiart.ru/laravel-resources/
[44] Немного про AWS Lambda: https://www.youtube.com/watch?v=2UyDBArGLDY&t=161s
[45] фреймворк для тестов Pest: https://www.youtube.com/watch?v=2UyDBArGLDY&t=3211s
[46] Конвертирование тестов на чистом PHPUnit в Pest: https://www.youtube.com/watch?v=81-r9THrJhI
[47] Пишем онлайн-магазин на Laravel: https://www.youtube.com/watch?v=-0C04evVV9A&list=PLKJBt7aeK3k8Ry6aNd4wUOvfXtlnQh5-O&index=1&t=5s
[48] The Road to PHP: Static Analysis: https://road-to-php.com/static
[49] Шпаргалка по встроенным исключениям в PHP: https://www.strangebuzz.com/en/blog/the-php-exceptions-cheatsheet
[50] Процедуральное искусство (generative art) на PHP: https://www.binarymoon.co.uk/2021/09/creating-generative-art-with-php/
[51] quasilyte/kphp-game: https://github.com/quasilyte/kphp-game
[52] SerafimArts: https://habr.com/ru/users/serafimarts/
[53] PHP + Vulcan: https://www.youtube.com/watch?v=v6ueRknSqc0&list=PLDI5V3o4oKBXOpbAijmk1fjz-h7OBZbqj
[54] тут: https://thephp.website/en/issue/php-ffi/
[55] PHP-программист: публичное собеседование [Хекслет]: https://www.youtube.com/watch?v=8jed0wIQv_A
[56] PHP Digest: https://t.me/phpdigest
[57] про выборку дней рождения в Postgres: https://donnainsolita.medium.com/postgres-%D0%B8-%D0%B4%D0%BD%D0%B8-%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F-4c2c760d821e
[58] личку хабра: https://habrahabr.ru/conversations/pronskiy/
[59] телеграм: https://t.me/pronskiy
[60] через форму: https://bit.ly/php-digest-add-link
[61] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[62] Предыдущий выпуск: PHP-Дайджест № 212: https://habr.com/ru/post/580210/
[63] Источник: https://habr.com/ru/post/582776/?utm_source=habrahabr&utm_medium=rss&utm_campaign=582776
Нажмите здесь для печати.