22 677 Монеток
В 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 года.
22 677 Монеток
Работая с тестами, иногда можно столкнуться с неприятной ситуацией: один тест проходит, только если выполняется сразу после другого. И если изменить порядок, этот тест ломается.
Это говорит о том, что тесты зависят друг от друга. А идеальный тест всегда должен быть независимым и начинаться с «чистого листа».
Хороший способ обнаружить такие скрытые зависимости это запускать тесты в случайном порядке. Если тест не проходит, когда порядок перемешан, это значит, что он зависит от других, и с этим нужно что-то сделать.
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"
>
22 677 Монеток
Сегодня была выпущена вторая мажорная версия PHPStan — популярного статического анализатора кода для PHP, который помогает находить ошибки до выполнения, проверяя типы данных и структуру.
Первая версия была выпущена чуть больше трех лет назад, и теперь, с выходом второй мажорной версии, нас ожидают новые возможности и улучшения 🚀
Ранее последним уровнем быть 9-й который проверял только явное использование типа mixed
, но пропускал случаи, когда тип данных не указан вообще. Новый уровень исправляет это, проверяя также неявно типизированные значения.
Для более точной работы с массивами теперь можно указывать новый тип данных — list
. Это массив с целочисленными ключами, начиная с 0, без пропусков. Пример:
/** @param list<int> $listOfIntegers */
public function doFoo(array $listOfIntegers): void
{
}
Свежая версия теперь использует на 50–70% меньше памяти при анализе крупных проектов, что значительно улучшает производительность, особенно в условиях CI.
@var
Улучшили проверку типов, указанных в комментариях @var
. Это помогает избежать ситуаций, когда тип в комментарии не совпадает с фактическим типом переменной в коде.
Пример:
/** @var string|null $a */
$a = doFoo();
// PHPStan сообщит, что тип string|null не совпадает с типом string в реальной переменной.
@phpstan-pure
для чистых функцийДля чистых функций теперь доступна аннотация @phpstan-pure
. Она указывает, что функция должна всегда возвращать одно и то же значение при одинаковых входных данных и не должна иметь побочных эффектов.
В версии 2.0 улучшена работа с кешем — старые элементы теперь удаляются 😊 и, как результат, экономится дисковое пространство!
Заметки о выпуске впечатляют — более 180 изменений! 😲 Так что если вы не фанат Psalm (его конкурента), переходите по ссылке на инструкцию по обновлению для подробностей 😊
{message}