Aperçu de la sécurité

Vos données restent là où elles doivent être.

Un résumé pour les équipes informatiques et sécurité : comment SnagBane est déployé, comment il contrôle les accès, comment il est renforcé et ce qui quitte exactement votre serveur.

Déploiement et données

  • Auto-hébergé. SnagBane est un logiciel que vous installez avec Docker, sur un VPS ou sur cPanel. Formulaires, réponses, fichiers et comptes sont stockés dans votre propre base de données (MySQL/MariaDB, PostgreSQL ou SQLite) et votre propre stockage.
  • Aucun mot de passe par défaut partagé. La base Docker démarre avec un mot de passe d’installation que l’installateur remplace par un mot de passe aléatoire robuste ; php artisan snagbane:db-password le change ensuite.
  • Stockage privé des fichiers hors de la racine web, avec des noms de fichiers aléatoires.
  • Fonctionne sur un réseau interne. L’offre Free n’a besoin d’aucun accès Internet ; Business et Enterprise ont besoin du HTTPS sortant pour la vérification de licence.

Identité et accès

  • Authentification unique avec Microsoft Entra ID, Google Workspace, Okta et tout fournisseur d’identité SAML 2.0 comme AD FS ou Ping (Business et Enterprise) – uniquement des réponses SAML signées à des connexions lancées par SnagBane, chacune acceptée une seule fois. Les connexions via l’annuaire ne créent jamais d’administrateurs, et l’attribution des rôles par groupes ne fait jamais qu’élever un rôle.
  • Authentification à deux facteurs pour les comptes SnagBane : une application d’authentification (sa clé de configuration peut aller dans un gestionnaire de mots de passe) ou des clés de sécurité FIDO2 et clés d’accès — YubiKey, Windows Hello, Gestionnaire de mots de passe de Google, trousseau iCloud. La méthode la plus forte est demandée en premier ; les codes de récupération à usage unique permettent de revenir, jamais le mot de passe seul. Peut être obligatoire pour les administrateurs, et un administrateur peut demander une nouvelle configuration.
  • Verrouillage du compte après des échecs de connexion répétés – aussi pour les adresses inconnues, pour qu’on ne puisse pas découvrir les comptes –, règles de mot de passe strictes et hachage bcrypt.
  • Rôles et espaces de travail : propriétaires, administrateurs, éditeurs, lecteurs et répondants ; règles d’accès par formulaire, portail et espace de travail. Les visiteurs sans accès ne voient que le titre et la description, jamais les questions.
  • Les nouveaux venus n’ont aucun droit de modification par défaut – le rôle par défaut est répondant.

Sécurité de l’application

  • Content Security Policy stricte avec des nonces par requête, protection contre le clickjacking, HSTS en HTTPS, nosniff et une politique de référent. Protection CSRF et contre la fixation de session.
  • Fichiers envoyés contrôlés par liste blanche d’extensions et analyse du contenu ; scripts, exécutables, SVG/HTML et doubles extensions sont bloqués.
  • Protection SSRF pour chaque webhook et intégration : les adresses privées et de métadonnées sont bloquées (résistant au DNS rebinding), avec une liste blanche administrateur pour les hôtes internes de confiance.
  • Secrets chiffrés avec votre clé d’application. Les jetons d’API, liens d’approbation, de modification et de reprise ne sont stockés que sous forme de hachages.
  • Validation côté serveur de chaque réponse, chemin d’embranchement et calcul ; les réponses des quiz n’atteignent jamais le navigateur ; l’injection de formules est neutralisée dans les exports CSV, Excel et Google Sheets.
  • Liens construits à partir de votre adresse configurée, jamais à partir de l’en-tête Host de la requête.

