sebsauvage.net

Ce site n'est pas le site officiel.
C'est un blog automatisé qui réplique les articles automatiquement

Sécuriser le formulaire de login de DokuWiki avec TOTP

Monday 14 July 2014 at 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)

Source: http://sebsauvage.net/links/?YVNepA