Overview
Comment:Sécurité: vérification de la clé PGP avant d'enregistrer
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | dev
Files: files | file ages | folders
SHA1: 36fa9933868998db78001237de336cefc99f05c2
User & Date: bohwaz on 2017-02-21 03:55:23
Other Links: branch diff | manifest | tags
Context
2017-02-21
03:57
Sécurité: vérifier que GPG est dispo avant d'enregistrer une clé check-in: 23165737ae user: bohwaz tags: dev
03:55
Sécurité: vérification de la clé PGP avant d'enregistrer check-in: 36fa993386 user: bohwaz tags: dev
2017-02-17
04:31
Sécurité: obligation de confirmer activation OTP, ajout clef PGP pour chiffrement mails sortants, déplacement infos sécurité dans une page à part check-in: 71857e5680 user: bohwaz tags: dev
Changes

Modified src/include/lib/Garradin/Membres.php from [4506047015] to [fab06377a8].

613
614
615
616
617
618
619
620

621




622
623
624
625
626













627
628
629
630
631
632
633
        {
            unset($data['passe']);
        }

        if (isset($data['clef_pgp']))
        {
            $data['clef_pgp'] = trim($data['clef_pgp']);
        }






        $db->simpleUpdate('membres', $data, 'id = '.(int)$user['id']);
        $this->updateSessionData();

        return true;
    }














    public function get($id)
    {
        $db = DB::getInstance();
        $config = Config::getInstance();

        return $db->simpleQuerySingle('SELECT *,







|
>
|
>
>
>
>
|




>
>
>
>
>
>
>
>
>
>
>
>
>







613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
        {
            unset($data['passe']);
        }

        if (isset($data['clef_pgp']))
        {
            $data['clef_pgp'] = trim($data['clef_pgp']);

            if (!\KD2\Security::getEncryptionKeyFingerprint($data['clef_pgp']))
            {
                throw new UserException('Clé PGP invalide : impossible d\'extraire l\'empreinte.');
            }
        }

        DB::getInstance()->simpleUpdate('membres', $data, 'id = '.(int)$user['id']);
        $this->updateSessionData();

        return true;
    }

    public function getPGPFingerprint($key, $display = false)
    {
        $fingerprint = \KD2\Security::getEncryptionKeyFingerprint($key);

        if ($display && $fingerprint)
        {
            $fingerprint = str_split($fingerprint, 4);
            $fingerprint = implode(' ', $fingerprint);
        }

        return $fingerprint;
    }

    public function get($id)
    {
        $db = DB::getInstance();
        $config = Config::getInstance();

        return $db->simpleQuerySingle('SELECT *,

Modified src/templates/admin/mes_infos_securite.tpl from [b578d4e8a9] to [e84094ff01].

109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
            <legend>Protéger mes mails personnels par chiffrement PGP/GnuPG</legend>
            <dl>
                <dt><label for="f_clef_pgp">Ma clé publique PGP</label></dt>
                <dd class="help">En inscrivant ici votre clé publique, tous les emails personnels (non collectifs) qui vous
                    sont envoyés seront chiffrés (cryptés) avec cette clé&nbsp;: messages envoyés par les membres, rappels de cotisation,
                    procédure de récupération de mot de passe, etc.</dd>
                <dd><textarea name="clef_pgp" id="f_clef_pgp" cols="90" rows="5">{form_field name="clef_pgp" data=$user}</textarea></dd>
                {if $clef_pgp_fingerprint}<dd class="help">L'empreinte de la clé est&nbsp;: {$clef_pgp_fingerprint}</dd>{/if}
            </dl>
            <p class="alert">
                Attention&nbsp;: en inscrivant ici votre clé PGP, les emails de récupération de mot de passe perdu vous seront envoyés chiffrés
                et ne pourront être lus sans utiliser le mot de passe protégeant votre clé privée correspondante.
            </p>
        </fieldset>
        {/if}







|







109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
            <legend>Protéger mes mails personnels par chiffrement PGP/GnuPG</legend>
            <dl>
                <dt><label for="f_clef_pgp">Ma clé publique PGP</label></dt>
                <dd class="help">En inscrivant ici votre clé publique, tous les emails personnels (non collectifs) qui vous
                    sont envoyés seront chiffrés (cryptés) avec cette clé&nbsp;: messages envoyés par les membres, rappels de cotisation,
                    procédure de récupération de mot de passe, etc.</dd>
                <dd><textarea name="clef_pgp" id="f_clef_pgp" cols="90" rows="5">{form_field name="clef_pgp" data=$user}</textarea></dd>
                {if $clef_pgp_fingerprint}<dd class="help">L'empreinte de la clé est&nbsp;: <code>{$clef_pgp_fingerprint}</code></dd>{/if}
            </dl>
            <p class="alert">
                Attention&nbsp;: en inscrivant ici votre clé PGP, les emails de récupération de mot de passe perdu vous seront envoyés chiffrés
                et ne pourront être lus sans utiliser le mot de passe protégeant votre clé privée correspondante.
            </p>
        </fieldset>
        {/if}

Modified src/www/admin/mes_infos_securite.php from [89a6bd6a26] to [a0932f5a86].

73
74
75
76
77
78
79




80
81
82
83
84
85
86
..
87
88
89
90
91
92
93

94



95








96
97
98
99
100
101
102
103
    {
        $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
    }
    elseif (Utils::post('passe') != Utils::post('repasse'))
    {
        $error = 'La vérification ne correspond pas au mot de passe.';
    }




    else
    {
        $confirm = true;
    }
}

$tpl->assign('error', $error);
................................................................................
$tpl->assign('confirm', $confirm);

if (Utils::post('otp') == 'generate')
{
    $otp = $membres->getNewOTPSecret();
    $tpl->assign('otp', $otp);
}





$tpl->assign('pgp_disponible', \KD2\Security::canUseEncryption());








$tpl->assign('clef_pgp_fingerprint', !empty($membre['clef_pgp']) ? \KD2\Security::getEncryptionKeyFingerprint($membre['clef_pgp']) : null);

$tpl->assign('passphrase', Utils::suggestPassword());
$tpl->assign('champs', $config->get('champs_membres')->getAll());

$tpl->assign('membre', $membre);

$tpl->display('admin/mes_infos_securite.tpl');







>
>
>
>







 







>
|
>
>
>

>
>
>
>
>
>
>
>
|







73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
..
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
    {
        $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
    }
    elseif (Utils::post('passe') != Utils::post('repasse'))
    {
        $error = 'La vérification ne correspond pas au mot de passe.';
    }
    elseif (Utils::post('clef_pgp') && !$membres->getPGPFingerprint(Utils::post('clef_pgp')))
    {
        $error = 'Clé PGP invalide : impossible de récupérer l\'empreinte de la clé.';
    }
    else
    {
        $confirm = true;
    }
}

$tpl->assign('error', $error);
................................................................................
$tpl->assign('confirm', $confirm);

if (Utils::post('otp') == 'generate')
{
    $otp = $membres->getNewOTPSecret();
    $tpl->assign('otp', $otp);
}
else
{
    $tpl->assign('otp', false);
}

$tpl->assign('pgp_disponible', \KD2\Security::canUseEncryption());

$fingerprint = '';

if ($membre['clef_pgp'])
{
    $fingerprint = $membres->getPGPFingerprint($membre['clef_pgp'], true);
}

$tpl->assign('clef_pgp_fingerprint', $fingerprint);

$tpl->assign('passphrase', Utils::suggestPassword());
$tpl->assign('champs', $config->get('champs_membres')->getAll());

$tpl->assign('membre', $membre);

$tpl->display('admin/mes_infos_securite.tpl');