Surveillance et audit

  • Journal d’audit des connexions, de l’administration, des exports et des décisions d’approbation, y compris qui a changé un approbateur et pourquoi.
  • Flux SIEM : chaque entrée est aussi écrite sous forme d’une ligne JSON plate dans un fichier quotidien, prête pour Microsoft Sentinel, Elastic ou un Splunk Universal Forwarder. Export en CSV ou JSON Lines.
  • Webhooks signés (HMAC-SHA256 avec horodatage) pour que les destinataires puissent vérifier chaque appel.

Mises à jour et chaîne d’approvisionnement

  • Mises à jour signées : chaque version est vérifiée avec Ed25519 avant de s’installer, puis appliquée en mode maintenance, avec retour arrière en un clic.
  • Mises à jour propres : les fichiers supprimés dans une version le sont aussi sur votre serveur, si bien qu’une installation mise à jour correspond à une installation neuve.
  • Les preuves de licence sont signées et vérifiées avec une clé intégrée à l’application – aucun paramètre d’environnement ne peut débloquer une offre payante.

Paramètres que vous contrôlez

Des réglages sûrs sont appliqués d’emblée. Dans Paramètres → Sécurité, vous pouvez les renforcer encore :

  • Exiger l’authentification à deux facteurs pour les administrateurs
  • Longueur minimale des mots de passe (majuscules, minuscules et chiffres toujours exigés) et durée de session
  • Extensions de fichiers autorisées et taille maximale des envois
  • Hôtes privés autorisés pour les webhooks et intégrations – tout ce qui est interne est bloqué sinon
  • Emplacements et comptes SharePoint, OneDrive et Google Drive que les éditeurs peuvent utiliser (les administrateurs peuvent tout choisir)
  • Si les comptes Microsoft, Google et Okta peuvent aussi utiliser un mot de passe ; les comptes désactivés dans Entra ID ou Google Workspace ne peuvent plus se connecter avec
  • Écrire chaque réponse dans un fichier journal JSON pour votre collecteur de logs
  • Conservation des données : supprimer automatiquement les anciennes réponses après la durée choisie (voir RGPD)
Paramètres → Sécurité

Architecture

Une seule application web sur votre serveur – aucun de nos services cloud sur le chemin de vos données.

  • Application : PHP 8.3+ (Laravel) derrière votre serveur web, ou l’image Docker. L’application navigateur est servie depuis la même adresse ; aucun script, police ou CDN tiers n’est chargé, et la Content-Security-Policy n’autorise que votre propre serveur.
  • Base de données : MySQL/MariaDB, PostgreSQL ou SQLite – formulaires, réponses, approbations, comptes et paramètres. Les mots de passe et clés d’API des intégrations sont chiffrés avec la clé propre à l’installation (APP_KEY).
  • Fichiers : envois, signatures et PDF générés dans le dossier storage, hors de la racine web, avec des noms aléatoires ; ils ne sont servis qu’après un contrôle d’accès.
  • Planificateur : une entrée cron (schedule:run chaque minute) envoie les relances, applique la politique de conservation et vérifie les mises à jour et la licence.
  • Adresses publiques : formulaires (/f/…), portails (/p/…), liens d’approbation (/approve/…) et reçus (/r/…) – chacune vérifie sa propre règle d’accès ou un jeton signé. Tout le reste (/app, /api) exige un compte connecté ; l’API REST (Business et Enterprise) et SCIM (Enterprise) exigent des jetons.
  • Les sauvegardes vous appartiennent : la base de données plus le dossier storage, y compris storage/.env avec la clé qui déchiffre les secrets stockés.

Ce qui quitte votre serveur

SnagBane n’a ni statistiques d’usage ni télémétrie. De lui-même, il n’établit que ces connexions :

