Подписывайтесь на наш Telegram канал и будьте в курсе всех событий.
Москва, Кампус Сколково

Уязвимость Environment Manipulation via Query String

В Laravel была устранена уязвимость (CVE-2024–52301) с уровнем опасности 8.7. Позволяющая изменить среду выполнения приложения (например, переключиться с production на development) через строку запроса URL. Это было возможно при включённой директиве PHP register_argc_argv. Используя специально сформированный URL, злоумышленник мог изменять настройки среды приложения и получить доступ к конфиденциальным данным, доступным только в режиме отладки.

Пример эксплуатации

Допустим, Laravel обрабатывает URL с параметром argv, например:

http://example.com/?argv[]=--env&argv[]=development

Такой запрос мог бы заставить приложение работать в среде development, если оно использует argv для определения текущей среды.

Версии, подверженные уязвимости

Версия Laravel Уязвимые версии
< 6.x До 6.20.45
7.x От 7.0.0 до 7.30.7
8.x От 8.0.0 до 8.83.28
9.x От 9.0.0 до 9.52.17
10.x От 10.0.0 до 10.48.23
11.x От 11.0.0 до 11.31.0

Решение

В новых версиях Laravel аргументы argv больше не учитываются для выбора среды выполнения при работе через веб-сервер (Только через консоль). По этому рекомендуется обновиться или отключить директиву register_argc_argv.

Предыдущая уязвимость в Laravel была найдена 7 декабря 2021 года.

0

Запускаем тесты PHPUnit в случайном порядке

Работая с тестами, иногда можно столкнуться с неприятной ситуацией: один тест проходит, только если выполняется сразу после другого. И если изменить порядок, этот тест ломается.

Это говорит о том, что тесты зависят друг от друга. А идеальный тест всегда должен быть независимым и начинаться с «чистого листа».

Хороший способ обнаружить такие скрытые зависимости это запускать тесты в случайном порядке. Если тест не проходит, когда порядок перемешан, это значит, что он зависит от других, и с этим нужно что-то сделать.

PHPUnit и Laravel поддерживают специальный флаг для случайного порядка --order-by=random

# Для Laravel
php artisan test --order-by=random

# Для Laravel Dusk
php artisan dusk --order-by=random

# Для PHPUnit
vendor/bin/phpunit --order-by=random

Попробуйте запустить свои тесты в случайном порядке и посмотрите, есть ли у вас зависимые тесты. 😉

Еще лучше добавьте атрибут executionOrder в конфигурационный файл, что бы запуск тестов в случайном порядке был по умолчанию 🚀.

<?xml version="1.0" encoding="UTF-8"?>
<phpunit 
    executionOrder="random"
>
1

PHPStan 2.0

Сегодня была выпущена вторая мажорная версия PHPStan — популярного статического анализатора кода для PHP, который помогает находить ошибки до выполнения, проверяя типы данных и структуру.

Первая версия была выпущена чуть больше трех лет назад, и теперь, с выходом второй мажорной версии, нас ожидают новые возможности и улучшения 🚀

Уровень 10

Ранее последним уровнем быть 9-й который проверял только явное использование типа mixed, но пропускал случаи, когда тип данных не указан вообще. Новый уровень исправляет это, проверяя также неявно типизированные значения.

Новый тип "list"

Для более точной работы с массивами теперь можно указывать новый тип данных — list. Это массив с целочисленными ключами, начиная с 0, без пропусков. Пример:

/** @param list<int> $listOfIntegers */
public function doFoo(array $listOfIntegers): void
{
}

Эффективное использования памяти и улучшенная скорость

Свежая версия теперь использует на 50–70% меньше памяти при анализе крупных проектов, что значительно улучшает производительность, особенно в условиях CI.

Проверка PHPDoc тегов @var

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

Пример:

/** @var string|null $a */
$a = doFoo();

// PHPStan сообщит, что тип string|null не совпадает с типом string в реальной переменной.

Аннотация @phpstan-pure для чистых функций

Для чистых функций теперь доступна аннотация @phpstan-pure. Она указывает, что функция должна всегда возвращать одно и то же значение при одинаковых входных данных и не должна иметь побочных эффектов.

Оптимизация кеширования

В версии 2.0 улучшена работа с кешем — старые элементы теперь удаляются 😊 и, как результат, экономится дисковое пространство!


Заметки о выпуске впечатляют — более 180 изменений! 😲 Так что если вы не фанат Psalm (его конкурента), переходите по ссылке на инструкцию по обновлению для подробностей 😊

0