Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:galette [08/11/2009 13:45]
xavier
doc:galette [20/11/2014 13:02] (Version actuelle)
Ligne 1: Ligne 1:
 +====== Mini-audit de Galette ======
 +===== Généralités =====
 +
 +  * Galette : Gestionnaire d'​Adhérents en Ligne Extrêmement Tarabiscoté mais Tellement Efficace
 +  * Site officiel : [[http://​galette.tuxfamily.org]]
 +  * Version testée : 0.63.2 (06/​10/​2009)
 +===== C'est parti =====
 +==== Téléchargement et décompression de l'​archive ====
 +
 +Commençons par nous procurer le code de la version 0.63.2 :
 +
 +<code bash>
 +wget http://​download.gna.org/​galette/​galette-0.63.2.tgz
 +tar xzf galette-0.63.2.tgz
 +mv galette-0.63.2 galette
 +cd galette
 +</​code>​
 +
 +Observons les permissions des fichiers fournis :
 +<code bash>
 +find . -type f -perm /111 -print0 | xargs -0 /bin/ls -ald
 +</​code>​
 +
 +<​file>​
 +-rwxr-x--- 1 xavier xavier ​ 3795 déc.  14  2008 ./​docs/​CHANGES
 +-rwxr-x--- 1 xavier xavier ​ 3933 avril 20  2004 ./​docs/​UPGRADE-linux-fr
 +-rwxr-x--- 1 xavier xavier 10728 nov.  12  2006 ./​lang/​make_lang_l12n.py
 +-rwxr-x--- 1 xavier xavier ​ 2003 janv. 30  2006 ./​lang/​xgettext.py
 +-rwxr-x--- 1 xavier xavier ​ 1207 oct.   5 18:03 ./​picture.php
 +-rwxr-x--- 1 xavier xavier ​ 1307 sept. 10  2006 ./​public/​header.php
 +-rwxr-x--- 1 xavier xavier ​ 3983 févr. 14  2006 ./​templates/​default/​ajouter_contribution.tpl
 +-rwxr-x--- 1 xavier xavier ​ 1926 févr. 14  2006 ./​templates/​default/​ajouter_transaction.tpl
 +-rwxr-x--- 1 xavier xavier ​ 3848 nov.   ​5 ​ 2007 ./​templates/​default/​configurer_fiches.tpl
 +-rwxr-x--- 1 xavier xavier 10145 juin  13  2008 ./​templates/​default/​galette.css
 +-rwxr-x--- 1 xavier xavier ​ 7242 juin  16  2006 ./​templates/​default/​gestion_contributions.tpl
 +-rwxr-x--- 1 xavier xavier ​ 4746 janv. 31  2006 ./​templates/​default/​gestion_transactions.tpl
 +-rwxr-x--- 1 xavier xavier ​ 2605 juin  12  2008 ./​templates/​default/​mailing_adherents.tpl
 +-rwxr-x--- 1 xavier xavier 10692 oct.   6 20:56 ./​templates/​default/​preferences.tpl
 +-rwxr-x--- 1 xavier xavier ​ 1230 juin  16  2006 ./​templates/​default/​traduire_libelles.tpl
 +-rwxr-x--- 1 xavier xavier ​ 4322 oct.   6 06:25 ./​templates/​default/​voir_adherent.tpl
 +</​file>​
 +
 +Ces fichiers ont-ils vraiment besoin d'un flag exécutable ? Cela peut se comprendre pour les scripts utilitaires (*.py) mais beaucoup moins pour :
 +  * les templates (''​*.tpl''​)
 +  * les scripts PHP (''​*.php''​)
 +  * la documentation (''​docs/​*''​)
 +
 +Détail :
 +<​file>​
 +-rw-r----- ​ 1 xavier xavier ​  29 2004-07-13 22:11:55 .cvsignore
 +</​file>​
 +Fallait-il vraiment laisser cela dans le paquet final ?
 +==== Installation ====
 +<code bash>
 +vim docs/​INSTALL
 +</​code>​
 +
 +<​file>​
 +  Requis :  - Serveur web supportant PHP :
 +          Apache est une bonne option
 +          Galette a été testé sur Apache 1.3.22 et 1.3.26
 +        - PHP (Au moins la version 4.1)
 +          Galette a été testé avec PHP 4.1.2 et 4.3.3
 +        - Base de données (MySQL ou PostgreSQL)
 +          Galette a été testé sur MySQL 3.23.49 et PostgresSQL
 +          7.0.2 et 7.2.1 (version récente recommandée)
 +</​file>​
 +
 +Sans vouloir remettre en cause la pertinence des tests upstream, n'en serions-nous point à Apache 2.2, PHP 5.2.11, MySQL 5.1 et PostgreSQL 8.4.1 ?
 +
 +<​file>​
 +  Il vous faut maintenant créer un utilisateur et une base pour Galette sur
 +  votre serveur SQL (MySQL ou PostgreSQL). L'​utilisateur créé doit avoir
 +  tous les droits sur la base créée pour Galette.
 +
 +  Se reporter à la documentation de votre serveur SQL pour ce faire.
 +  Web.
 +</​file>​
 +
 +Pour ce test, nous choisirons le premier truc qui nous tombera sous la main, à savoir du MySQL.
 +Création des structures par un script d'​install => tous privilèges pour cet utilisateur sur cette base donc ? Bon, pourquoi pas...
 +<code mysql>
 +GRANT ALL PRIVILEGES ON `galette` . * TO '​galette_user'​@'​localhost'​ WITH GRANT OPTION ;
 +</​code>​
 +
 +<​file>​
 +  Connectez-vous ensuite au sous répertoire "​install"​ avec votre navigateur web.
 +  Dans notre exemple, il s'agit de http://​serveur/​galette-0.62/​install.
 +
 +  Vous n'avez plus qu'à vous laissez guider par les 10 étapes de l'​installeur
 +  Web.
 +</​file>​
 +
 +Rendons-nous joyeusement sur ''​https://​webdev/​~xavier/​galette/​install/​index.php''​ (oui, c'est comme ça chez moi), faisons une nouvelle installation francophone.
 +<​file>​Les permissions des fichiers sont correctes !</​file>​
 +Merci mod_suphp.
 +<​file>​
 +Si ce n'est pas déjà fait, créez une base de données et un utilisateur pour Galette.
 +Les droits nécessaires sont CREATE, DROP, DELETE, UPDATE, SELECT et INSERT.
 +</​file>​
 +$#%#$%$# Pouvait pas le dire plus tôt non ?
 +<code mysql>
 +REVOKE ALL PRIVILEGES ON galette. * FROM galette_user@localhost;​
 +REVOKE GRANT OPTION ON galette. * FROM galette_user@localhost;​
 +GRANT CREATE, DROP, DELETE, UPDATE, SELECT, INSERT ON galette.* TO galette_user@localhost;​
 +</​code>​
 +
 +Remplissons le formulaire pour la connexion à la base de données et passons à l'​étape suivante :
 +<​file>​Les droits d'​accès à la base sont corrects.</​file>​
 +Si c'est pas beau la vie. Créons les structures maintenant :
 +
 +<​file>​
 +DROP TABLE IF ...
 +CREATE TABLE galette_adherents ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_cotisations ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_transactions ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_statuts ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_types_cotisation ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_preferences ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_logs ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_field_types ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_dynamic_fields ...
 +DROP TABLE IF ...
 +CREATE TABLE `galette_pictures` ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_l10n ...
 +DROP TABLE IF ...
 +CREATE TABLE galette_tmppasswds ...
 +  (Les erreurs sur les opérations DROP et RENAME peuvent être ignorées)
 + Les tables ont été correctement créées.
 +</​file>​
 +Ah, c'​était pour ça le droit de DROP. Et euh, ... on peut enlever les droits CREATE et DROP maintenant ?
 +
 +<​file>​Veuillez choisir les paramètres du compte administrateur Galette</​file>​
 +Alors, utilisateur "​admin",​ mot de passe "​maman"​... ah nan, c'pas ça :p
 +
 +<​file>​
 +Fichier de configuration crée (includes/​config.inc.php)
 +Paramètres sauvegardés dans la base de données
 +</​file>​
 +
 +Voyons ce fichier immédiatement après installation :
 +<​file>​
 +-rw------- 1 xavier xavier 298 2009-11-07 19:25:45 includes/​config.inc.php
 +</​file>​
 +Les permissions sur ce fichier sont nickels. Est-ce volontaire ? D'​après le code PHP situé dans install/​index.php après création du fichier de configuration (ligne 959 et suivantes)... non. À priori, ça viendrait plutôt de la directive ''​umask=0077''​ dans la configuration suPHP de mon serveur. Dommage...
 +
 +<​file>​
 +  Une fois le script d'​installation terminé, et après avoir vérifié que tout
 +  fonctionne, il est fortement conseillé de supprimer le dossier install/.
 +</​file>​
 +Voilà un sage conseil.
 +
 +==== Utilisation ====
 +On arrive ensuite sur galette/​index.php,​ on s'​identifie et wouah ça fonctionne. Cherchons maintenant la petite bête...
 +==== Petite balade dans le code ====
 +
 +Dans index.php, à partir de la ligne 56 :
 +<code php>
 +        if (
 +            ($_POST["​login"​]==PREF_ADMIN_LOGIN && $_POST["​password"​]==PREF_ADMIN_PASS) ||
 +            ($_POST["​login"​]==PREF_ADMIN_LOGIN && md5($_POST["​password"​])==PREF_ADMIN_PASS)
 +            )
 +        {
 +            $_SESSION["​logged_status"​]=1;​
 +            $_SESSION["​admin_status"​]=1;​
 +            $_SESSION["​logged_username"​]=$_POST["​login"​];​
 +            $_SESSION["​logged_nom_adh"​]="​Admin";​
 +            dblog("​Login"​);​
 +        }
 +</​code>​
 +Intéressant : si on arrive à lire le MD5 du mot de passe de l'​administrateur,​ on n'a pas besoin de s'​emmerder à le bruteforcer ((au risque de tomber sur un mot de passe un tant soit peu solide, ou, pire encore, de s'​impatienter pendant que chauffage.localdomain utilise ses 133 MHz pour le bruteforce...)) pour s'​identifier avec. Les lignes 75 et 76 de ce même fichier nous indiquent que la même politique s'​appliquent à l'​identification des autres utilisateurs.
 +
 +Dans includes/​functions.inc.php :
 +<code php>
 +function txt_sqls($champ) {
 +  return "'"​.str_replace("'",​ "​\'",​ str_replace('​\\',​ '',​ $champ))."'";​
 +}
 +</​code>​
 +
 +Cette fonction, utilisée 6 fois dans le reste du code, paraît un peu légère par rapport à des fonctions plus spécialisées telles que :
 +  * [[http://​php.net/​manual/​fr/​function.mysql-real-escape-string.php|mysql_real_escape_string]]
 +  * [[http://​fr.php.net/​manual/​fr/​mysqli.real-escape-string.php|mysqli_real_escape_string]]
 +  * [[http://​www.php.net/​manual/​en/​function.pg-escape-string.php|pg_escape_string]]
 +
 +Observons maintenant les diverses bibliothèques fournies avec galette :
 +^  Lib                                                  ^  Version utilisée ​       ^ Dernière version ​         ^
 +| [[http://​adodb.sourceforge.net/​|ADOdb]] ​              | 4.92 (29/​08/​2006) ​      | 5.09a (26/​06/​2009) ​       |
 +| [[http://​www.potentialtech.com/​cms/​node/​6|phppdflib]] | Aucune idée. Vraiment. ​ | 2.9b2 (04/​05/​2004) :!:    |
 +| [[http://​www.smarty.net/​|Smarty]] ​                    | 2.6.5-dev (13/​09/​2004) ​ | 3.0b1 (31/​10/​2009) ​       |
 +
 +La plupart des autres fichiers font état d'un copyright 2003-2004.
  
Imprimer/exporter
Langages