# Suhosin

Suhosin (수호신 en Coréen, prononcé en coréen : [suɦoɕin], signifiant « ange gardien ») est un patch open source pour PHP, ainsi qu'une extension pour ce dernier, écrit par l'entreprise allemande Sektion Eins. Le patch et l'extension sont deux parties distinctes, pouvant être utilisées ensemble ou séparément. « Le but de Suhosin est d'être un filet de sécurité protégeant les serveurs contre les mauvaises pratiques de code au niveau de PHP. »
Suhosin réduit également la surface d'attaque présentée par PHP, via un système de liste blanche pour les fonctions pouvant être appelées, des limites en termes de ressources, du chiffrement transparent de cookies de session, du filtrage de contenu binaire, de la journalisation…, minimisant ainsi les risques liés au déploiement de code PHP dangereux, et protégeant d'attaques connues et inconnues.

## Fonctionnalités

Le patch contient des techniques de durcissement visant à empêcher les attaques par corruption mémoire, qui ne sont pas présentes dans le module. La plupart d'entre elles ont toutefois été intégrées directement dans PHP.
* Chiffrement des cookies : afin de protéger des attaques de type XSS visant à voler des cookies, ces derniers sont chiffrés avec une clef dérivée du user-agent ainsi que d'une partie de l'adresses IP de l'utilisateur. Ce qui empêche un attaquant d'utiliser des cookies dérobés, ceux-ci ne se déchiffrant pas correctement avec son adresse IP.
* Protection contre les inclusions arbitraires : les fichiers envoyés, ainsi que les fichiers distants ne peuvent pas être inclus, rendant plus difficile l'exploitation de Remote File Inclusion.
* Désactivation de vecteurs courants d’exécution de code arbitraire : le mot clef eval n'étant pas une fonction en PHP, il ne peut être désactivé via la directive disable_function. Suhosin ajoute cette possibilité, tout comme celle de désactiver le modificateur /e de la fonction preg_replace, lui aussi fréquemment utilisé à des fins malveillantes.
* Protection contre des boucles infinies : PHP possède un comportement documenté (et accepté) entraînant une erreur de segmentation en cas de récursion infinie. Cette erreur étant due à une corruption mémoire, Suhosin va plutôt arrêter l’exécution dès qu'un certain niveau de profondeur dans la pile d'exécution est atteint.
* Liste noire et liste blanche de fonctions : la directive disabled_function de PHP n'est pas vraiment granulaire, c'est pourquoi Suhosin fournit un mécanisme permettant d’autoriser ou d'interdire des fonctions, globalement, par virtual-host, ou encore par dossiers.
* Liste noire de noms de variables suspects : Suhosin peut interdire des variables dans les zones GET, POST, COOKIE contenant des noms réservés, comme GLOBALS, _COOKIE, _ENV, _FILES, _GET, _POST…
* Durcissement des envois de fichiers : Suhosin permet d'appeler un script arbitraire lors de l'envoi de fichiers, permettant ainsi d'y adjoindre, par exemple, un anti-virus. Cette fonctionnalité peut également servir à empêcher l'envoi de fichiers ELF, ou de binaires.
* Lancement d'actions arbitraires en cas de détection d’éventements : blocage de variables, envoi de code de réponse http spécifiques, d'une redirection, ou encore exécuter un script PHP particulier.
* Journalisation détaillée : il est possible, via Suhosin, de loguer un grand nombre de détails en cas d’éventements, le nom du fichier, le numéro de ligne, l'adresse IP du client…

## Distribution

Le module ainsi que le patch furent inclus dans plusieurs distributions Linux , notamment Debian jusqu’à sa version 6.x (Squeeze), et fut réintégré plus tard, ou encore dans Gentoo Hardened. Il était également activé sur la version serveur de Mac OS X.
À partir de PHP5.4, openSuse arrêta de supporter le patch, mais continue son support du module.
FreeBSD maintient également le module dans sa collection de ports.

## Développement et héritiers

La première version de Suhosin sortit en 2006, et supportait PHP 5.2.0. La dernière version du patch fut publiée quelques mois après la sortie du module. Le dernier article publié sur le site officiel date de 2007, et le développement du mode s’arrêta de mai 2012 à février 2014. Ce qui poussa certaines distributions à considérer le projet comme inactif, jusqu'à ce que la communauté prenne le relai, aux alentours de 2014. Il n'est actuellement pas prévu de pousser dans PHP les fonctionnalités de Suhosin.
En novembre 2015, suhosin7 vit le jour, afin de proposer des fonctionnalités équivalentes pour PHP 7.x, mais n'a pour l'instant pas rencontré d'engouement. Le projet Snuffleupagus vise à en être le successeur moderne, pour PHP 7 et au-delà.