veilletech.fr
2 nov.

Source · 73 jours de veille

Laravel News

Ce qui a été retenu de cette source, et sur quels thèmes. Chaque fiche est une synthèse originale et renvoie à l'article d'origine.

35fiches
28jours sur 73
76min de lecture
Sécurité · PHP & CMS · Données · Outils & méthodethèmes

Laravel 13.39 : purge des sessions planifiée

Laravel 13.39.0 ajoute la commande session:garbage-collect, qui permet de planifier la purge des sessions expirées au lieu de la confier à une requête tirée au sort. La même version rend atomique l'écriture des caches de configuration, de routes et d'événements : une requête concurrente pouvait lire un fichier vide, que OPcache gardait ensuite en mémoire.

29 oct.2 min

LARAVEL

NativePHP Mobile : sept avis, passez en 4.6.1

NativePHP publie ses sept premiers avis de sécurité pour NativePHP Mobile, dont cinq élevés (CVSS 7,4 à 8,1), corrigés dans nativephp/mobile 4.6.1 et 3.3.11 et dans mobile-file 1.0.3. Les routes internes /_native/api/* n'avaient pas de middleware. Les applications embarquent leur propre PHP : un simple composer update ne protège personne, il faut reconstruire et republier l'application.

27 oct.3 min

PHP

Laravel 13.38 : lire sa propre écriture sur réplica

Laravel 13.38.0 ajoute le middleware PreventStaleDatabaseReads, qui envoie vers la connexion d'écriture les lectures d'un utilisateur pendant deux secondes après son écriture, et DB::usingWritePdo() pour forcer les lectures d'un callback sur le primaire. Le retard des réplicas ne fait plus afficher l'ancienne valeur à celui qui vient d'enregistrer.

22 oct.2 min

LARAVEL

Laravel : le guard token laisse usurper un compte

Un avis critique (GHSA-f9x3-7vq9-cph6, CVSS 9,2) concerne le guard d'API de Laravel de driver token : sur MySQL et MariaDB, une valeur qui n'est pas une chaîne permettait de se connecter comme un autre utilisateur. Le correctif, un test is_string dans TokenGuard, figure dans les versions 12.68.0 et 13.29.0, publiées le 25 août. Les applications à jour depuis sont protégées ; les autres vérifient config/auth.php.

21 oct.2 min

LARAVEL

Laravel : DB::olap() contourne les 100 000 lignes

Laravel 13.36 ajoute DB::olap(), qui passe une connexion MySQL en mode OLAP de Vitess le temps d'un callback pour dépasser les limites de PlanetScale (100 000 lignes et 64 Mio par requête). Elle règle le mode sur les connexions en écriture et en lecture, revient en OLTP ensuite et ne fait rien hors Vitess. Piège : une LazyCollection (cursor, lazy, lazyById) exécute sa requête plus tard, déjà en OLTP.

20 oct.2 min

LARAVEL

Laravel 13.36 : Mercure passe en synchrone par défaut

Laravel 13.36.0 diffuse les événements Mercure de façon synchrone par défaut (MERCURE_ASYNC=true pour revenir à la file) et corrige l'échappement des barres obliques inverses dans les liens des mails Markdown. Elle ajoute aussi des builders Rule:: pour les règles de validation restantes, DB::olap() pour PlanetScale/Vitess et une réinitialisation opt-in des connexions sticky entre jobs.

15 oct.2 min

LARAVEL

Inertia 3.9 : plus de page protégée au bouton retour

Inertia 3.9 corrige un cas où le bouton retour réaffichait une page protégée après la déconnexion, le cache de préchargement n'étant pas vidé avec l'historique. Elle ajoute aussi l'option background (throttle, pause, continue) au polling et une propriété type à l'événement navigate.

14 oct.2 min

LARAVEL

BashBox : un Bash en PHP pur pour vos agents

BashBox, de Pushpak Chhajed, est un interpréteur Bash écrit en PHP pur : il exécute les scripts d'un agent sans appeler proc_open, exec ni shell_exec, sur un système de fichiers virtuel. Il compte 58 commandes et 18 limites configurables, réseau coupé par défaut. C'est la version 0.0.3, sous licence MIT, pour PHP 8.4 et plus.

13 oct.3 min

PHP

Laravel 13.35 : alwaysOnOneServer pour le scheduler

Laravel 13.35 ajoute Schedule::alwaysOnOneServer(), qui exécute chaque tâche planifiée une seule fois quand schedule:run tourne sur plusieurs serveurs, et Schedule::hasBeenInterruptedSince(), qui laisse une commande longue s'arrêter proprement lors d'un déploiement. Deux pièges : les closures sans name() sont ignorées en silence, et le cache doit être partagé entre serveurs.

10 oct.2 min

LARAVEL

Plumb note 170 000 paquets PHP, Filament l'affiche

L'annuaire des plugins Filament, qui dépasse 1 000 plugins communautaires, affiche désormais la note Plumb de chaque plugin. Plumb analyse les paquets PHP selon 15 contrôles répartis en trois familles (sécurité, maintenance, écosystème), suit près de 170 000 paquets Packagist, et détaille pour chaque contrôle échoué comment le corriger.

6 oct.2 min

PHP

Inertia 3.8 : vos ID 64 bits ne sont plus arrondis

Inertia.js 3.8 transmet les entiers au-delà de Number.MAX_SAFE_INTEGER sans les arrondir : avec inertia-laravel 3.5.0 et l'option preserve_big_integers, ils arrivent côté client en BigInt. La version ajoute WhenMounted pour le code navigateur sous SSR, transmet enfin les callbacks d'erreur du composant Form, et ne restaure plus une page d'avant déploiement.

3 oct.2 min

LARAVEL

Laravel 14 : les valeurs par défaut lisent la config

Laravel 14 ajoute à Eloquent une méthode defaults() qui renvoie les valeurs par défaut des attributs depuis du code : config(), now() ou un feature flag deviennent utilisables, ce que la propriété $attributes interdit. Elle tourne à chaque construction de modèle, renvoie des valeurs brutes, et sera appelée sur toute méthode defaults() déjà présente dans vos modèles.

2 oct.2 min

LARAVEL

Laravel AI SDK : un fichier joint sonde votre réseau

Deux avis de sécurité Laravel : le Laravel AI SDK 1.0.0 allait chercher sans contrôle l'adresse d'un fichier joint fournie par le client de chat (SSRF, GHSA-6qhr-3g93-pxhw), et Laravel MCP validait mal l'adresse de redirection OAuth (GHSA-mx2h-h55v-pm44). Corrigés en 1.0.1 et 0.9.6, sans CVE attribuée : un scanner qui ne lit que les CVE ne les signale pas.

1 oct.2 min

SÉCURITÉ

Laravel 13.34 : un worker qui plante compte enfin

Laravel 13.34 permet de compter un worker tué en plein travail (mémoire, segfault, conteneur arrêté) comme une exception, ce qui arrête enfin les tâches en retryUntil qui abattent des workers en boucle. Les tâches Interruptible sont aussi prévenues par SIGALRM avant leur délai, et l'événement JobProcessed porte la durée de la tâche.

1 oct.2 min

LARAVEL

Laravel 13.33 : les colonnes calculées enfin à jour

Laravel 13.33 ajoute l'attribut #[Refreshes] : Eloquent relit les colonnes calculées par la base (storedAs, virtualAs, triggers, valeurs par défaut) après chaque insertion ou mise à jour, avant les événements du modèle. Plus besoin d'appeler refresh(), qui recharge toute la ligne et les relations.

25 sept.2 min

LARAVEL

Difflock juge vos migrations sur la vraie base

Difflock 1.0 analyse les migrations Laravel sans les exécuter et les compare au schéma réel et au volume des tables, pour signaler ce qu'une base de test vide ne montre pas. Il enregistre aussi un instantané du schéma pour détecter les dérives, s'intègre à la CI par codes de sortie et expose un serveur MCP pour les agents.

22 sept.2 min

LARAVEL

Laravel Scalpel cherche les traces d'intrusion

Laravel Scalpel, de Harry Agustiana, scanne le système de fichiers d'une application Laravel déployée pour y trouver des traces d'intrusion : fichiers PHP là où il ne devrait pas y en avoir, code obfusqué, directives serveur modifiées, écarts avec un instantané de référence. Une question différente de celle des analyseurs de code habituels.

18 sept.3 min

LARAVEL

Laravel 13.32 : du temps réel sans WebSocket

Laravel 13.32 ajoute un driver de broadcasting Mercure, qui pousse les messages en Server-Sent Events sur du HTTP ordinaire plutôt qu'en WebSocket. Couplé à FrankenPHP, dont le hub Mercure est intégré, le driver fonctionne sans URL ni secret à configurer : le temps réel cesse d'être un service séparé à déployer.

17 sept.2 min

LARAVEL

PHP 8.6 : application partielle et clamp

PHP 8.6 est en bêta, avec gel des fonctionnalités le 22 septembre 2026 et sortie le 19 novembre. Au programme : l'application partielle de fonctions (RFC v2 adoptée 33 voix contre 0 après un refus en 2021), une fonction clamp(), une classe Time\Duration à la nanoseconde, les propriétés readonly avec valeur par défaut et des DocComments par paramètre. Trois réglages de session passent à des valeurs sûres pour les nouvelles installations.

16 sept.3 min

PHP

Laravel MCP 1.0 : serveurs sans état et PKCE

Laravel MCP 1.0 est la première version stable du paquet officiel pour exposer des serveurs Model Context Protocol depuis une application Laravel. Elle apporte la révision de protocole 2026-07-28 : serveurs sans état, catalogues d'outils cherchables, indications de cache et OAuth avec PKCE obligatoire. La migration depuis 0.9 impose de nouveaux en-têtes sur chaque requête POST, y compris dans les tests.

16 sept.3 min

LARAVEL

Laravel Vet relit Composer avant l'installation

Laravel Vet est un greffon Composer officiel qui affiche le code que composer update s'apprête à écrire dans vendor/, paquet par paquet, et enregistre les paquets approuvés dans un fichier vet.json à committer. Il peut déléguer la lecture à l'agent de code installé localement, qui rend un verdict PASS, FAIL, WARN ou SKIP. Un paquet non approuvé fait sortir la commande en erreur, ce qui casse le build tant que personne n'a regardé.

16 sept.2 min

COMPOSER

Vacuum surveille Postgres depuis Laravel

Vacuum est un paquet Laravel de Rati Rukhadze qui lit les vues de statistiques que PostgreSQL tient déjà (pg_stat_user_tables, pg_stat_activity, pg_stat_statements) et affiche les problèmes détectés avec la requête SQL qui les corrige. Treize règles couvrent le wraparound, le bloat, les tuples morts, les index inutilisés et les requêtes lentes, avec une note sur 100. Deux commandes s'intègrent en CI : vacuum:check fait échouer un build sur constat critique, vacuum:lint signale les clés étrangères non indexées dans les migrations.

15 sept.2 min

POSTGRES

Laravel 13.31 compte toute une file d'un coup

Laravel 13.31.0, sortie le 8 septembre, ajoute Queue::totalSize() pour compter tous les jobs d'une connexion en un appel, un événement JobInterrupted émis quand le worker stoppe un job interruptible, et le support de chaperone() sur les modèles pivots d'une relation BelongsToMany. Côté tests, quatre nouvelles assertions « once » remplacent la vérification de compteurs pour les mails et les notifications.

10 sept.2 min

LARAVEL

Pest génère les entrées de test qu'on oublie

Le paquet Fuzz de Jon Purvis apporte le fuzzing guidé par la couverture dans Pest 5, en s'appuyant sur PHP-Fuzzer de nikic : il déforme des chaînes de départ, observe les chemins parcourus dans le code et conserve celles qui atteignent une branche neuve. Sur l'exemple d'un parseur de limite de débit, il trouve l'entrée « 5/ » qui provoque une DivisionByZeroError. Aucune extension de couverture n'est nécessaire, mais la fonction cible doit être définie hors du test, sans quoi rien n'est instrumenté.

9 sept.3 min

PHP

Des règles métier qui changent avec la date

Laravel Rulebook, de Mathias Onea, modélise les règles métier qui changent dans le temps : chaque règle est une classe PHP qui déclare sa fenêtre de validité (always, from, until, between), et la résolution rend un gagnant unique désigné par priorité, accompagné de la raison de chaque règle — gagnante, perdante ou hors fenêtre. Un snapshot fige la décision en JSON, ce qui permet de justifier après coup un calcul fait sous une politique révolue.

8 sept.2 min

LARAVEL

Laravel ferme ses issues GitHub

Taylor Otwell a désactivé les GitHub Issues sur la plupart des paquets open source de Laravel — les paquets seulement, pas le dépôt principal du framework. La consigne : décrire le bug à un agent de code et ouvrir une pull request, même imparfaite, parce qu'elle documente le problème tout en offrant un point de départ. Symfony expérimente au même moment la démarche exactement inverse, en n'acceptant que des issues.

5 sept.1 min

LARAVEL

Laravel confine Storage::path au disque

Laravel 13.30 confine Storage::path() à la racine du disque : un chemin contenant des segments « .. » lève désormais PathTraversalDetected au lieu de retourner un chemin hors du disque. La version ajoute aussi Collection::chunkBy() et fait dire à queue:work la raison de son arrêt.

3 sept.2 min

LARAVEL

Réécrire du Blade sans expression régulière

Forte parse les templates Blade en un AST interrogeable en XPath et permet de les réécrire par structure plutôt que par expression régulière. Le paquet fortephp/forte (MIT, v1.1.0) vise les codemods reproductibles sur de grandes bases de vues.

3 sept.2 min

PHP

Laravel : les starter kits passent à Vite+

Tous les starter kits Laravel construisent désormais avec Vite+, la chaîne unifiée pilotée par la commande vp. ESLint et Prettier sortent du socle front : quatre scripts npm deviennent vp check, les fichiers de configuration disparaissent et les règles migrent dans vite.config.ts sous les clés lint et fmt.

29 août2 min

LARAVEL

Eloquent : refreshForUpdate pose enfin le verrou

Laravel 13.27 ajoute refreshForUpdate() à Eloquent : la méthode recharge un modèle par sa clé primaire avec un FOR UPDATE et met l'instance à jour sur place. Elle passe par le PDO d'écriture, ce qui évite qu'un réplica de lecture serve la valeur sur laquelle repose le verrou.

29 août1 min

LARAVEL

TypePHP compile le PHP en binaire natif

Swoole publie TypePHP, un compilateur AOT qui traduit le PHP en C++ puis en binaire natif, en extension PHP ou en bibliothèque partagée. Les bancs d'essai du projet annoncent des gains de 6,5× à 10×, mais aucune compatibilité directe avec du code existant n'est revendiquée.

27 août1 min

PHP

Laravel 13.27 : vos données fuitent dans les logs

Laravel 13.27 ajoute une option par connexion qui masque les valeurs liées dans les messages de QueryException — jusqu'ici, une requête en échec écrivait les données insérées en clair dans les logs et dans failed_jobs. La version apporte aussi whereBinary() pour des comparaisons sensibles à la casse.

27 août2 min

LARAVEL

Laravel : 40 événements, un seul traitement

Laravel 13.26 étend l'attribut #[DebounceFor] aux listeners d'événements mis en file. Une rafale d'événements identiques se replie sur un seul appel du handler, avec l'état le plus récent, et debounceId permet une fenêtre par ressource. maxWait évite qu'un flux continu ne repousse le traitement indéfiniment.

22 août3 min

LARAVEL

Laravel AI 0.11 : voir ce que fait l'agent

Laravel AI 0.11 donne à chaque run d'agent un identifiant de corrélation unique qui survit aux bascules de fournisseur, et des événements de cycle de vie autour de chaque aller-retour et de chaque appel d'outil. Le wrapper ToolSearch permet en plus de ne plus envoyer tout le catalogue d'outils à chaque requête.

22 août4 min

LARAVEL

Laravel : migrer son stockage sans coupure

Laravel 13.26 introduit un driver de filesystem read-through qui compose un disque principal et un disque de repli. À la première lecture, le fichier absent du disque principal est servi depuis l'ancien puis recopié. Les fichiers réellement consultés migrent d'eux-mêmes, les fichiers morts restent où ils sont.

19 août2 min

LARAVEL