Carnet Wiki

DaniCodingParty

10h : on commence par une présentation de la nouvelle organisation du code à la 1.9

Maintenant la fonction du fichier dépend du répertoire dans lequel il est situé.

ecrire/lang/spip_fr.php est un fichier de langue.

sous répertoires de ecrire/ :
/exec : lectures de pages par SPIP.
/action : actions sur des objets de spip (ex uploader, tourner une image)
/inc : librairires de fonctions,
/ base : accès à la base

à la racine :
/plugins/
squelettes/
formulaires/

formulaires/ doit être un sous-répertoire du dossier squelette/ ?

Appel d’une page de l’espace privé

on appelle toujours le fichier index.php
ex : .../ ?exec=truc
ceci va appelere la fonction exec_truc_dist() dans le fichier ecrire/exec/truc.php
puis appelle le fichier auth pour savoir si la personne est authentifiée et quel profil elle a. En changeant le fichier auth, on peut faire de nouvelles formes d’authentification.

Objectifs de la réorg : On peut changer radicalement le fonctionnement de spip en surchargeant à peu près tous les fichiers par des fichiers homonymes dans le répertoire squelette. tout ceci est écrit dans le ecrire/index.php

L’ordre pour discriminer est donné par le finding path, un peu comme dans un unix.

Pour trouver le fichier :
find_in_path(’exec/truc.php’)
find_in_path(’article.html’)
la fonction s’arrête dès qu’on en a trovué un. ordre de recherche : :
$dossier_squelettes, si défini, on peut en définir plusieurs, séparés par des «  : » :
squelettes/
plugins/ (c’est là ??)
./
formulaires/
dist/
ecrire/

Une autre fonction, qui remplace l’ancien include_ecrire est :
include_spip(’inc/charsets’)
cela cherche aussi les fichiers d’inclusion, s’il n’est pas déjà chargé, dans tout le chemin.

Autre appel : $f = include_fonction(truc, exec)
non seulement elle cherche le fichier ’truc’ dans le répertoire exec (grâce à include_spip) et le charge, mais aussi elle cherche et renvoie la fonction : exec_truc si elle existe ou la fonction exec_truc_dist

Appel d’une page de l’espace public

               hit 
Visiteur  ---->      URL         ----->  post rendu (tidy, surlignement, compression, caluls de phps, inclusions,...)
                  GET /Titre.html  -->                     ecrire/public.php     tout ecrire/public
                                     |                                                en particulier   ecrire/public/cache.php 
                                     |                                   
                       rendu         |      eval(cache)
                                     |                $chemin_cache
                                     |_  CACHE/a/titre_XXXX11122233(.gz)
                                     -->                    
                                    |             public/calcul
                                    |                                   
                   calcul           |
                                    |                
                                    |_  CACHE/skel/xxxxxxxx.php
                                     -->                    
                                    |   
                                    |                                   
                    compilation     |
                                     |                
                                     |_  squelette.html    squelette-1.html

C’est important d’optimiser ce processus, car c’est lui qui peu charger le site. D’où certaines complexités du codage.

Le compilateur

-  Analyse syntaxique est faite dans ecrire/public/phraser_html.php

— -> arbre de syntaxe abstraite. décrit dans ecrire/public/compilo-api.php

Deux passes de compilation :

-  1/ On compile d’abord en PHP en analysant le corps de chaque boucle :

  • aiguillage sur les entités syntaxiques,
  • compili-index.php est le fichier qui récapitule les champs à extraire pour chaque requête SQL à construire en passe 2.
  • le compilo construit un/des tableaux dont l’index donne le niveau d’imbrication des boucles.

-  2/ On construit les requêtes SQL après coup, car ce n’est qu’une fois parcouru la totalité du code que l’on peut mieux optimiser les requêtes SQL (en particulier quels champs appeler).

Thèmes de documentation


-  doc du code http://doc.spip.org/spip/
-  doc sécurité
-  doc de spip Zone -> http://trac.spip.org/spip/
-  doc plugins
-  libérez le memento des raccourcis spip !

Sécurité

Quesl pb sécurité ? Perte de données, modifications de données, modification de la présentation du site, redirection du site, usurpation de ressources, confidentialité de onnées privées, déni de sérvice.

Critères dtévaluation de ce qui est sécurisé : dépand de ceux qui analysent. Ex : script de redirection par injection dans les forums, peut être vu sur le contrôle des forums dans l’espace public, suffisant de le supprimer. Correspond aux besoins des usages de spip. Mais maintenant les analystes de sécurité s’intéressemtn à Spip.....

Plus on applique des filtres de sécurité (ex interdire le javascript), moins il y a des possibilités.

Injections de PHP ou de SQL : attaques plus graves. assez compliqué à trouver.... il faut être systématique et paranoïaque...
Pour la 1.9 -> 2.0 échapper par principe toutes les variables globales.

Injection de code SQL :
ex : « SELECT * FROM ... WHERE id_article = ». $id_article

le $id_article peut être « 1 OR [une commande SQL qui sera executée] »

aujourd’hui on fait : $id_article = intval($id_article) ; —> ce n’est pas assez systématique. Pas lisible.

Autre Possibilité : remplacer la commande ci-dessus par :
spip_query(« ___________________ WHERE id_article= %d », $id_article)
avec une syntaxe similaire au C : %d = nombres, %s=string, ...

« Pression darwinienne » des consultants sécurité. Ils osnt des prédateurs et on doit leur échapper.

Avertir via l’interface privée ? Genre firefox, ubuntu ou MacOS.

- Mise à jour :18 novembre 2007 à 17h40min