Опубликованы корректирующие выпуски языка программирования PHP 7.1.3 и 7.0.17, в которых внесено 24 изменения. В том числе устранены проблемы с производительностью при обработке больших POST-запросов, крахи при вложенном вызове генераторов или выполнении тестового набора Symfony, чтение из области вне границ буфера в zend_mm_alloc_small, нарушение работы аккаунтинга в php-fpm при использовании keepalive, некорректное вычисление хэша gost-crypto для данных с длинными последовательностями 0xFF, повреждение данных при вызове fetch_array в Mysqlnd, крах в Opcache, утечка памяти при вызове openssl_encrypt().
После года разработки проект Peachpie, в рамках которого развивается открытый компилятор из PHP в .NET, достиг возможности компиляции системы управления web-контентом WordPress. Код компилятора написан на языке C# и распространяется под лицензией Apache 2.0. Проектом также разработан специальный runtime, полностью совместимый с runtime PHP 7.1, что позволяет запускать немодифиицированный WordPress поверх платформы .NET Core, без применения PHP. Среди причин создания компилятора PHP для платформы .NET называются: Желание получить более высокую производительность - скомпилированный код работает быстрее и может быть дополнительно оптмизирован при помощи .NET Jitter; Возможность взаимодействия PHP-приложений с плагинами, написанными на C#, и библиотеками .NET; Поддержка кросс-компиляции PHP-кода в форму библиотек классов, которых можно использовать в проектах на C#; Поддержка создания бинарных сборок, поставляемых в виде двоичных файлов без исходных текстов; Возможность выполнения проекта в системах
Разработчики PHP проголосовали за интеграцию в основной состав будущей ветки PHP 7.2 криптографической библиотеки Libsodium. По сравнению с OpenSSL, Libsodium предоставляют существенно более простой API, совместимый с библиотекой NaCl, а также применяет по умолчанию безопасные методы шифрования и хэширования. Релиз PHP 7.2 ожидается в конце 2017 года. Функции Libsodium будут доступны разработчикам на языке PHP с префиксом "sodium_*", в отличие от ранее применяемого в расширении pecl/libsodium префикса "Sodium*". Разработчики получат возможность использования современных криптографических средств без необходимости установки дополнений, что позволит реализовать в web-приложениях более надёжные криптографические методы, даже в условиях использования хостинга, не допускающего установки своих дополнений. В том числе в базовой поставке будут доступны цифровые подписи Ed25519, хэширование паролей при помощи Scrypt и Argon2i, обмен ключами ECDH+Curve25519, шифрование ChaCha20-Poly1305 и AES-256-GCM.
В библиотеке PHPMailer выявлена ещё одна критическая уязвимость (CVE-2016-10045), позволяющая выполнить свой код на сервере. Проблема устранена в выпуске PHPMailer 5.2.20. Уязвимость позволяет обойти метод защиты, реализованный для блокирования прошлой уязвимости, и касается не столько самого PHPMailer, сколько внутренних проблем с функцией mail() и средствами экранирования символов в PHP. Напомним, что уязвимость в PHPMailer позволяла через передачу специально оформленного адреса отправителя, корректного и полностью соответствующего RFC 3696, организовать передачу дополнительных аргументов утилите /usb/sbin/sendmail, запускаемой по умолчанию при вызове PHP-функции mail(). Для атаки используется опция "-X", позволяющая записать тело сообщения в переданный в качестве аргумента файл (игнорируется в реализациях утилиты sendmail от проектов Postfix и Exim). Так как формально атака осуществляется через корректный email-адрес, проходящий проверку на предмет соответствия требованиям RFC 3696, при выпуске первого
Официально представлен релиз языка программирования PHP 7.1. Новая ветка отличающейся значительной порцией новых возможностей и наличием изменений, нарушающих совместимость. Ключевые улучшения в PHP 7.1: Возможность использования типов, которые могут принимать значение null. Для пометки таких типов применяется знак вопроса, например, определив функцию "function f(?callable $p) {}" её можно вызвать с аргументом, имеющим значение null; Добавлен тип возвращаемого значения void, указывающий на то, что функция не вернула значение; Добавлен псевдо-тип iterable, позволяющий определять параметры функций, которые могут принимать значения различных перечисляемых типов, допустимых для перебора в цикле, таких как массивы и объекты Traversable; При указании смещения внутри строки теперь можно указывать отрицательные значения, позиция в строке для которых будет рассчитана относительно конца строки. Например, для строки 'abcdef' $str[-2] вернёт "e"; Добавлен вариант конструкции list(), в которой могут задаваться
Опубликованы корректирующие выпуски языка программирования PHP 7.0.11 и 5.6.27, в которых внесено 52 изменения, в том числе устранено несколько уязвимостей. Из связанных с безопасностью исправлений выделяются переполнения буферов в функциях virtual_popen(), password_verify() и number_format(), обращений к уже освобождённым блокам памяти в функции unserialize(), некорректная работа crypt при указании слишком длинной соли, устранение серии уязвимостей в библиотеках GD, PCRE и OpenSSL. Возможно исправлены и другие проблемы с безопасностью, так как уязвимости явно не отделяются от ошибок и не выделены в публикуемом на сайте PHP списке изменений. Из связанных с PHP материалов также можно отметить отчёт о переходе на PHP 7 сайта Dailymotion (третий по посещаемости видеохостинг, после YouTube и Vimeo). Отмечается, что в прошлом году Dailymotion экспериментировал с переходом на HHVM, использование которого позволило в два раза снизить время отклика и сократить потребление памяти. Но переход на HHVM был отклонён
Опубликованы корректирующие выпуски языка программирования PHP 7.0.9 и 5.5.38, в которых внесено 34 изменения, в том числе устранено несколько уязвимостей. В частности, устранена уязвимость Httpoxy, позволяющая организовать MITM-атаку через манипуляции с http-заголовком "Proxy". Кроме того, устранены переполнения буфера в функции virtual_file_ex и расширениях curl, XMLRPC, Session, Zips и mcrypt, разыменования нулевого указателя в расширении Exif, серия уязвимостей в библиотеке GD и обращение к памяти после её освобождения в SNMP и MBString. В то же время опубликован первый бета-выпуск новой ветки PHP 7.1. По сравнению с прошлым альфа-выпуском в бета-версии добавлена возможность асинхронной обработки сигналов в ext/pcntl и поддержка дополнительного контекста в обработчике pcntl_signal.
Доступна для тестирования первая альфа-версия новой значительной ветки языка программирования PHP 7.1. Релиз ожидается в ноябре. Ключевые улучшения: Добавлен тип возвращаемого значения void, указывающий на то, что функция не вернула значение; При указании смещения внутри строки теперь можно указывать отрицательные значения, позиция в строке для которых будет рассчитана относительно конца строки. Например, для строки 'abcdef' $str[-2] вернёт "e"; Добавлен вариант конструкции list(), в которой могут задаваться ключи (например: "list(1 => $oneBit, 2 => $twoBit, 3 => $threeBit) = $powersOfTwo"); Добавлено выражение "[] =", которое выступает альтернативой конструкции "list() =". Например, вместо "list($a, $b, $c) = array(1, 2, 3)" теперь можно указать "[$a, $b, $c] = [1, 2, 3]"; Реализована система вывода ошибок и предупреждений в случае использования в математических выражениях строк, не преобразуемых в число. Например, "10 apples" + "5 pears" приведёт к выводу ошибки "Notice: A non well formed
Опубликованы корректирующие выпуски языка программирования PHP 7.0.7, 5.6.22 и 5.5.36, в которых внесено 30 изменений, в том числе устранено несколько уязвимостей: Обращение к уже освобождённому блоку памяти (use-after-free) в функции error_reporting. Не исключается возможность эксплуатации, которая может привести к выполнению кода атакующего; Целочисленное переполнение в функции php_html_entities (CVE-2016-5094); Целочисленное антипереполнение (Integer underflow) в fread/gzread (CVE-2016-5096); Обращение к уже освобождённому блоку памяти в функции dba_open (расширение DBA); Чтение из области вне границ буфера в функции imagescale из состава расширения GD (CVE-2013-7456); Чтение из области вне границ буфера в функции get_icu_value_internal из состава расширения Intl (CVE-2016-5093); Разыменование нулевого указателя в функции mb_ereg_replace; Возможно исправлены и некоторые другие проблемы с безопасностью, так как не все уязвимости явно отмечены в публикуемом списке изменений.
Опубликованы корректирующие выпуски языка программирования PHP 7.0.6, 5.6.21 и 5.5.35, в которых внесено 55 изменений, в том числе устранено несколько уязвимостей: Переполнения кучи в функциях php_raw_url_encode и php_url_encode; CVE-2016-3078 - целочисленное переполнение в расширении Zip, позволяющее выйти за границы буфера при использовании вызовов ZipArchive::getFrom*; CVE-2016-3074 - уязвимость в libgd, приводящая к переполнению кучи при обработке сжатых данных в формате gd2; Крах при обработке некорректных данных в функции gethostbyname; Крах в реализации DateInterval::format; Обращение к данным за границей буфера при обработке заголовков EXIF; Проблемы с парсингом некорректных данных XML. Дополнительно можно отметить публикацию результатов проверки кодовой базы PHP7 с использованием статического анализатора PVS-Studio. Разобрано десять наиболее явных ошибок, связанных с обращением к переменным вне области видимости, неверным построением логических выражений, применение знаковых операций