Betula-secu

En ajoutant un composant externe Betula-secu (à développer par vous-même) dans votre projet, le framework Betula utilisera les fonctions de Betula-Secu pour les connexions aux bases de données. Ainsi Betula-Secu centralise et surtout protège les mots de passe.

Les fonctions doivent être, par exemple, décrites comme suit :

BDConnecteSécurisé

PROCÉDURE BDConnecteSécurisé(sServeur est une chaîne,sBaseDeDonnées est une chaîne,sUtilisateur est une chaîne = "",sMotDePasse est une chaîne = "")
cnxDonnées est une Connexion
 
SI PAS sBaseDeDonnées~="" _ET_ PAS sServeur~="" ALORS
	cnxDonnées..BaseDeDonnées=sBaseDeDonnées
	cnxDonnées..Provider=hAccèsHFClientServeur		
	cnxDonnées..Serveur=(ExtraitChaine(sServeurEtPort,1,":")="1" ? "localhost:4900" SINON "ServerProd:4900") //grâce au composant, le nom des serveurs passé en paramètre peut être simplifié (ici "1" au lieu de "localhost:4900")		
	cnxDonnées..Utilisateur=(sUtilisateur="" ? "admin" SINON sUtilisateur)  //si le nom d'utilisateur est vide, on prend ici "admin"	
	cnxDonnées..MotDePasse=(sMotDePasse ="" ? "Abc123$" SINON sMotDePasse)  //l'affectation du mot de passe dans une variable de type connexion ne sera pas visible dans le projet, même lors d'une trace.	
	cnxDonnées..Accès=hOLectureEcriture			
	cnxDonnées..Cryptage=hCryptageStandard		
	cnxDonnées..Compression=Vrai	
	cnxDonnées..InfosEtendues=""	
	cnxDonnées..OptionsCurseur=hCurseurClient
SINON
	ErreurDéclenche(98,"The first two parameters are mandatory")
FIN
RENVOYER cnxDonnées  //important de renvoyer une variable de type Connexion

Ici, utilisateur et mot de passe sont néanmoins acceptés comme paramètre dans le cas où on veut les forcer, sinon l’admin et son mot de passe (non visible à l’extérieur du composant) seront utilisés.

Mettre ceci en composant externe ne permet pas à l’utilisateur de voir le code, donc les mots de passe.

Fonctions en version beta

Attention, contrairement à la variable de type Connexion ci-dessus, la variable LDAPSession.MotDePasse et MaSession.MotDePasse sont visible en clair dans le débogueur.  Question de cohérence et de sécurité, une demande d’amélioration a été envoyée chez PCSOFT à ce propos (mars 2021).

Les fonctions ci-dessous sont donc là à titre didactique pour l’instant.

LDAPConnecteSécurisé
PROCÉDURE LDAPConnecteSécurisé(sServeurEtPort est une chaîne,sSession est une chaîne,sUtilisateur est une chaîne = "",sMotDePasse est une chaîne = "")
SI PAS sSession~="" _ET_ PAS sServeurEtPort~="" ALORS
	LDAPSession.Hôte = (ExtraitChaine(sServeurEtPort,1,":")="1" ? "wad01" SINON "wadtst") 			
	LDAPSession.Port = (ExtraitChaine(sServeurEtPort,2,":") DANS ("0",EOT) ? 389 SINON Val(ExtraitChaine(sServeurEtPort,2,":")))			
	LDAPSession.Utilisateur = (sUtilisateur="" ? "admin" SINON sUtilisateur)	
	LDAPSession.MotDePasse = (sMotDePasse ="" ? "Abc123$" SINON sMotDePasse)	
	LDAPSession.Version = 3		
SINON
	ErreurDéclenche(98,"The first two parameters are mandatory")
FIN
RENVOYER Faux
SMTPConnecteSécurité
PROCÉDURE SMTPConnecteSécurité(sServeur est une chaîne,sSession est une chaîne,sUtilisateur est une chaîne = "",sMotDePasse est une chaîne = "")
MaSession est un emailSessionSMTP
SI PAS sSession~="" _ET_ PAS sServeur~="" ALORS
	MaSession..Nom = (sUtilisateur="" ? "contact" SINON sUtilisateur)
	MaSession..AdresseServeur = "winsmtp"
	MaSession..Port	= 25 
	MaSession..MotDePasse = (sMotDePasse ="" ? "Abc123$" SINON sMotDePasse)
	MaSession..Option = emailOptionDéfaut
SINON
	ErreurDéclenche(98,"The first two parameters are mandatory")
FIN
RENVOYER MaSession

Variantes

  • Les informations de connexion peuvent être sauvés dans un fichier ini, un fichier texte, la base de registre, … à vous de crypter alors le mot de passe (la clé de cryptage étant de le composant, elle ne sera jamais révélée)
  • Les informations de connexion peuvent venir d’ailleurs (ex : un webservice)
  • Plutôt que d’utiliser SMTPConnecteSécurisé, c’est facile de faire un webservice REST qui récupère les paramètres SMTP et envoie lui-même le courriel depuis le serveur.