Pest Security Preset : sécurisez votre code Laravel automatiquement

laravel
php
securite
testing
tutorial
Author

Sylvain Pham

Published

December 30, 2025

Pest permet d’analyser statiquement votre code pour bloquer les fonctions dangereuses. Une ligne suffit.

Activation

// tests/Architecture/SecurityTest.php
<?php

arch()->preset()->security();

Ce que ça bloque

Le preset interdit ces fonctions et fait échouer vos tests si elles sont utilisées :

Catégorie Bloqué Alternative Laravel
Hashage faible md5(), sha1() Hash::make()
Aléatoire faible rand(), mt_rand(), uniqid() Str::uuid(), random_int()
Exécution de code eval(), exec(), shell_exec() Process de Symfony
Désérialisation unserialize(), extract() json_decode()

Exemple concret

// ❌ Échoue
$filename = uniqid() . '_' . md5($file->getClientOriginalName());

// ✅ Passe
$filename = Str::ulid() . '_' . hash('sha256', $file->getClientOriginalName());

Bonus : Strict Equality

Bloquez les comparaisons loose (==) qui causent des bugs de type juggling :

arch()->expect('App')->toUseStrictEquality();
// ❌ Échoue
if ($token == $request->token)

// ✅ Passe
if ($token === $request->token)

Configuration recommandée

// tests/Architecture/SecurityTest.php
<?php

arch()->preset()->security();
arch()->preset()->php();      // Bloque dd(), dump()
arch()->expect('App')->toUseStrictEquality();

Désormais, chaque composer test ou pipeline CI valide automatiquement la sécurité de votre code.


Documentation Pest · Code source du preset