PROJET AUTOBLOG


shaarli-Liens en vrac de sebsauvage

Site original : shaarli-Liens en vrac de sebsauvage

⇐ retour index

Sécuriser le formulaire de login de DokuWiki avec TOTP

lundi 14 juillet 2014 à 18:11
Suite à mon petit guide (http://sebsauvage.net/links/?-EXrUg) voici en exemple comment sécuriser le formulaire de login de DokuWiki avec TOTP.
La bonne manière de faire aurait été de créer un plugin d'authentification spécifique, mais j'ai choisi de taper directement dans le code (ce qui obligera à refaire la manip à la prochaine mise à jour, mais c'est assez rapide à faire: 6 lignes à modifier).

EDIT: J'ai mis ça sur le wiki: http://sebsauvage.net/wiki/doku.php?id=totp#dokuwiki


Dans inc/html.php:
--------------------------------------------------------------------------------------------------------------------------------------------
--- html.php.original Mon Jul 14 13:49:34 2014
+++ html.php Mon Jul 14 19:51:35 2014
@@ -47,6 +47,7 @@
    $form->addHidden('do', 'login');
    $form->addElement(form_makeTextField('u', ((!$INPUT->bool('http_credentials')) ? $INPUT->str('u') : ''), $lang['user'], 'focus__this', 'block'));
    $form->addElement(form_makePasswordField('p', $lang['pass'], '', 'block'));
+    $form->addElement(form_makePasswordField('otp', 'OTP', '', 'block'));
    if($conf['rememberme']) {
        $form->addElement(form_makeCheckboxField('r', '1', $lang['remember'], 'remember__me', 'simple'));
    }
--------------------------------------------------------------------------------------------------------------------------------------------


Dans inc/auth.php
--------------------------------------------------------------------------------------------------------------------------------------------
--- auth.php.original Mon Jul 14 13:49:33 2014
+++ auth.php Mon Jul 14 20:14:55 2014
@@ -110,6 +110,7 @@
        $evdata = array(
            'user'     => $INPUT->str('u'),
            'password' => $INPUT->str('p'),
+            'otp' => $INPUT->str('otp'),
            'sticky'   => $INPUT->bool('r'),
            'silent'   => $INPUT->bool('http_credentials')
        );
@@ -179,6 +180,7 @@
    return auth_login(
        $evdata['user'],
        $evdata['password'],
+        $evdata['otp'],
        $evdata['sticky'],
        $evdata['silent']
    );
@@ -213,7 +215,7 @@
 * @param   bool    $silent  Don't show error on bad auth
 * @return  bool             true on successful auth
 */
-function auth_login($user, $pass, $sticky = false, $silent = false) {
+function auth_login($user, $pass, $otp, $sticky = false, $silent = false) {
    global $USERINFO;
    global $conf;
    global $lang;
@@ -228,7 +230,8 @@

    if(!empty($user)) {
        //usual login
-        if($auth->checkPass($user, $pass)) {
+        require_once realpath(dirname(__FILE__).'/../../myotp/myotp.php');  // Lien vers votre librairie OTP
+        if($auth->checkPass($user, $pass)  && checkOTP($otp))   {
            // make logininfo globally available
            $INPUT->server->set('REMOTE_USER', $user);
            $secret                 = auth_cookiesalt(!$sticky, true); //bind non-sticky to session
--------------------------------------------------------------------------------------------------------------------------------------------

Et voilà !

PS: Je me suis aussi fait Codiad, QuiXplorer et quelques autres.
(Permalink)