Sécurité

(ce document peut ne pas être à jour)

Stratégie de sécurité

Configuration :

  • tous les éléments de configuration sont sécurisés par défaut

Base de données :

  • la base de données n'est pas accessible au serveur web par défaut
  • il est possible de chiffrer la base de données (via SQLCipher par exemple)

Fichiers :

  • l'envoi de fichiers avec une extension exécutable est désactivé : exe pif com cgi php pl perl asp py bash sh jar etc.
  • par défaut les fichiers ne sont pas exécutables sur le serveur (car stockés dans la base de données)
  • les images trop grandes (> 8000 pixels de large ou hauteur) ne sont pas autorisées
  • les fichiers HTML ou Javascript ne sont pas autorisés, sauf pour les administrateurs (pour limiter le risque d'attaque d'un utilisateur non-administrateur, par exemple qui créerait un faux formulaire HTML)

Connexion et mot de passe :

  • Les mots de passe longs sont conseillés par défaut : 4 mots choisis au hasard dans un dictionnaire
  • Les mots de passe trop courts (moins de 8 caractères) sont refusés
  • Lors du choix du mot de passe, son hash est comparé aux listes de mots de passe compromis (fournies par have i been pwned), les mots de passe compromis sont refusés
  • Les mots de passe sont stockés hashés avec bcrypt, il n'est pas possible de retrouver le mot de passe initial
  • Il est possible d'activer l'authentification à double facteur (standard TOTP)
  • Il est possible d'activer le chiffrement des e-mails reçus, permettant de contourner les interceptions de mail de récupération de mot de passe
  • Le nombre de tentatives de connexion avec un mauvais mot de passe est limité
  • Il existe un journal de tentatives de connexion

Autres :

  • Journal des actions utilisateur, permettant de voir quel utilisateur a créé, supprimé ou modifié un élément
  • protection CSRF systématique sur les formulaires

Considérations de sécurité

Normalement l'installation par défaut est relativement sécurisée (si vous trouvez des failles, merci de nous les signaler :) ).

Cependant quelques points d'attention sont à observer :

Installation dans un sous-répertoire

Si l'installation n'est pas faite avec un sous-domaine (virtual host) dédié, le répertoire contenant la base de données peut se retrouver exposé et être téléchargé.

Solution : utiliser un sous-domaine dédié, ou configurer le serveur web pour interdire l'accès au sous-répertoire data.

Stockage des documents dans le système de fichier

Par défaut les documents sont stockés dans la base de données. Dans ce cas il n'y a aucun risque pour le serveur, il est impossible d'exécuter du code malicieux.

Si on choisit de configurer pour que les documents soient stockés directement dans le système de fichier, il existe un risque qu'un utilisateur mal intentionné envoie un fichier malicieux. Même si l'envoi de fichiers exécutables n'est pas possible, il est possible de cacher du code malicieux à l'intérieur d'autres fichiers.

Dans ce cas, si le serveur web est mal configuré et permet l'accès au documents, il peut exister un risque que du code malicieux soit exécuté. Il faut que les conditions suivantes soient réunies :

  • si les documents sont stockés sur le système de fichier
  • si le serveur web est mal configuré et permet d'accéder aux documents sans passer par Paheko
  • si le serveur web est mal configuré et permet l'exécution de code PHP sur des fichiers qui n'ont pas l'extension .php (par exemple .jpg), ce qui est anormal

Dans ce cas un utilisateur mal intentionné pourrait envoyer un fichier contenant une image et du code et celui-ci serait exécuté.

Cette probabilité est infiniment basse, car cela devrait demander de mal configurer le serveur web de plusieurs manières.

Par mesure de précaution on peut désactiver l'exécution de code PHP dans le répertoire de stockage des documents en utilisant par exemple dans la configuration du virtual host:

php_flag engine off

Mais le mieux est de s'assurer que le répertoire des documents n'est pas accessible par le serveur web, tout simplement.