Sécurité - AllanFontaine/Pot-App GitHub Wiki

Aspect GDPR :

Notre application web se veut respectueuse des données de nos utilisateurs et nous avons donc mis en place plusieurs éléments pour respecter les règles établis par le GDPR.
(Nous nous sommes inspiré de ce site web pour établir ce qu'il était essentiel d'avoir mis en place pour le GDPR).

  • Notre site ne possède pas de cookies et nous n'enregistrons de ce fait aucune donnée utilisateur via des cookies. Cependant si des cookies sont ajoutés pour aider à la fluidité du site web, nous afficherons une pop-up pour avertir l'utilisateur des données qui seront retenues et manipulées par ces cookies avec la possibilité pour l'utilisateur de choisir s'il désire les utiliser ou pas.
  • Notre site web possède une charte de vie privée (terms and conditions) en anglais (pour être comprise par le plus grand nombre). Cette dernière est accessible depuis le footer partout sur l'application web et lors de l'enregistrement de l'utilisateur (comme case à cocher obligatoire). Cette charte contient l'adresse mail de contact de la société fictive pot'app ainsi que toutes les infos de base attendu dans une charte "terms and condition".
  • Il n y a que lors de l'enregistrement et lors de la modification des informations personnelles que des données à caractère sensible sont envoyés en base de données (mot de passe, adresse mail, ...). Cette envoi n'est évidemment pas fait en clair sur le réseau mais est au préalable hashé.
  • Le site web est déployé en https et plusieurs règles de sécurité ont été mises en place (cf point Sécurité ci-dessous).
  • Le compte google analytics utilisé pour notre site web a été paramétré pour le besoin.

Config

Configuration de base :

  • Création de user avec droit root
  • Authentification par mot de passe désactivée
  • Connexion en root désactivée
  • Désactivation des ports inutiles

Configuration Apache2 :
  • Installer Apache2 "npm install apache2"
  • Configuration des sites dans /etc/apache2/sites-available/
  • Activer la configuration du site grâce à la commande "a2ensite configuration.conf"
  • Ajout des headers nécessaire dans la configuration (voir sécurité)
  • Reload apache grâce à systemctl reload apache2

Fail2Ban:
Installation de Fail2Ban ( Npm install fail2ban )
Configuration Fail2Ban (/etc/fail2ban/jail.local)

Sécurité :

1.Sécurité Serveur

  • Mise à jour et dernière version de ce qui est sur le vps.
  • Mise en place de rôles sur le serveur avec des droits définis.
  • Désactivation de la connexion à root.
  • Désactivation de la connexion par mot de passe.
  • Changement du port de connexion par défaut.
  • Connection en ssh seulement à travers une paire de clé privée/publique.
  • Mise en place de Fail2Ban avec bannissement des adresses IP qui tentent de se connecter trop souvent.
  • Installation de Https.
  • Mise en place d'un header qui va bloquer les scripts intersite (attaque cross-site scripting)
  • Mise en place d'un header qui va empêcher la modification des types de données
  • Mise en place d'un header qui oblige d'utiliser HTTP Strict Transport Security (HSTS) pour apache

2. Sécurité Logiciel

  • Mise en place de JWToken, un nouveau qui est généré à chaque nouvelle connexion, stocké dans le localStorage de notre navigateur favoris et qui perd sa validité après un certain temps.

  • Permission class de Django qui refuse l'accès à certaines requêtes sans token valide.

  • Mise en place d'un système ou un user avec un token valide ne sait faire des requêtes que sur les données qui sont liées à son user-id, entre autre les données qui lui appartiennent, et donc impossibilité d'accéder les données d'un autre utilisateur sans son token.

  • Mise en place de gardes en Front-End qui suppriment le token du localStorage s'il n'est plus valide, mais qui déconnectent aussi l'utilisateur de notre site web et le renvoi sur les pages des visiteurs.

  • Protection de SQL Injection par Django, qui garde les query parameters très loin des bases de données.

  • Autorisation de seulement certaine requêtes bien définies via l'api ce qui empêche un même si on a un bon token de faire ce que l'on souhaite

  • Electronique : Mise en place d'un "code" auto-généré à la création d'un compte utilisateur et implémenté directement au sein de l'arduino client, qui permet d'identifier à quel utilisateur appartient l'arduino qui envoi les données sur notre API et donc ajouter les données à celui-ci et seulement lui en fonction de ce qui est voulu. Ce code qui n'est donc pas connu d'autrui, empêche aussi l'ajout des données malveillantes.

3. Sécurité Base de données

  • Mise en place d'utilisateurs bien délimités avec des rôles et droits spécifiques.
  • Pas de remote access sur notre base et données et seulement accès via l'api Pot'API.
⚠️ **GitHub.com Fallback** ⚠️