U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Het correct genereren van wachtwoorden op een website gekoppeld aan Mercator

0000002274     -      24-06-2016

Heel vaak worden wachtwoorden opgeslagen "in plain text" in de tabel CLI van Mercator. Deontologisch is dit niet correct voor een website. Want vele internetgebruikers gebruiken hetzelfde wachtwoord op verschillende websites en dus is het niet goed dat iedereen kan beschikken over deze informatie.

Om dit te verhelpen, is de klassieke manier om een SHA1 sleutel bij te houden met hierin het wachtwoord en geen "plain text". Om het systeem robuust te mkaen, zal de SHA1 sleutel berekend worden op basis van een aaneenschakeling van een vaste string en het wachtwoord van de gebruiker. (In ons voorbeeld is deze string "coucou_gamin".)

Om dit in te voeren indien de wachtwoorden reeds in de database zitten (bijvoorbeeld in het veld C_PWD), volstaat het om:

  • ervoor te zorgen dat het veld TAC_PWD 40 tekens kan ontvangen. Indien nodig moet het veld vergroot worden.
  • de volgende SQL-query uit te voeren: update CLI set c_pwd=dbo.xsha1('coucou_gamin'+c_pwd) where c_pwd<>''

Als men in de website de gebruiker wil verifiëren volstaat het om volgende SQL-query uit te voeren als volgt:

select ... from CLI where ... and (c_pwd=dbo.xsha1('coucou_gamin'+@pwd))

waar @pwd het geëncrypteerde gebruikerswachtwoord is.

In de interface van Mercator, is het handig om een knop te voorzien die je toelaat om het wachtwoord van de gebruiker te wijzigen of te initialiseren met een willekeurige waarde. Dit kan gerealiseerd worden met volgende customizer:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using MercatorUi;
using MercatorApi;

namespace SigCli
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer, MercatorUi.ICustomizers.IFormValidateCustomizer
    {

        public void FormLoadCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;

            MercatorUi.MovableControls.MovableTextBox textBoxPwd = (MercatorUi.MovableControls.MovableTextBox)sigForm.MovableControls["..."]; // ... = id du textbox mot de passe
            textBoxPwd.ButtonCustom.Visible = true;
            textBoxPwd.ButtonCustomClick += new EventHandler(textBoxPwd_ButtonCustomClick);
        }

        
        public void FormClosedCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
            MercatorUi.MovableControls.MovableTextBox textBoxPwd = (MercatorUi.MovableControls.MovableTextBox)sigForm.MovableControls["..."]; // ... = id du textbox mot de passe
            textBoxPwd.ButtonCustomClick -= new EventHandler(textBoxPwd_ButtonCustomClick);
        }

        
        void textBoxPwd_ButtonCustomClick(object sender, EventArgs e)
        {
            MercatorUi.MovableControls.MovableTextBox textBox = (MercatorUi.MovableControls.MovableTextBox)sender;
            if (textBox.Text.Trim() == "")
            {
                string pwd = Api.Ident();
                textBox.Text = Api.Xsha1("coucou_gamin" + pwd);
                MercatorUi.Dialogs.Stop(string.Format("Het gegenereerde wachtwoord is \"{0}\" en werd gekopieerd naar presse-papier.", pwd));
                try
                {
                    Clipboard.SetData(DataFormats.Text, pwd);
                }
                catch (Exception ex)
                {
                    MercatorUi.Dialogs.Stop(ex.Message);
                }
            }
            else
            {
                string pwd = MercatorUi.Dialogs.AskString("Het huidige wachtwoord vervangen door... ?", "").Trim();
                if (pwd != "")
                    textBox.Text = Api.Xsha1("coucou_gamin" + pwd);
            }
        }

    }
}