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.