blog->settings->httppassword_crypt) { case "plaintext": $saltlen = -1; break; case "crypt_std_des": $saltlen = 2; $salt = ""; break; case "crypt_ext_des": $saltlen = 9; $salt = ""; break; case "crypt_md5": $saltlen = 12; $salt = '$1$'; break; case "crypt_blowfish": $saltlen = 16; $salt = '$2$'; break; default: return(false); } if ($saltlen > 0) { $salt .= substr( sha1($core->getNonce() . date('U')), 2, $saltlen - strlen($salt) ); $secret = crypt($secret,$salt); } return($secret); } if (!defined('DC_CONTEXT_ADMIN')) { return; } $crypt_algo = array( 'plaintext' => 'Aucun', ); if (CRYPT_STD_DES == 1) $crypt_algo['crypt_std_des'] = 'Crypt DES standard'; if (CRYPT_EXT_DES == 1) $crypt_algo['crypt_ext_des'] = 'Crypt DES étendu'; if (CRYPT_MD5 == 1) $crypt_algo['crypt_md5'] = 'Crypt MD5'; if (CRYPT_BLOWFISH == 1) $crypt_algo['crypt_blowfish'] = 'Crypt Blowfish'; $htpasswdfile = $core->blog->public_path . '/.htpasswd' ; $htp = file($htpasswdfile); if (!is_array($htp)) $htp = array(); sort($htp); $u = array(); $v = array(); foreach($htp as $ligne) { list($login, $pwd) = explode(':', $ligne, 2); $u[trim($login)] = trim($pwd); } unset($ftp); $txt = !empty($_POST['txt']) ? $_POST['txt'] : null; $action = !empty($_POST['httppasswordaction']) ? $_POST['httppasswordaction'] : null; $core->blog->settings->setNamespace('httppassword'); $debugmodefile = $core->blog->public_path . '/.debugmode'; switch($action) { case "mod": // traitement des donnees du formulaire foreach(preg_split('/\n/m',$txt) as $ligne) { if (strpos($ligne, ':') === false) $ligne = trim($ligne) . ':'; list($login, $pwd) = explode(':', $ligne); $v[trim($login)] = trim($pwd); } // Rechercher les suppressions foreach(array_keys($u) as $login) { if (!isset($v[$login])) unset($u[$login]); } // Rechercher les modifs + nouveaux foreach(array_keys($v) as $login) { if ($v[$login] != "") { $u[$login] = htpasswd_crypt( $core, $v[$login] ); if ($u[$login] === false) unset($u[$login]); } } $txt = ""; foreach(array_keys($u) as $login) $txt .= $login.":".$u[$login]."\r\n"; file_put_contents($htpasswdfile,$txt); break; case "desactive": case "active": $active = !$core->blog->settings->httppassword_active; $core->blog->settings->put( 'httppassword_active', $active, 'boolean' ); $core->blog->settings->httppassword_active = $active; break; case "cryptfunc": $httppassword_crypt = trim($_POST['cryptage']); if (in_array($httppassword_crypt,array_keys($crypt_algo))) { $core->blog->settings->put( 'httppassword_crypt', $httppassword_crypt, 'string' ); $core->blog->settings->httppassword_crypt = $httppassword_crypt; } break; case "auth_message": $message = htmlspecialchars($_POST['auth_message']); $core->blog->settings->put( 'httppassword_message', $message, 'string' ); $core->blog->settings->httppassword_message = $message; break; case "debugmode": if ($_POST['debugmode'] === "true") $debugmode = true; else { $debugmode = false; if (is_file($debugmodefile)) unlink($debugmodefile); } $core->blog->settings->put( 'httppassword_debugmode', $debugmode, 'boolean' ); $core->blog->settings->httppassword_debugmode = $debugmode; break; } $fic = $core->blog->public_path . '/.lastlogin'; if (is_file($fic)) { $httpPasswordLastLogin = unserialize(file_get_contents($fic)); if ($httpPasswordLastLogin === false) $httpPasswordLastLogin = array(); } else $httpPasswordLastLogin = array(); $form_block=' style="display: none;"'; if (strlen($core->blog->settings->httppassword_crypt) > 0) $form_block=""; ?> httpPassword

blog->name); ?> › httpPasswd

>

Activation du plugin

Pour utiliser cette extension, vous devez avoir les permissions pour écrire dans les fichiers :

