DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / Editeurs / Editeur d'analyses / Modèle Logique des Données
  • Présentation
  • Définir une rubrique de type mot de passe sous l'éditeur d'analyses
  • Définir une rubrique de type mot de passe dynamiquement (par programmation)
  • Définir une rubrique de type mot de passe via une requête
  • Manipuler une rubrique de type Mot de passe
  • Comparaisons
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
Le type de rubrique "Mot de passe" permet de stocker un mot de passe de façon sécurisée avec salage et hachage.
Le principe est simple :
  • L'utilisateur fournit un mot de passe sous forme d'une chaîne de caractères.
  • Vous affectez cette chaîne de caractères à une rubrique de type "Mot de passe".
  • Le moteur HFSQL sécurise ce stockage. Le mot de passe (c'est-à-dire la chaîne de caractères) est salé et haché, et le résultat de ces traitements sera stocké dans le fichier de données.
    • Le salage consiste à ajouter à la chaîne de caractères fournie une chaîne aléatoire (le sel).
    • Le hachage est ensuite réalisé sur le résultat du salage.
HFSQL stocke uniquement dans le fichier de données :
  • le sel utilisé pour le salage,
  • le résultat du hachage,
  • le type d'algorithme utilisé.
Avec ces données stockées, il est impossible de reconstituer la chaîne d'origine. Le stockage est donc sécurisé.
Pour vérifier si un mot de passe saisi est correct, il suffit de comparer la valeur saisie au contenu de la rubrique mot de passe. HFSQL va appliquer les mêmes traitements que ceux effectués lors du stockage. HFSQL va ensuite comparer le résultat obtenu au résultat stocké.
Pour utiliser ce type de rubrique dans vos projets existants :
  • dans l'analyse associée à votre projet, modifiez le type de la rubrique qui contient le mot de passe. La rubrique "Texte" devient une rubrique "Mot de passe".
  • mettez à jour vos données via la modification automatique des données. La modification automatique des données va saler et hacher la chaîne contenue dans la rubrique.
  • modifiez si nécessaire votre code. Pour vérifier la validité d'un mot de passe, il suffit de comparer la rubrique HFSQL à une chaîne de caractères. Le code sera par exemple :
    SI SAI_Mdp = IdentificationUtilisateur.Mdp ALORS
    // Mot de passe correct
    SINON
    // Mot de passe incorrect
    FIN
Définir une rubrique de type mot de passe sous l'éditeur d'analyses
Pour créer une rubrique de type Mot de passe dans l'éditeur d'analyses :
  1. Créez une nouvelle rubrique dans la fenêtre de description des rubriques du fichier de données (option "Description des rubriques" du menu contextuel du fichier sous l'éditeur d'analyses).
  2. Choisissez le type "Mot de passe".
  3. Indiquez les différents options de la rubrique :
    • Algorithme de dérivation, utilisé pour le hachage.
    • Algorithme de Hash, utilisé pour le salage.
    • Nombre d'itérations : nombre d'itérations de hachage. Il est conseillé d'utiliser une valeur comprise entre 10000 et 30000.
    • Taille du résultat (en bits) : Taille de la clé après hachage. La clé (exprimée en bits) doit être un multiple de 8, supérieure à 160 bits et inférieure à 2048 bits. Il est conseillé d’utiliser une clé de 256 ou 512 bits.
  4. Validez.
Remarque : Ces manipulations peuvent également être réalisées sur une rubrique de type texte existante pour la transformer en rubrique de type "Mot de passe".
Définir une rubrique de type mot de passe dynamiquement (par programmation)
Pour décrire une rubrique par programmation, il est nécessaire d'utiliser une variable de type "Description de Rubrique". La description d'une rubrique est validée par la fonction HDécritRubrique.
Pour décrire une rubrique de type "Mot de passe" :
  1. Déclarez une variable de type Description de Rubrique.
  2. Utilisez les différentes propriétés permettant de décrire la rubrique (pour plus de détails, consultez Description de Rubrique).
  3. Utilisez les propriétés spécifiques à la description d'une rubrique de type "Mot de passe" :
    • La propriété Type doit correspondre à la constante hRubMotDePasseSécurisé.
    • La propriété mdpsDérivation permet de définir l'algorithme de dérivation de clé utilisé pour le hachage.
    • La propriété mdpsHash permet de définir l'algorithme utilisé pour le salage.
    • La propriété mdpsNombreItération permet de définir le nombre d'itérations de l'algorithme de hachage.
    • La propriété mdpsTaille permet de définir la taille de la clé après hachage.
  4. Validez la description de chaque rubrique (fonction HDécritRubrique).
Définir une rubrique de type mot de passe via une requête
Pour définir une rubrique de type mot de passe dans une table via une requête SQL, il est nécessaire d'exécuter une requête de type "ALTER TABLE" avec le paramètre SECUREPASSWORD.
Rappel : L'instruction ALTER TABLE permet de créer ou de changer la structure d'une table existante.
Exemple : Requête d'ajout d'une rubrique :
ALTER TABLE test2 ADD mpdsTest2 SECUREPASSWORD
Exemple : Requête de modification du type d'une rubrique :
ALTER TABLE test2 ALTER texte TYPE SECUREPASSWORD
Manipuler une rubrique de type Mot de passe
L'utilisation d'une rubrique de type Mot de passe implique plusieurs spécificités :
  • Modification automatique des données : Il est possible de transformer une rubrique Texte en rubrique Mot de passe, mais il n'est pas possible de changer le type d'une rubrique Mot de passe.
  • NULL est autorisé pour une rubrique de type Mot de passe.
  • Une rubrique contenant une chaîne vide ("") sera hachée puis salée.
  • Les requêtes sont possibles sur un fichier de données contenant une rubrique Mot de passe. La rubrique est en lecture seule et aucune opération spécifique ne peut être réalisée sur cette rubrique. Sont autorisées les opérations suivantes :
    • égalité, différence,
    • NULL, COUNT, IN, STRINGDECODE, CASE, NULLIF
  • Importation : Il est possible d'importer une chaîne de caractères dans une rubrique Mot de passe depuis les formats JSON, texte, XML et XLS. La chaîne sera automatiquement sécurisée par le hachage plus le salage.
  • Exportation :
    • Exportation vers les formats CSV, XLS : la rubrique Mot de passe est représentée par la chaîne "*****".
    • Exportation vers les formats JSON, XML : la rubrique Mot de passe n'est pas exportée.
  • Il n’est pas possible de définir une rubrique mot de passe comme clé (ou index).
  • Il n’est pas possible d’afficher la valeur d'une rubrique mot de passe. Dans les tableaux, elle sera automatiquement écrite "*****".
  • Les valeurs par défaut sont les suivantes :
    • PBKDF2
    • SHA2_256
    • Nombre d’itérations : 20 000
    • Taille du résultat : 256

Comparaisons

Une rubrique Mot de passe peut uniquement être comparée à une chaîne de caractères.
Il est impossible de comparer une rubrique Mot de passe avec une autre rubrique de Mot de passe.
Exemple :
// Comparer une rubrique de type mot de passe avec une chaîne
IdentificationUtilisateur.Mdp = "coucou"
SI PAS HAjoute(IdentificationUtilisateur) ALORS
Trace(HErreurInfo())
FIN
 
HLitPremier(IdentificationUtilisateur)
SI IdentificationUtilisateur.Mdp = "coucou" ALORS
Trace("Mot de passe ok")
SINON
Trace("Mot de passe différent")
FIN
Exemple de code ne fonctionnant pas :
// On ne peut pas comparer une rubrique
// de type mot de passe avec une variable de type mot de passe
 
oMDPS est un MotDePasseSécurisé
oMDPS.Hash = MDPS_SHA2_256
oMDPS.NombreItération = 10000
oMDPS.Taille = 256
oMDPS = "coucou"
 
IdentificationUtilisateur.Mdp = "coucou"
SI PAS HAjoute(IdentificationUtilisateur) ALORS
Trace(HErreurInfo())
FIN
 
HLitPremier(IdentificationUtilisateur)
SI IdentificationUtilisateur.Mdp = oMDPS ALORS
Trace("Mot de passe ok")
SINON
Trace("Mot de passe différent")
FIN
Version minimum requise
  • Version 27
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale