Connect.php

  Le fichier de connexion à la base de données

SPIP enregistre la connexion à sa base de données dans un unique fichier de paramétrage, -un simple fichier de quelques lignes de texte en php- hautement confidentiel.

Car ce ficher contient le mot de passe d’accès à la base de données !

Article publié le 3 septembre 2013, et actualisé en novembre 2020

 
 
 
 
 
 
 
 
 
 
 
 
 
 

SPIP enregistre la quasi-totalité des paramétrages opérationnels et des données... en base de données ; encore faut-il y avoir accès au sein du code php !

 Ou se trouve ce fichier

SPIP utilise un petit fichier texte source php, appelé connect.php (autrefois inc-connect.php ), situé dans un répertoire spécifique, ./config protégé en acces Web ; il est important de restreindre tous les accès à ce fichier, car sa lecture permettrait à tout utilisateur Web (en particulier utilisateur d’un compte sur le même groupe de serveurs d’hébergement) de récupérer l’ensemble de vos données contenues en base de données : les articles, mais aussi les mots de passe, éléments de connexion et l’identité (mail) de tous vos utilisateurs....
A l’installation, SPIP crée donc automatiquement un fichier de protection au standard Apache, le .htaccess dans les sous-répertoires sensibles...

 Que contient-il ?

Ce fichier contient essentiellement les codes de connexion au service de base de données, c’est à dire (cf. Check-liste d’installation SPIP.) : le moteur de base de donnée , Host et Port / User et password, DBname et $prefix eventuel, voire des options [1].
Voici la version la plus simple de la fonction db_connect :
spip_connect_db('localhost','','root','','spip','mysql', 'spip','');

Vous en trouveriez la définition dans le fichier source ./ecrire/base/connect_sql.php :
function spip_connect_db($host, $port, $login, $pass, $db='', $type='mysql', $prefixe='', $auth='') qui vous permet de comprendre comment retrouver vos codes...

  1. $host : adresse IP ou nom du serveur de base de données [2],
  2. $port : un numéro de ’port’ TCP/IP pour atteindre le SGBD [3]
  3. $login : le nom utilisateur de connexion au SGBD
  4. $pass : un mot de passe [4]
  5. $db : le nom de la base de données utilisé
  6. $type : le type du moteur de SGBD : moteurs et documentations SQL / SPIP
  7. $prefixe : le prefix qui identifie le jeu de tables du SPIP...
  8. $auth : une zone d’options (voir ci-dessous pour la connexion LDAP)

 Connexion LDAP

Il est possible de demander à SPIP de vérifier la connexion des auteurs dans un annuaire AD/LDAP en précisant le paramètre supplémentaire dans le fichier de connexion SPIP.
spip_connect_db('localhost','','root','','user','mysql', 'spip','ldap');
Exemple : appel à un fichier ldap.php ci-dessous, déposé dans le même dossier pour compléter la configuration d’une connexion SPIP :

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS['ldap_base'] = 'OU=Utilisateurs,DC=domaine,DC=org';
$GLOBALS['ldap_link'] = @ldap_connect('ad.domaine.org','389');
@ldap_set_option($GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,'3');
@ldap_bind($GLOBALS['ldap_link'],'CN=User,OU=Utilisateurs,DC=domaine,DC=org','user');
$GLOBALS['ldap_champs'] = array('login' => array('sAMAccountName','uid','login','userid','cn','sn'),'nom' => 'cn','email' => 'mail','bio' => 'description',);

Le compte de login à LDAP utilisé -ici sans password- doit pouvoir accéder à l’ensemble des comptes concernés, spécifiés par la présence d’une valeur ’ldap’ dans le champ ’source’ de la table spip_auteurs.

 Cas de multi-bases

D’après Les possibilites multi-bases, il est possible d’utiliser plusieurs bases (même dans plusieurs moteurs de SGBD), en définissant plusieurs fichiers de connexion selon ce modèle ; on doit alors compléter la syntaxe de la table parcourue dans l’instruction principale de BOUCLE, en précédant le nom de la table du nom du fichier de connexion à la BdD correspondante... Les webmestres peuvent utiliser l’interface de SPIP [5] pour remplir ce fichier de façon interactive, ou le
Outre les ajouter dans le dossier protégé ./config/ (solution standard SPIP), il est aussi loisible de créer ces fichiers dans un sous-dossier ./connect/, pour utilisation dans un plugin [6]...

 LDAP

L’usage fréquent de SPIP en Intranet pour obtenir un Single-Sign-On (donc en lien avec un LDAP ou AD Windows : disponible en natif sous SPIP), oblige à apporter quelques petites précisions :
- tout auteur authentifiable par SPIP est forcément référencé dans la table SPIP_AUTEURS
Cela implique qu’il faut mettre en place un processus (automatique ou manuel) pour ’injecter’ les nouveaux utilisateurs définis depuis l’annuaire d’entreprise, dans la table SPIP des auteurs [7]
- celle-ci indique la source [8]à utiliser pour valider le mot de passe (’spip’ en interne natif, ou ’ldap’ pour joindre le LDAP d’entreprise).
- hormis le password (contrôlé en temps réel dans la source indiquée, les valeurs récupérée par SPIP depuis le LDAP, lors de la première connexion, ne sont pas mises à jour par la suite [9].

En revanche toutes autres associations relèvent de plugins complémentaires,pas toujours maintenus d’ailleurs, ou de solutions de contournement :
- le plugin LDAP++ pour rajouter des champs extraits du LDAP à la table AUTEURS
- le plugin Peupl_LDAP pour alimenter en masse la table AUTEURS à partir du LDAP d’origine (hélas à finaliser pour SPIP 3)

Donc la synchronisation n’est pas automatique..... Mais on peut imaginer quelques contournements :
- laisser l’inscription des nouveaux utilisateurs ouverte, mais en forçant la source de connexion à ’ladap’ (ce n’est pas encore automatisé)
c’est aux nouveaux auteurs de s’inscrire (un cron peut alors forcer la source vers le LDAP pour verrouiller)
- utiliser le plugin ImportCVS ou mieux CSV2auteurs, pour ajouter en masse des utilisateurs nouveaux, par extraction manuelle exportée depuis l’annuaire d’entreprise.


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1par exemple, source complémentaire de connexion LDAP

[2Ici,localhost désigne conventionnellement le serveur hébergeur de SPIP lui-même...

[3Optionnel, dépend du SGBD...

[4Aucun indiqué... à éviter !!

[5Voir Maintenance / Technique pour apercevoir le second bloc de cet ecran...

[6Astuce signalée par Marcimat : https://permalink.gmane.org/gmane.c...

[7En effet,la synchronisation des deux tables des identités (SPIP et LDAP) n’a lieu qu’au niveau du contrôle du mot de passe.

[8Pour faciliter la mise en œuvre intégrée à un annuaire d’entreprise, il pourrait s’avérer utile -si cela n’existe pas déjà- de rajouter une constante de Source à utiliser, genre _LDAP_ONLY_ pour forcer son usage !


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 3 septembre 2013, et actualisé en novembre 2020 .

Répondre à cet article