blog->settings->httppassword_active) { ?>

Protection ACTIVÉE

Cliquer sur ce bouton pour désactiver la protection : formNonce() . form::hidden(array('p'),'httpPassword') . form::hidden(array('httppasswordaction'),'desactive'); ?>
utilisateur valide !

Cliquer sur ce bouton pour activer la protection : formNonce(). form::hidden(array('p'),'httpPassword'). form::hidden(array('httppasswordaction'),'active'); ?>

Sécurité des mots de passe

Pour modifier la fonction de "cryptage".

Attention, le changement de cryptage s'appliquera individuellement à la prochaine modification de chacun des comptes (crétion ou changement de mot de passe)

$algo_libelle) { echo 'blog->settings->httppassword_crypt == $algo_code) echo 'checked '; echo '/> ' . $algo_libelle . '
'; } ?> formNonce(). form::hidden(array('p'),'httpPassword'). form::hidden(array('httppasswordaction'),'cryptfunc'); ?>
>

Message d'authentification


formNonce(). form::hidden(array('p'),'httpPassword'). form::hidden(array('httppasswordaction'),'auth_message'); ?>

>


formNonce(). form::hidden(array('p'),'httpPassword'). form::hidden(array('httppasswordaction'),'mod'); ?>

Nous sommes le

0) { $i = 0; $logins = array_keys($httpPasswordLastLogin); sort($logins); foreach($logins as $login) echo '' . "\n"; } ?>
' . $login . '' . $httpPasswordLastLogin[$login] . '

Gestion des accès restreints

Ce plugin permet la gestion d'identifiants et de mots de passe pour limiter les accès à votre blog aux personnes que vous aurez choisies.

Le formulaire de droite présente la liste des utilisateurs existants (sans leur mot de passe)

Ajout d'un utilisateur

Pour ajouter un utilisateur, ajouter une nouvelle ligne de la forme :

login:motdepasse

Modifier un mot de passe

Pour modifier un mot de passe d'un utilisateur, ajouter à la suite de son identifiant (sur la même ligne) le texte suivant :

:motdepasse

Suppression d'un utilisateur

Pour supprimer un utilisateur, supprimer la ligne de l'utilisateur.

Le plugin a été développé pour fonctionner sur une installation "standard" de serveur Web (PHP en module Apache).

Certains hébergeurs utilisent des installations de PHP en mode CGI, parfois assez spécifiques et sur lesquelles ce plugin ne fonctionnera pas

Le mode debug permet de collecter des informations nécessaires au développeur pour adapter le plugin à des contextes particuliers.

Quand l'activer

MISE EN GARDE

le mode debug est dangeureux. Il est imperatif de le desactiver juste apres les tests.

Protocole à suivre

Le protocole est le suivant. Merci de le suivre pas à pas.

  1. Creer un compte "debug" dont le mot de passe est "test"
  2. Activer le plugin
  3. Activer le mode debug
  4. Faire un essai d'authentification
  5. Revenir sur cette page et copier le texte de la section "Resultats" dans un mail
  6. Joindre a ce mail le fichier .debugmode que vous trouverez dans le répertoire public du blog
  7. Envoyer le mail à dotclear@frederic.ple.name
  8. Desactiver le mode debug
  9. Supprimer le de compte "debug"
  10. Attendre patiemment la réponse du gentil développeur

Activer / Dédactiver le mode DEBUG

blog->settings->httppassword_debugmode === false) echo 'checked="checked" '; ?>/>Mode normal

blog->settings->httppassword_debugmode === true) echo 'checked="checked" '; ?>/>Mode Debug

formNonce(). form::hidden(array('p'),'httpPassword'). form::hidden(array('httppasswordaction'),'debugmode'); ?>

Résultats

\n"; echo "URL: " . $core->blog->url . "
\n"; echo "IP: " . $_SERVER['SERVER_ADDR'] . "
\n"; echo "DocumentRoot: " . $_SERVER['DOCUMENT_ROOT'] . "
\n"; echo "DC2 version: " . $core->getVersion('core') . "
\n"; echo "DC2 path: " ."-" . "
\n"; echo "Plugins path: " . realpath(dirname(__FILE__) . '/..') . "
\n"; echo "Public path: " . $core->blog->public_path . "
\n"; echo "* INFOS HTTPPASSWD *
\n"; echo "Version: " . $core->getVersion('httpPassword') . "
\n"; //echo ".... \$_SERVER ....
" . str_replace("\n","
\n",var_export($_SERVER,true)) . "
\n"; //echo ".... \$_ENV ....
" . str_replace("\n","
\n",var_export($_ENV,true)) . "
\n"; //echo ".... HTTP Apache HEADERS ....
" . str_replace("\n","
\n",var_export(apache_request_headers(),true)) . "
\n"; //echo str_replace("\n","
\n",htmlentities(file_get_contents($debugmodefile))); ?>

Plugin

Développeur

Remerciements

Plugin réalisé v.getVersion('httpPassword'); ?> par Frédéric PLÉ <dotclear@frederic.ple.name>