ConnexionCe qui est envoyéDestinataireQuand
Vérification des mises à jourÉdition, version, version de PHP et adresse du site. Avec une licence, également : la clé de licence, l’identifiant d’installation Freemius et un identifiant d’installation aléatoireService de mise à jour SnagBane (Cloudflare)Chaque jour et quand un administrateur vérifie ; désactivable avec SNAGBANE_UPDATES=false
Téléchargement d’une mise à jourUniquement la demande du paquet signéService de mise à jour SnagBaneQuand un administrateur installe une mise à jour
Activation de licence (Business, Enterprise)La clé de licence, un identifiant d’installation aléatoire, l’adresse et le nom du site, la version, ainsi que le nom et l’e-mail de l’administrateur qui l’activeFreemius (notre revendeur)Une fois, à l’ajout de la licence
Vérification de licence (Business, Enterprise)La clé de licence, l’identifiant d’installation Freemius, l’identifiant d’installation aléatoire et la versionFreemius et le service de licences SnagBaneChaque jour ; toutes les heures tant qu’une vérification échoue

Et celles-ci uniquement si vous les configurez :

Ce que vous activezCe qui est envoyéDestinataire
E-mailNotifications, demandes d’approbation et reçusLe service d’e-mail que vous configurez (SMTP ou API)
Connexion et annuaireDemandes de connexion ; lectures de l’annuaire pour les sélecteurs de personnes, les responsables et les groupesMicrosoft Entra ID, Google Workspace, Okta ou votre fournisseur d’identité SAML
Intégrations et webhooksLes réponses et fichiers que chacune doit envoyerLes services que vous connectez, sur les événements que vous choisissez
Paiements dans les formulairesMontant, devise, objet du paiement et e-mail du répondant s’il est connu – jamais les données de carteStripe ou PayPal
Journal d’audit vers votre SIEMEntrées du journal d’auditVotre Sentinel, Splunk, Elastic ou point de terminaison HTTPS
Traduction automatiqueLes textes de formulaire que vous choisissez de traduireDeepL, Azure, Google ou LibreTranslate
Notifications de l’application mobileUn message de réveil vide – le téléphone récupère ensuite la notification sur votre serveurLe service push du navigateur de la personne
Importer un formulaire depuis un lienUne requête vers cette page de formulaire publiqueGoogle Forms ou Microsoft Forms, quand un éditeur en importe un
Choix issus d’une listeUne requête vers la listeL’adresse CSV, la liste SharePoint, le tableau Excel ou la feuille Google que vous liez

Documents pour les évaluateurs

Nous ne revendiquons aucune certification comme ISO 27001 ou SOC 2 : SnagBane tourne dans votre infrastructure, sous vos contrôles et vos audits.

Questions des évaluateurs

Peut-on le faire tourner sans accès Internet ?

Avec l’offre Free, oui – rien n’est nécessaire. Business et Enterprise ont besoin du HTTPS sortant pour renouveler la preuve de licence au moins tous les 2 jours ; formulaires, réponses et approbations continuent de fonctionner même lorsque les fonctions payantes sont en pause.

Qui peut voir les réponses ?

Seules les personnes à qui vous donnez accès à l’espace de travail du formulaire, plus les approbateurs pour les demandes qui leur sont assignées. Les approbateurs ouvrent les fichiers via leur approbation, jamais par un lien public.

Comment les autorisations Microsoft 365 sont-elles configurées ?

Dans votre propre tenant : le script PowerShell recommandé y crée l’inscription d’application, vous voyez donc et contrôlez chaque autorisation. Voir autorisations.

Comment envoyer le journal d’audit vers Sentinel ou Splunk ?

Avec l’offre Enterprise, SnagBane l’envoie directement vers Microsoft Sentinel, Splunk, Elastic ou n’importe quel point de terminaison HTTPS. Vous pouvez aussi pointer un collecteur vers les fichiers JSON Lines quotidiens dans storage/logs/audit. Voir le guide SIEM.

Comment signaler un problème de sécurité ?

Écrivez-nous comme indiqué dans la politique de divulgation des vulnérabilités. Merci de ne pas ouvrir d’abord un ticket public.

Où sont les sauvegardes ?

Là où vous sauvegardez votre serveur : la base de données et le dossier storage. SnagBane n’en garde aucune copie ailleurs.