SlideShare une entreprise Scribd logo
Drupal : Best Worst current practice 
Par Frédéric G. Marand 
1/66 • Drupal : worst current practice • © OSInet
2/66 • Drupal : worst current practice • © OSInet 
Drupagora 
Paris le 14 novembre 2014
DRUPAGEDDON 
3/66 • Drupal : worst current practice • © OSInet
Introduction 
CAS D'ÉCOLE : DRUPAGEDDON 
LES DONNÉES 
https://www.drupal.org/SA-CORE-2014-005 
https://www.drupal.org/PSA-2014-003 
EN PRODUCTION : un site qui ne suit pas les bonnes pratiques a 
des difficultés à appliquer la MàJ rapidement 
• Combien de minutes avant de déployer sur votre site ? 
• Pourquoi si longtemps ? 
• Comment améliorer ? 
• Comment gérer les suites ? 
5/66 • Drupal : worst current practice • © OSInet
OSInet, 
UN REGARD SPÉCIFIQUE DANS 
L’ÉCOSYSTÈME DRUPAL 
6/66 • Drupal : worst current practice • © OSInet
Introduction 
CONTRIBUTEURS AUX PROJETS LIBRES 
7/66 • Drupal : worst current practice • © OSInet 
OSInet 
• Contributeurs Drupal depuis 
2005 
• 100 % de l’effectif est 
contributeur Drupal core 8 
• Autres contributions depuis 94 : 
Apache, Beego, Doctrine ODM, 
FirebirdSQL, MongoDB, 
Monolog, Samba, Silex… 
Frédéric G. Marand 
• (Co-)auteur et (co-)correcteur 
de plusieurs Security Advisories 
Drupal 
• Mainteneur Drupal 7 core XML-RPC 
• Mainteneur des contribs 
(References…) 
http://www.osinet.fr 
http://bit.ly/drupalosinet 
@OSInet 
http://drupal/u/fgm
Introduction 
ACTIVITÉ 
AUDIT CONSEIL 
LEAD DÉV ARCHITECTURE 
8/66 • Drupal : worst current practice • © OSInet
Introduction 
L’AUDIT TECHNIQUE DRUPAL 
Problèmes récurrents motivant les audits : 
9/66 • Drupal : worst current practice • © OSInet 
• Délais 
• Performance 
• Sécurité (réponse aux pénétrations) 
Les principales erreurs se répètent par ignorance : 
évitez-les
Introduction 
Quand les erreurs sont-elles 
constatées ? 
• Durant l’acquisition 
• Durant la réalisation 
• Durant le fonctionnement 
• Lors des visites anonymes 
• Lors de l'utilisation en connecté 
• Lors des opérations d'exploitation 
11/66 • Drupal : worst current practice • © OSInet
Introduction 
Quelles sont les erreurs les plus 
fréquentes ? 
• Délais (coûts) excessifs de réalisation 
• Régressions durant le développement de code 
• Coûts excessifs en infrastructure 
• Failles XSS et autres 
• Performance front insuffisante 
• Performance back insuffisante 
12/66 • Drupal : worst current practice • © OSInet
Introduction 
Qui est source d’erreurs ? 
• L’agence réalisatrice : mauvaises techniques de réalisation 
• Le studio graphique : maquettes ignorant les spécificités de 
build Drupal 
• L’hébergeur : ignorance des contraintes spécifiques de 
Drupal 
• La communauté Drupal et Open Source en général : peu de 
modules / thèmes (aucun ?) ont le même niveau d’exigence 
qualité que Drupal core 
• Le donneur d’ordres : analyse insuffisante des besoins, 
exigences inappropriées 
13/66 • Drupal : worst current practice • © OSInet
BUY 
15/66 • Drupal : worst current practice • © OSInet
Propriété intellectuelle 
Bloquer sur cession de propriété vs concession de licence 
• Définition du besoin 
• Certification de conformité (compliance) 
Ignorer l’impact de la viralité de la GPL sur les projets 
Drupal 
• Code source PHP, JS 
• Assets graphiques 
• Contenus 
• Look-and-feel 
16/66 • Drupal : worst current practice • © OSInet 
PS I am not 
a lawyer. 
Achat
Achat 
Le cas des appels d’offres publics 
• Difficulté à déclarer un marché infructueux même 
quand il devrait l’être 
• Ne pas être à jour sur le CCAG-PI / CCAG-TIC et 
les circulaires associées 
• Définition de l’objet du marché : site vs logiciel 
• Procédures de recette : spécification vs agilité 
17/66 • Drupal : worst current practice • © OSInet
Achat 
Choix des prestataires : principaux 
problèmes 
Agences de communication 
traditionnelles 
➔ Pas assez techniques pour 
les projets importants 
SSII (ESN) / SSLL (ENL) 
traditionnelles 
➔ Pas assez créatives pour 
les projets importants 
Spécialistes AMOA 
➔ Retour sur coût difficile à 
évaluer avant un premier 
échec 
Drupalshops 
➔ Pas assez disponibles, 
problèmes d’agrément 
dans les grands comptes, 
pas assez de 
connaissances autres 
18/66 • Drupal : worst current practice • © OSInet
19/66 • Drupal : worst current practice • © OSInet 
BUILD
20/66 • Drupal : worst current practice • © OSInet 
Maîtrise 
d'ouvrage
Build 
Ne pas savoir choisir sa version core : 6, 7, 
8 et son type de développement 
— Ces temps-ci… 
• Projets courts, à courte durée de vie (événementiel, one-off) : 
7, build basique 
• Projets plus longs, livrés début 2015, destinés à une refonte 
assez rapide : 7, build best practice (cf session Best Practice) 
• Projets plus longs, livrés mi-2015, destinés à un cycle de vie 
plus long : 8, build best practice 
• Évoluer les sites bloqués en 6 en mode découplé/composant. 
• Ne plus lancer de nouveaux projets en 6 
22/66 • Drupal : worst current practice • © OSInet
Build 
Ne pas savoir définir ses choix en matière 
de versions contrib 
« STABLE ONLY » : de plus en plus, dans les projets 
Drupal, « stable » est synonyme d'« obsolescent » 
⇒ coûts de maintenance adaptative 
« ANYTHING GOES » : risque que les constructeurs 
utilisent des modules expérimentaux, sans cycle de 
mise à jour disponible, voire non maintenus 
⇒ coûts de maintenances corrective et adaptative 
23/66 • Drupal : worst current practice • © OSInet
Build 
Et plus... 
• Ne pas réceptionner au fil de l’eau — pendant les 
itérations — pour intercepter rapidement les 
divergences (héritage du cycle en V) 
• Lors des réceptions d’itération, ne pas vérifier 
l’état de propreté du site (installation from scratch 
possible, absence de doublons fonctionnels, de 
traces de composants abandonnés...) 
24/66 • Drupal : worst current practice • © OSInet
25/66 • Drupal : worst current practice • © OSInet 
Processus de 
développement
Build 
Ne pas utiliser de gestionnaire de versions 
...DU TOUT (dernier en date observé : ce mois-ci !) 
...EFFICACEMENT : 
• code commenté en production au lieu d’être dans 
une révision 
• commentaires de commit inutilisables 
• commits trop espacés 
• pas de process de branching réfléchi (eg: git flow, 
github flow…) 
26/66 • Drupal : worst current practice • © OSInet
Build 
Créer un site par accumulation de 
modules contrib à portée limitée 
• Souci additionnel de qualité, fragilité, maintenance 
et MàJ 
• Sauf dans le cas de couverture à 100 % de la 
fonctionnalité, l’adaptation est à long terme plus 
coûteuse qu’un spécifique 
27/66 • Drupal : worst current practice • © OSInet
Build 
Créer un site par accumulation de 
changements, sans mécanisme de 
déploiement 
• Génération des fichiers 
• Drush Makefile / Composer : 
– Avantages: dépôt léger, MàJ permanente 
– Inconvénients : dépendance sur la disponibilité du réseau, non-compliance, 
MàJ permanente = risque de casse 
• Vendoring : 
– Avantages : disponibilité, rapidité, compliance 
– Inconvénients : défaut de MàJ automatique, dépôt lourd 
• Profil(s) d’installation Drupal 
• Chargement des données par migration (Migrate API) 
28/66 • Drupal : worst current practice • © OSInet
Build 
Hacker core/contrib 
• Rarement nécessaire : le plus souvent, c’est un 
manque de connaissances 
• Si nécessaire, committer les patches de façon 
reproductible (ex : drush makefile, répertoire 
patches …) 
29/66 • Drupal : worst current practice • © OSInet
Build 
Développer en PHP brut, sans passer par 
les API Drupal 
Exemples typiques, souvent sources de problèmes 
de sécurité : 
• API de bases de données natives au lieu de DB 
API/Schema API (injection SQL) 
• Accès aux superglobals, notamment $_GET (XSS) 
• Stockage de données privées dans $_COOKIE au 
lieu de $_SESSION (mascarade) 
• Actions de modification sur GET sans jeton ou 
formulaire non protégé (CSRF) 
30/66 • Drupal : worst current practice • © OSInet
Build 
Développer sans visibilité des erreurs au 
niveau maximal (error_reporting = -1) 
• Les notices et warnings s’accumulent durant le 
développement 
• En fin de projet, on constate des masses 
d’insertions dans dblog (2014 : 1500 insertions 
watchdog/seconde sur un site) et plus le temps de 
corriger donc on le désactive 
• Du coup, plus de suivi des vraies alertes 
31/66 • Drupal : worst current practice • © OSInet
Build 
Tests de recette et montée en charge 
Ne pas faire de TMC : tout 
va bien sur les postes de 
développement / recette 
Tester sur un 
environnement non iso-prod 
Tester depuis un poste 
local, notamment le serveur 
front 
Tester uniquement en 
anonyme 
33/66 • Drupal : worst current practice • © OSInet
Build 
Négliger la prise en compte des pratiques 
permettant l’internationalisation 
• Formats en dur (dates, nombres, monnaies) au lieu 
des API Drupal 
• Assemblage de chaînes traduites : 
exemple t($a) . t($b) 
• Chaînes de texte non traduites dans les templates 
et modules 
34/66 • Drupal : worst current practice • © OSInet
35/66 • Drupal : worst current practice • © OSInet 
OWN
36/66 • Drupal : worst current practice • © OSInet 
Hébergement
Confondre 
hébergement et 
infogérance 
Un site de production a 
besoin d’un infogérant 
(services système) et 
non simplement d’un 
hébergeur (location de 
matériel et 
infrastructure pour le 
ranger) 
• Backups 
• Configuration, MàJ et 
monitoring du serveur 
Web et ses modules, 
PHP et ses extensions, 
bases de données, 
serveurs de cache, 
serveur de file 
d’attentes, etc 
Own 
37/66 • Drupal : worst current practice • © OSInet
Déployer sans cache 
d’opcodes ou sans 
monitoring 
• PHP 5.3 ou 5.4 : APC, 
PHP 5.5 : Opcache 
• Monitoring : apc.php, 
ocp, opcache-status, 
38/66 • Drupal : worst current practice • © OSInet 
opcache-gui… 
Own
Déployer un 
Memcached sans 
comprendre sa 
configuration 
Own 
• settings.php : clusters, bins, préfixe... 
• extension, persistence, stratégie de 
hashing, ucp/tcp, text/binaire… 
• slab size 
• Monitoring: phpmemcacheadmin, 
memcache.php… 
• Un memcached mal réglé peut être 
beaucoup plus lent qu’un cache en base 
de données 
• Typique : 
• entrées > 1 Mo et slab size par 
défaut 
• multisites sans préfixe, 
• bins saturés, 
• mélange chaud/froid, gaspillage 
d’allocation 
• Documenté à partir de Drupal 7.33 
39/66 • Drupal : worst current practice • © OSInet
Déployer sur un 
système de fichiers 
inapproprié 
• Écritures synchrones : 
NFS système sans 
accélérateur 
• lstat() lents 
provoqués pour 
include_once -> tune 
realpath cache 
Own 
40/66 • Drupal : worst current practice • © OSInet
41/66 • Drupal : worst current practice • © OSInet 
Maintenance 
applicative : 
corrective et 
adaptative
Own 
Ne pas appliquer les MàJ de sécurité dans 
les délais 
Pourquoi ne pas les 
appliquer ? 
• Rigidités entre mainteneur et 
infogérant (procédures de 
déploiement) 
• Absence de réactivité du 
mainteneur 
• Difficultés de MàJ : 
typiquement conséquence 
des hacks core/contrib 
42/66 • Drupal : worst current practice • © OSInet
Own 
43/66 • Drupal : worst current practice • © OSInet
Travailler sans 
logger 
Own 
CAUSES TYPIQUES : 
• Désactivation de dblog 
faute d’avoir codé à 
error_reporting 
élevé, pour faire face aux 
masses de notices 
• Absence d’utilisation de 
syslog ou d’un mécanisme 
plus tolérant comme 
mongodb_watchdog 
44/66 • Drupal : worst current practice • © OSInet
FRONT : 
PERFORMANCE 
45/66 • Drupal : worst current practice • © OSInet
46/66 • Drupal : worst current practice • © OSInet 
Gestion de 
cache
Cache de pages 
interne 
• Cache interne désactivé 
(cache enabled : 
décoché) 
• Expiration trop courte : 
limitation à la scalabilité 
interne (liée à l’infra 
propre) et non externe 
(web scale) 
Front 
47/66 • Drupal : worst current practice • © OSInet
Pages non cachables • Écriture dans $_SESSION ou 
$_COOKIE pour les anonymes 
• démarrage de session qui 
marque la page non cachable 
• génération complète au hit 
suivant 
• grosse limite de scalabilité 
ramenant les anonymes à peu 
près au niveau des connectés 
• Utilisation de Varnish et/ou d’un 
CDN ou autre reverse proxy, 
mais émission par le code d’en-têtes 
48/66 • Drupal : worst current practice • © OSInet 
de non-cachabilité 
• suppression de la scalabilité 
externe 
• inutilité complète de ces outils 
Front
Désaccord sur la 
durée du cache 
• Technique → long 
éditorial → court 
• En l’absence d’une 
stratégie claire, forte 
probabilité d’une 
absence de prise en 
charge technique valide 
Front 
49/66 • Drupal : worst current practice • © OSInet
Front 
Agrégation des assets 
• Désactivée pour le CSS et/ou le JS 
• généralement, ce n’est pas un oubli, mais le 
prestataire indique que le site ne fonctionne pas 
avec : c’est le signe d’une erreur de réalisation, le 
plus souvent pour le code JS 
• Simple : il y a des mécanismes d’agrégation 
avancée plus efficaces, comme le module advagg, 
notamment si on utilise un CDN avec le module 
CDN 
50/66 • Drupal : worst current practice • © OSInet
Front 
Domain sharding 
• ABSENCE : 
• Les cookies sont émis par les clients sur les 
requêtes d’asset 
• Avec Varnish ou un autre reverse proxy : nécessite 
un VCL spécifique pour permettre de les ignorer et 
servir quand même de cache 
• EXCÈS : multiplication des requêtes DNS pour les 
clients 
51/66 • Drupal : worst current practice • © OSInet
Et tous les problèmes du back office pour les 
pages non cachées... 
52/66 • Drupal : worst current practice • © OSInet
BACK 
53/66 • Drupal : worst current practice • © OSInet
Back 
Requêtes sortantes durant le cycle de 
page 
• La durée des pages devient > au temps de réponse 
de la ressource externe et peut bloquer 
54/66 • Drupal : worst current practice • © OSInet 
• Core: 
• update (uniquement pour les admins et sur 
certaines pages) 
• aggregator, si poormanscron n’a pas été désactivé 
SOLUTION Consommer dans des scripts CLI lancés par 
cron ou, mieux, depuis un worker de messaging externe 
(ex : Beanstalkd)
Back 
Pic de charge inexpliqué après une 
longue durée sans problème 
TYPIQUE Utilisation d’un memcached avec l’erreur 
t($var) et la taille de cache_locale vient de dépasser 1 
Mo 
VARIANTE Sur un site en évolution, une nouvelle version est 
beaucoup plus lente en production qu'en développement 
CONFIRMATION Déboguer l’utilisation du cache avec 
Heisencache ou XHprof 
SOLUTION À court terme, augmenter la slab size, et 
rapidement corriger pour revenir à une taille normale 
56/66 • Drupal : worst current practice • © OSInet
57/66 • Drupal : worst current practice • © OSInet 
Site 
globalement 
lent sans pic 
spécifique
Back 
Cache de blocs désactivé 
CAUSE Typiquement un ou plusieurs modules de 
node_access 
CONFIRMATION Configurer stark pour n’avoir que 
le bloc contenu, basculer dessus momentanément, et 
comparer : il devrait être considérablement plus 
rapide 
SOLUTION 1 Repenser la logique de contrôle 
d’accès aux données 
SOLUTION 2 Introduire du cache dans chaque bloc 
58/66 • Drupal : worst current practice • © OSInet
Back 
Cache de données 
Too much of a 
good thing is 
wonderful 
PROBLÈME 1 Cache désactivé — courant sur les 
sites construits sur Views et Panels 
MALGRÉ le cache intégré de Views (durée) et Views 
Content Cache (invalidation) 
ET MALGRÉ Panels Hash Cache 
PROBLÈME 2 Utilisé à niveaux multiples 
⇒ Cache de données, puis de fragments, puis 
d’assemblages, puis de rendu, puis de blocs … = n aller-retours 
vers le serveur de cache là où un seul suffirait 
DIAGNOSTIC Heisencache (PerformanceSubscriber) 
59/66 • Drupal : worst current practice • © OSInet
Back 
Cache de variables toujours en MISS 
CAUSE TYPIQUE Un variable_set dans un hook du cycle 
de page : hook_boot / hook_init / hook_exit, function 
de shutdown, etc 
ORIGINE Confusion entre settings/config/state 
(formalisés en D8) 
DIAGNOSTIC var_dump(debug_backtrace(FALSE)) 
dans variable_set() et remonter la pile pour trouver le 
coupable 
VARIANTE Autres caches toujours en MISS 
SOLUTION GÉNÉRALE Heisencache (WriteSubscriber) 
60/66 • Drupal : worst current practice • © OSInet
Back 
Trop grand nombre de requêtes SQL 
DIAGNOSTIC devel.module ou utiliser les 
fonctions de trace de l’API DB 
SOLUTION Manuelle 
61/66 • Drupal : worst current practice • © OSInet
Back 
Trop grand nombre d’interventions de 
hook, notamment sur les nodes 
CAUSE TYPIQUE Trop de modules 
SOLUTION Réduire le nombre d’implémentations 
en repensant la logique fonctionnelle 
HACK hook_module_implements_alter() 
pour supprimer les situations connues comme ne 
pouvant donner lieu à une modification en pratique 
— difficile et fragile, mais résultats rapides 
62/66 • Drupal : worst current practice • © OSInet
Back 
Autres problèmes courants 
Opérations en boucle (node_load, node_view) au 
lieu d’opérations multiples 
(node_load_multiple) 
63/66 • Drupal : worst current practice • © OSInet
CONCLUSION 
64/66 • Drupal : worst current practice • © OSInet
Conclusion 
La clef : compétence 
• Compétence du maître d'ouvrage (MOA) : 
déléguer n’est pas ignorer ⇒ se faire bien 
entourer et suivre son projet 
65/66 • Drupal : worst current practice • © OSInet
Conclusion 
66/66 • Drupal : worst current practice • © OSInet
Conclusion 
La clef : compétence 
• Compétence du maître d'ouvrage (MOA) : 
déléguer n’est pas ignorer ⇒ se faire bien 
entourer et suivre son projet 
• Compétences internes ou AMOA 
• Compétence du maître d'oeuvre (MOE) 
67/66 • Drupal : worst current practice • © OSInet
Conclusion 
Mesurer pour agir 
• Savoir quoi mesurer 
• Savoir sur quoi agir 
selon la mesure 
68/66 • Drupal : worst current practice • © OSInet
Conclusion 
Adapter 
Adapter les pratiques à la taille du projet 
En-dessous de quelques milliers de visites/jour, 
le stack Drupal/LAMP pardonne à peu près tout 
sauf l’absence de MàJ. 
69/66 • Drupal : worst current practice • © OSInet
PASSEZ NOUS DIRE BONJOUR ! 
Frédéric G. Marand (fgm) Outi Munter (outi) 
www.osinet.fr 
70/66 • Drupal : worst current practice • © OSInet
71/66 • Drupal : worst current practice • © OSInet 
OSInet 
www.osinet.fr 
sales@osinet.fr

Contenu connexe

Tendances

Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
Ippon
 
Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, Android
Alphorm
 
Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...
Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...
Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...
Actency
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Pierre Ternon
 
Alphorm.com Support de la formation JavaScript les fondamentaux
Alphorm.com Support de la formation JavaScript les fondamentauxAlphorm.com Support de la formation JavaScript les fondamentaux
Alphorm.com Support de la formation JavaScript les fondamentaux
Alphorm
 
Alphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockage
Alphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockageAlphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockage
Alphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockage
Alphorm
 
Alphorm.com support-formation-v mware-v-center-6-ss
Alphorm.com support-formation-v mware-v-center-6-ssAlphorm.com support-formation-v mware-v-center-6-ss
Alphorm.com support-formation-v mware-v-center-6-ss
Alphorm
 
Alphorm.com Formation SCCM 2012 R2
Alphorm.com Formation SCCM 2012 R2Alphorm.com Formation SCCM 2012 R2
Alphorm.com Formation SCCM 2012 R2
Alphorm
 
Alphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités Web
Alphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités WebAlphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités Web
Alphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités Web
Alphorm
 
Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013
Artusamak
 
Alphorm.com Formation NodeJS, les fondamentaux
Alphorm.com Formation NodeJS, les fondamentauxAlphorm.com Formation NodeJS, les fondamentaux
Alphorm.com Formation NodeJS, les fondamentaux
Alphorm
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOps
antony_guilloteau
 
Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...
Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...
Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...
Alphorm
 

Tendances (13)

Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
 
Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, Android
 
Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...
Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...
Échapper à la refonte complète pour passer au Mobile avec le Témoignage de Bo...
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
 
Alphorm.com Support de la formation JavaScript les fondamentaux
Alphorm.com Support de la formation JavaScript les fondamentauxAlphorm.com Support de la formation JavaScript les fondamentaux
Alphorm.com Support de la formation JavaScript les fondamentaux
 
Alphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockage
Alphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockageAlphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockage
Alphorm.com Support de la Formation VMmware vSphere 6, La gestion du stockage
 
Alphorm.com support-formation-v mware-v-center-6-ss
Alphorm.com support-formation-v mware-v-center-6-ssAlphorm.com support-formation-v mware-v-center-6-ss
Alphorm.com support-formation-v mware-v-center-6-ss
 
Alphorm.com Formation SCCM 2012 R2
Alphorm.com Formation SCCM 2012 R2Alphorm.com Formation SCCM 2012 R2
Alphorm.com Formation SCCM 2012 R2
 
Alphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités Web
Alphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités WebAlphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités Web
Alphorm.com Support Formation Hacking & Sécurité Expert Vulnérabilités Web
 
Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013
 
Alphorm.com Formation NodeJS, les fondamentaux
Alphorm.com Formation NodeJS, les fondamentauxAlphorm.com Formation NodeJS, les fondamentaux
Alphorm.com Formation NodeJS, les fondamentaux
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOps
 
Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...
Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...
Alphorm.com Support de la Formation Red Hat Administrateur de Virtualization ...
 

En vedette

Drupal Site Audit - SFDUG
Drupal Site Audit - SFDUGDrupal Site Audit - SFDUG
Drupal Site Audit - SFDUG
Jon Peck
 
How to audit Drupal Sites for performance, content and best practices
How to audit Drupal Sites for performance, content and best practicesHow to audit Drupal Sites for performance, content and best practices
How to audit Drupal Sites for performance, content and best practices
Jon Peck
 
Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...
Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...
Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...Arfenia Sarkissian
 
Découverte de la Vendée
Découverte de la VendéeDécouverte de la Vendée
Découverte de la Vendée
menard44
 
Sug bordeaux 20110616
Sug bordeaux 20110616Sug bordeaux 20110616
Sug bordeaux 20110616
Philippe Launay
 
Diagnostic et stratégie touristique sur le territoire de La Porte du Hainaut
Diagnostic et stratégie touristique sur le territoire de La Porte du HainautDiagnostic et stratégie touristique sur le territoire de La Porte du Hainaut
Diagnostic et stratégie touristique sur le territoire de La Porte du HainautJonathan Loope
 
Etude CXP 2014
Etude CXP 2014Etude CXP 2014
Etude CXP 2014ESKER
 
Réussir un powerpoint
Réussir un powerpointRéussir un powerpoint
Réussir un powerpointPierre AVRIL
 
Internet france
Internet franceInternet france
Internet franceeletic
 
Cash Piscines Catalogue 2012 • Equiper sa piscine
Cash Piscines Catalogue 2012 • Equiper sa piscineCash Piscines Catalogue 2012 • Equiper sa piscine
Cash Piscines Catalogue 2012 • Equiper sa piscine
CashPiscines
 
Anatomie et personnalisation du board Pinterest
Anatomie et personnalisation du board PinterestAnatomie et personnalisation du board Pinterest
Anatomie et personnalisation du board Pinterest
TomateJoyeuse
 
Travaux bio
Travaux bioTravaux bio
Travaux bio
arlettaz
 
Marine H, Pauline
Marine H, PaulineMarine H, Pauline
Marine H, Paulineprofessora3
 
Les eco idées
Les eco idéesLes eco idées
Les eco idées
DLCCLPGC
 
Quelles sont les Menaces et Opportunités du QR Code ?
Quelles sont les Menaces et Opportunités du QR Code ?Quelles sont les Menaces et Opportunités du QR Code ?
Quelles sont les Menaces et Opportunités du QR Code ?
Quentin GARBAGE
 
Sug bordeaux 20120405v2
Sug bordeaux 20120405v2Sug bordeaux 20120405v2
Sug bordeaux 20120405v2
Philippe Launay
 
Fulles
FullesFulles

En vedette (20)

Drupal Site Audit - SFDUG
Drupal Site Audit - SFDUGDrupal Site Audit - SFDUG
Drupal Site Audit - SFDUG
 
How to audit Drupal Sites for performance, content and best practices
How to audit Drupal Sites for performance, content and best practicesHow to audit Drupal Sites for performance, content and best practices
How to audit Drupal Sites for performance, content and best practices
 
Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...
Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...
Islcollective worksheets elmentaire_a1_intermdiaire_b1_printermdiaire_a2_adul...
 
Découverte de la Vendée
Découverte de la VendéeDécouverte de la Vendée
Découverte de la Vendée
 
Sug bordeaux 20110616
Sug bordeaux 20110616Sug bordeaux 20110616
Sug bordeaux 20110616
 
Les grands faits historiques
Les grands faits historiquesLes grands faits historiques
Les grands faits historiques
 
Diagnostic et stratégie touristique sur le territoire de La Porte du Hainaut
Diagnostic et stratégie touristique sur le territoire de La Porte du HainautDiagnostic et stratégie touristique sur le territoire de La Porte du Hainaut
Diagnostic et stratégie touristique sur le territoire de La Porte du Hainaut
 
Etude CXP 2014
Etude CXP 2014Etude CXP 2014
Etude CXP 2014
 
Réussir un powerpoint
Réussir un powerpointRéussir un powerpoint
Réussir un powerpoint
 
Dépliants pays
Dépliants paysDépliants pays
Dépliants pays
 
Internet france
Internet franceInternet france
Internet france
 
Cash Piscines Catalogue 2012 • Equiper sa piscine
Cash Piscines Catalogue 2012 • Equiper sa piscineCash Piscines Catalogue 2012 • Equiper sa piscine
Cash Piscines Catalogue 2012 • Equiper sa piscine
 
Anatomie et personnalisation du board Pinterest
Anatomie et personnalisation du board PinterestAnatomie et personnalisation du board Pinterest
Anatomie et personnalisation du board Pinterest
 
Travaux bio
Travaux bioTravaux bio
Travaux bio
 
Marine H, Pauline
Marine H, PaulineMarine H, Pauline
Marine H, Pauline
 
Audition voyages 10e
Audition voyages 10eAudition voyages 10e
Audition voyages 10e
 
Les eco idées
Les eco idéesLes eco idées
Les eco idées
 
Quelles sont les Menaces et Opportunités du QR Code ?
Quelles sont les Menaces et Opportunités du QR Code ?Quelles sont les Menaces et Opportunités du QR Code ?
Quelles sont les Menaces et Opportunités du QR Code ?
 
Sug bordeaux 20120405v2
Sug bordeaux 20120405v2Sug bordeaux 20120405v2
Sug bordeaux 20120405v2
 
Fulles
FullesFulles
Fulles
 

Similaire à Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7

Alphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateurAlphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm
 
Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011
OSInet
 
Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012
Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012
Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012
Chipway
 
Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks
Hidora
 
Drupal & responsive
Drupal & responsiveDrupal & responsive
Drupal & responsive
Rezonova
 
Keynote drupagora 2015 7
Keynote drupagora 2015 7Keynote drupagora 2015 7
Keynote drupagora 2015 7
Core-Techs
 
Retour d'expérience : France Télévisions - Drupalcamp Paris 2013
Retour d'expérience : France Télévisions - Drupalcamp Paris 2013Retour d'expérience : France Télévisions - Drupalcamp Paris 2013
Retour d'expérience : France Télévisions - Drupalcamp Paris 2013
Artusamak
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
boulonvert
 
Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)
LaNetscouade
 
Global Training Day Paris - Drupal 8
Global Training Day Paris - Drupal 8Global Training Day Paris - Drupal 8
Global Training Day Paris - Drupal 8
Romain Jarraud
 
Solutions Web « prêtes à porter » avec WordPress
Solutions Web « prêtes à porter » avec WordPressSolutions Web « prêtes à porter » avec WordPress
Solutions Web « prêtes à porter » avec WordPress
Stéphane Plante
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
ekino
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
Content Square
 
Drupal 8
Drupal 8Drupal 8
Drupal 8
qdelance
 
Les particularités de Drupal en gestion de projet: une histoire d’amour et de...
Les particularités de Drupal en gestion de projet: une histoire d’amour et de...Les particularités de Drupal en gestion de projet: une histoire d’amour et de...
Les particularités de Drupal en gestion de projet: une histoire d’amour et de...
Symetris
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse Faure
Paris Container Day
 
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Modern Data Stack France
 
Afterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et DockerAfterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et Docker
Julien Chable
 
Comment contribuer à Drupal
Comment contribuer à DrupalComment contribuer à Drupal
Comment contribuer à Drupal
Artusamak
 
meetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetes
meetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetesmeetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetes
meetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetes
Frederic Leger
 

Similaire à Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7 (20)

Alphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateurAlphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateur
 
Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011
 
Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012
Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012
Bonnes pratiques-drupal-dans-cahier-des-charges conference-dc-lyon-2012
 
Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks
 
Drupal & responsive
Drupal & responsiveDrupal & responsive
Drupal & responsive
 
Keynote drupagora 2015 7
Keynote drupagora 2015 7Keynote drupagora 2015 7
Keynote drupagora 2015 7
 
Retour d'expérience : France Télévisions - Drupalcamp Paris 2013
Retour d'expérience : France Télévisions - Drupalcamp Paris 2013Retour d'expérience : France Télévisions - Drupalcamp Paris 2013
Retour d'expérience : France Télévisions - Drupalcamp Paris 2013
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)
 
Global Training Day Paris - Drupal 8
Global Training Day Paris - Drupal 8Global Training Day Paris - Drupal 8
Global Training Day Paris - Drupal 8
 
Solutions Web « prêtes à porter » avec WordPress
Solutions Web « prêtes à porter » avec WordPressSolutions Web « prêtes à porter » avec WordPress
Solutions Web « prêtes à porter » avec WordPress
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
 
Drupal 8
Drupal 8Drupal 8
Drupal 8
 
Les particularités de Drupal en gestion de projet: une histoire d’amour et de...
Les particularités de Drupal en gestion de projet: une histoire d’amour et de...Les particularités de Drupal en gestion de projet: une histoire d’amour et de...
Les particularités de Drupal en gestion de projet: une histoire d’amour et de...
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse Faure
 
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
 
Afterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et DockerAfterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et Docker
 
Comment contribuer à Drupal
Comment contribuer à DrupalComment contribuer à Drupal
Comment contribuer à Drupal
 
meetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetes
meetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetesmeetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetes
meetup - Workflow complet de CI/CD pour les geeks avec gitlab et kubernetes
 

Plus de OSInet

Interface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TViewInterface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TView
OSInet
 
Scaling up and accelerating Drupal 8 with NoSQL
Scaling up and accelerating Drupal 8 with NoSQLScaling up and accelerating Drupal 8 with NoSQL
Scaling up and accelerating Drupal 8 with NoSQL
OSInet
 
Mon site web est hacké ! Que faire ?
Mon site web est hacké ! Que faire ?Mon site web est hacké ! Que faire ?
Mon site web est hacké ! Que faire ?
OSInet
 
Faster Drupal sites using Queue API
Faster Drupal sites using Queue APIFaster Drupal sites using Queue API
Faster Drupal sites using Queue API
OSInet
 
Life after the hack
Life after the hackLife after the hack
Life after the hack
OSInet
 
Delayed operations with queues for website performance
Delayed operations with queues for website performanceDelayed operations with queues for website performance
Delayed operations with queues for website performance
OSInet
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisés
OSInet
 
Cache speedup with Heisencache for Drupal 7 and Drupal 8
Cache speedup with Heisencache for Drupal 7 and Drupal 8Cache speedup with Heisencache for Drupal 7 and Drupal 8
Cache speedup with Heisencache for Drupal 7 and Drupal 8
OSInet
 
Le groupe PHP-FIG et les standards PSR
Le groupe  PHP-FIG et les standards PSRLe groupe  PHP-FIG et les standards PSR
Le groupe PHP-FIG et les standards PSR
OSInet
 
Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8
OSInet
 
Utiliser drupal
Utiliser drupalUtiliser drupal
Utiliser drupal
OSInet
 
Equipe drupal
Equipe drupalEquipe drupal
Equipe drupalOSInet
 
Pourquoi choisir un CMS Open Source ?
Pourquoi choisir un CMS Open Source ?Pourquoi choisir un CMS Open Source ?
Pourquoi choisir un CMS Open Source ?OSInet
 
Drupal Views development
Drupal Views developmentDrupal Views development
Drupal Views development
OSInet
 

Plus de OSInet (14)

Interface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TViewInterface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TView
 
Scaling up and accelerating Drupal 8 with NoSQL
Scaling up and accelerating Drupal 8 with NoSQLScaling up and accelerating Drupal 8 with NoSQL
Scaling up and accelerating Drupal 8 with NoSQL
 
Mon site web est hacké ! Que faire ?
Mon site web est hacké ! Que faire ?Mon site web est hacké ! Que faire ?
Mon site web est hacké ! Que faire ?
 
Faster Drupal sites using Queue API
Faster Drupal sites using Queue APIFaster Drupal sites using Queue API
Faster Drupal sites using Queue API
 
Life after the hack
Life after the hackLife after the hack
Life after the hack
 
Delayed operations with queues for website performance
Delayed operations with queues for website performanceDelayed operations with queues for website performance
Delayed operations with queues for website performance
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisés
 
Cache speedup with Heisencache for Drupal 7 and Drupal 8
Cache speedup with Heisencache for Drupal 7 and Drupal 8Cache speedup with Heisencache for Drupal 7 and Drupal 8
Cache speedup with Heisencache for Drupal 7 and Drupal 8
 
Le groupe PHP-FIG et les standards PSR
Le groupe  PHP-FIG et les standards PSRLe groupe  PHP-FIG et les standards PSR
Le groupe PHP-FIG et les standards PSR
 
Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8Les blocs Drupal de drop.org à Drupal 8
Les blocs Drupal de drop.org à Drupal 8
 
Utiliser drupal
Utiliser drupalUtiliser drupal
Utiliser drupal
 
Equipe drupal
Equipe drupalEquipe drupal
Equipe drupal
 
Pourquoi choisir un CMS Open Source ?
Pourquoi choisir un CMS Open Source ?Pourquoi choisir un CMS Open Source ?
Pourquoi choisir un CMS Open Source ?
 
Drupal Views development
Drupal Views developmentDrupal Views development
Drupal Views development
 

Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7

  • 1. Drupal : Best Worst current practice Par Frédéric G. Marand 1/66 • Drupal : worst current practice • © OSInet
  • 2. 2/66 • Drupal : worst current practice • © OSInet Drupagora Paris le 14 novembre 2014
  • 3. DRUPAGEDDON 3/66 • Drupal : worst current practice • © OSInet
  • 4. Introduction CAS D'ÉCOLE : DRUPAGEDDON LES DONNÉES https://www.drupal.org/SA-CORE-2014-005 https://www.drupal.org/PSA-2014-003 EN PRODUCTION : un site qui ne suit pas les bonnes pratiques a des difficultés à appliquer la MàJ rapidement • Combien de minutes avant de déployer sur votre site ? • Pourquoi si longtemps ? • Comment améliorer ? • Comment gérer les suites ? 5/66 • Drupal : worst current practice • © OSInet
  • 5. OSInet, UN REGARD SPÉCIFIQUE DANS L’ÉCOSYSTÈME DRUPAL 6/66 • Drupal : worst current practice • © OSInet
  • 6. Introduction CONTRIBUTEURS AUX PROJETS LIBRES 7/66 • Drupal : worst current practice • © OSInet OSInet • Contributeurs Drupal depuis 2005 • 100 % de l’effectif est contributeur Drupal core 8 • Autres contributions depuis 94 : Apache, Beego, Doctrine ODM, FirebirdSQL, MongoDB, Monolog, Samba, Silex… Frédéric G. Marand • (Co-)auteur et (co-)correcteur de plusieurs Security Advisories Drupal • Mainteneur Drupal 7 core XML-RPC • Mainteneur des contribs (References…) http://www.osinet.fr http://bit.ly/drupalosinet @OSInet http://drupal/u/fgm
  • 7. Introduction ACTIVITÉ AUDIT CONSEIL LEAD DÉV ARCHITECTURE 8/66 • Drupal : worst current practice • © OSInet
  • 8. Introduction L’AUDIT TECHNIQUE DRUPAL Problèmes récurrents motivant les audits : 9/66 • Drupal : worst current practice • © OSInet • Délais • Performance • Sécurité (réponse aux pénétrations) Les principales erreurs se répètent par ignorance : évitez-les
  • 9. Introduction Quand les erreurs sont-elles constatées ? • Durant l’acquisition • Durant la réalisation • Durant le fonctionnement • Lors des visites anonymes • Lors de l'utilisation en connecté • Lors des opérations d'exploitation 11/66 • Drupal : worst current practice • © OSInet
  • 10. Introduction Quelles sont les erreurs les plus fréquentes ? • Délais (coûts) excessifs de réalisation • Régressions durant le développement de code • Coûts excessifs en infrastructure • Failles XSS et autres • Performance front insuffisante • Performance back insuffisante 12/66 • Drupal : worst current practice • © OSInet
  • 11. Introduction Qui est source d’erreurs ? • L’agence réalisatrice : mauvaises techniques de réalisation • Le studio graphique : maquettes ignorant les spécificités de build Drupal • L’hébergeur : ignorance des contraintes spécifiques de Drupal • La communauté Drupal et Open Source en général : peu de modules / thèmes (aucun ?) ont le même niveau d’exigence qualité que Drupal core • Le donneur d’ordres : analyse insuffisante des besoins, exigences inappropriées 13/66 • Drupal : worst current practice • © OSInet
  • 12. BUY 15/66 • Drupal : worst current practice • © OSInet
  • 13. Propriété intellectuelle Bloquer sur cession de propriété vs concession de licence • Définition du besoin • Certification de conformité (compliance) Ignorer l’impact de la viralité de la GPL sur les projets Drupal • Code source PHP, JS • Assets graphiques • Contenus • Look-and-feel 16/66 • Drupal : worst current practice • © OSInet PS I am not a lawyer. Achat
  • 14. Achat Le cas des appels d’offres publics • Difficulté à déclarer un marché infructueux même quand il devrait l’être • Ne pas être à jour sur le CCAG-PI / CCAG-TIC et les circulaires associées • Définition de l’objet du marché : site vs logiciel • Procédures de recette : spécification vs agilité 17/66 • Drupal : worst current practice • © OSInet
  • 15. Achat Choix des prestataires : principaux problèmes Agences de communication traditionnelles ➔ Pas assez techniques pour les projets importants SSII (ESN) / SSLL (ENL) traditionnelles ➔ Pas assez créatives pour les projets importants Spécialistes AMOA ➔ Retour sur coût difficile à évaluer avant un premier échec Drupalshops ➔ Pas assez disponibles, problèmes d’agrément dans les grands comptes, pas assez de connaissances autres 18/66 • Drupal : worst current practice • © OSInet
  • 16. 19/66 • Drupal : worst current practice • © OSInet BUILD
  • 17. 20/66 • Drupal : worst current practice • © OSInet Maîtrise d'ouvrage
  • 18. Build Ne pas savoir choisir sa version core : 6, 7, 8 et son type de développement — Ces temps-ci… • Projets courts, à courte durée de vie (événementiel, one-off) : 7, build basique • Projets plus longs, livrés début 2015, destinés à une refonte assez rapide : 7, build best practice (cf session Best Practice) • Projets plus longs, livrés mi-2015, destinés à un cycle de vie plus long : 8, build best practice • Évoluer les sites bloqués en 6 en mode découplé/composant. • Ne plus lancer de nouveaux projets en 6 22/66 • Drupal : worst current practice • © OSInet
  • 19. Build Ne pas savoir définir ses choix en matière de versions contrib « STABLE ONLY » : de plus en plus, dans les projets Drupal, « stable » est synonyme d'« obsolescent » ⇒ coûts de maintenance adaptative « ANYTHING GOES » : risque que les constructeurs utilisent des modules expérimentaux, sans cycle de mise à jour disponible, voire non maintenus ⇒ coûts de maintenances corrective et adaptative 23/66 • Drupal : worst current practice • © OSInet
  • 20. Build Et plus... • Ne pas réceptionner au fil de l’eau — pendant les itérations — pour intercepter rapidement les divergences (héritage du cycle en V) • Lors des réceptions d’itération, ne pas vérifier l’état de propreté du site (installation from scratch possible, absence de doublons fonctionnels, de traces de composants abandonnés...) 24/66 • Drupal : worst current practice • © OSInet
  • 21. 25/66 • Drupal : worst current practice • © OSInet Processus de développement
  • 22. Build Ne pas utiliser de gestionnaire de versions ...DU TOUT (dernier en date observé : ce mois-ci !) ...EFFICACEMENT : • code commenté en production au lieu d’être dans une révision • commentaires de commit inutilisables • commits trop espacés • pas de process de branching réfléchi (eg: git flow, github flow…) 26/66 • Drupal : worst current practice • © OSInet
  • 23. Build Créer un site par accumulation de modules contrib à portée limitée • Souci additionnel de qualité, fragilité, maintenance et MàJ • Sauf dans le cas de couverture à 100 % de la fonctionnalité, l’adaptation est à long terme plus coûteuse qu’un spécifique 27/66 • Drupal : worst current practice • © OSInet
  • 24. Build Créer un site par accumulation de changements, sans mécanisme de déploiement • Génération des fichiers • Drush Makefile / Composer : – Avantages: dépôt léger, MàJ permanente – Inconvénients : dépendance sur la disponibilité du réseau, non-compliance, MàJ permanente = risque de casse • Vendoring : – Avantages : disponibilité, rapidité, compliance – Inconvénients : défaut de MàJ automatique, dépôt lourd • Profil(s) d’installation Drupal • Chargement des données par migration (Migrate API) 28/66 • Drupal : worst current practice • © OSInet
  • 25. Build Hacker core/contrib • Rarement nécessaire : le plus souvent, c’est un manque de connaissances • Si nécessaire, committer les patches de façon reproductible (ex : drush makefile, répertoire patches …) 29/66 • Drupal : worst current practice • © OSInet
  • 26. Build Développer en PHP brut, sans passer par les API Drupal Exemples typiques, souvent sources de problèmes de sécurité : • API de bases de données natives au lieu de DB API/Schema API (injection SQL) • Accès aux superglobals, notamment $_GET (XSS) • Stockage de données privées dans $_COOKIE au lieu de $_SESSION (mascarade) • Actions de modification sur GET sans jeton ou formulaire non protégé (CSRF) 30/66 • Drupal : worst current practice • © OSInet
  • 27. Build Développer sans visibilité des erreurs au niveau maximal (error_reporting = -1) • Les notices et warnings s’accumulent durant le développement • En fin de projet, on constate des masses d’insertions dans dblog (2014 : 1500 insertions watchdog/seconde sur un site) et plus le temps de corriger donc on le désactive • Du coup, plus de suivi des vraies alertes 31/66 • Drupal : worst current practice • © OSInet
  • 28. Build Tests de recette et montée en charge Ne pas faire de TMC : tout va bien sur les postes de développement / recette Tester sur un environnement non iso-prod Tester depuis un poste local, notamment le serveur front Tester uniquement en anonyme 33/66 • Drupal : worst current practice • © OSInet
  • 29. Build Négliger la prise en compte des pratiques permettant l’internationalisation • Formats en dur (dates, nombres, monnaies) au lieu des API Drupal • Assemblage de chaînes traduites : exemple t($a) . t($b) • Chaînes de texte non traduites dans les templates et modules 34/66 • Drupal : worst current practice • © OSInet
  • 30. 35/66 • Drupal : worst current practice • © OSInet OWN
  • 31. 36/66 • Drupal : worst current practice • © OSInet Hébergement
  • 32. Confondre hébergement et infogérance Un site de production a besoin d’un infogérant (services système) et non simplement d’un hébergeur (location de matériel et infrastructure pour le ranger) • Backups • Configuration, MàJ et monitoring du serveur Web et ses modules, PHP et ses extensions, bases de données, serveurs de cache, serveur de file d’attentes, etc Own 37/66 • Drupal : worst current practice • © OSInet
  • 33. Déployer sans cache d’opcodes ou sans monitoring • PHP 5.3 ou 5.4 : APC, PHP 5.5 : Opcache • Monitoring : apc.php, ocp, opcache-status, 38/66 • Drupal : worst current practice • © OSInet opcache-gui… Own
  • 34. Déployer un Memcached sans comprendre sa configuration Own • settings.php : clusters, bins, préfixe... • extension, persistence, stratégie de hashing, ucp/tcp, text/binaire… • slab size • Monitoring: phpmemcacheadmin, memcache.php… • Un memcached mal réglé peut être beaucoup plus lent qu’un cache en base de données • Typique : • entrées > 1 Mo et slab size par défaut • multisites sans préfixe, • bins saturés, • mélange chaud/froid, gaspillage d’allocation • Documenté à partir de Drupal 7.33 39/66 • Drupal : worst current practice • © OSInet
  • 35. Déployer sur un système de fichiers inapproprié • Écritures synchrones : NFS système sans accélérateur • lstat() lents provoqués pour include_once -> tune realpath cache Own 40/66 • Drupal : worst current practice • © OSInet
  • 36. 41/66 • Drupal : worst current practice • © OSInet Maintenance applicative : corrective et adaptative
  • 37. Own Ne pas appliquer les MàJ de sécurité dans les délais Pourquoi ne pas les appliquer ? • Rigidités entre mainteneur et infogérant (procédures de déploiement) • Absence de réactivité du mainteneur • Difficultés de MàJ : typiquement conséquence des hacks core/contrib 42/66 • Drupal : worst current practice • © OSInet
  • 38. Own 43/66 • Drupal : worst current practice • © OSInet
  • 39. Travailler sans logger Own CAUSES TYPIQUES : • Désactivation de dblog faute d’avoir codé à error_reporting élevé, pour faire face aux masses de notices • Absence d’utilisation de syslog ou d’un mécanisme plus tolérant comme mongodb_watchdog 44/66 • Drupal : worst current practice • © OSInet
  • 40. FRONT : PERFORMANCE 45/66 • Drupal : worst current practice • © OSInet
  • 41. 46/66 • Drupal : worst current practice • © OSInet Gestion de cache
  • 42. Cache de pages interne • Cache interne désactivé (cache enabled : décoché) • Expiration trop courte : limitation à la scalabilité interne (liée à l’infra propre) et non externe (web scale) Front 47/66 • Drupal : worst current practice • © OSInet
  • 43. Pages non cachables • Écriture dans $_SESSION ou $_COOKIE pour les anonymes • démarrage de session qui marque la page non cachable • génération complète au hit suivant • grosse limite de scalabilité ramenant les anonymes à peu près au niveau des connectés • Utilisation de Varnish et/ou d’un CDN ou autre reverse proxy, mais émission par le code d’en-têtes 48/66 • Drupal : worst current practice • © OSInet de non-cachabilité • suppression de la scalabilité externe • inutilité complète de ces outils Front
  • 44. Désaccord sur la durée du cache • Technique → long éditorial → court • En l’absence d’une stratégie claire, forte probabilité d’une absence de prise en charge technique valide Front 49/66 • Drupal : worst current practice • © OSInet
  • 45. Front Agrégation des assets • Désactivée pour le CSS et/ou le JS • généralement, ce n’est pas un oubli, mais le prestataire indique que le site ne fonctionne pas avec : c’est le signe d’une erreur de réalisation, le plus souvent pour le code JS • Simple : il y a des mécanismes d’agrégation avancée plus efficaces, comme le module advagg, notamment si on utilise un CDN avec le module CDN 50/66 • Drupal : worst current practice • © OSInet
  • 46. Front Domain sharding • ABSENCE : • Les cookies sont émis par les clients sur les requêtes d’asset • Avec Varnish ou un autre reverse proxy : nécessite un VCL spécifique pour permettre de les ignorer et servir quand même de cache • EXCÈS : multiplication des requêtes DNS pour les clients 51/66 • Drupal : worst current practice • © OSInet
  • 47. Et tous les problèmes du back office pour les pages non cachées... 52/66 • Drupal : worst current practice • © OSInet
  • 48. BACK 53/66 • Drupal : worst current practice • © OSInet
  • 49. Back Requêtes sortantes durant le cycle de page • La durée des pages devient > au temps de réponse de la ressource externe et peut bloquer 54/66 • Drupal : worst current practice • © OSInet • Core: • update (uniquement pour les admins et sur certaines pages) • aggregator, si poormanscron n’a pas été désactivé SOLUTION Consommer dans des scripts CLI lancés par cron ou, mieux, depuis un worker de messaging externe (ex : Beanstalkd)
  • 50. Back Pic de charge inexpliqué après une longue durée sans problème TYPIQUE Utilisation d’un memcached avec l’erreur t($var) et la taille de cache_locale vient de dépasser 1 Mo VARIANTE Sur un site en évolution, une nouvelle version est beaucoup plus lente en production qu'en développement CONFIRMATION Déboguer l’utilisation du cache avec Heisencache ou XHprof SOLUTION À court terme, augmenter la slab size, et rapidement corriger pour revenir à une taille normale 56/66 • Drupal : worst current practice • © OSInet
  • 51. 57/66 • Drupal : worst current practice • © OSInet Site globalement lent sans pic spécifique
  • 52. Back Cache de blocs désactivé CAUSE Typiquement un ou plusieurs modules de node_access CONFIRMATION Configurer stark pour n’avoir que le bloc contenu, basculer dessus momentanément, et comparer : il devrait être considérablement plus rapide SOLUTION 1 Repenser la logique de contrôle d’accès aux données SOLUTION 2 Introduire du cache dans chaque bloc 58/66 • Drupal : worst current practice • © OSInet
  • 53. Back Cache de données Too much of a good thing is wonderful PROBLÈME 1 Cache désactivé — courant sur les sites construits sur Views et Panels MALGRÉ le cache intégré de Views (durée) et Views Content Cache (invalidation) ET MALGRÉ Panels Hash Cache PROBLÈME 2 Utilisé à niveaux multiples ⇒ Cache de données, puis de fragments, puis d’assemblages, puis de rendu, puis de blocs … = n aller-retours vers le serveur de cache là où un seul suffirait DIAGNOSTIC Heisencache (PerformanceSubscriber) 59/66 • Drupal : worst current practice • © OSInet
  • 54. Back Cache de variables toujours en MISS CAUSE TYPIQUE Un variable_set dans un hook du cycle de page : hook_boot / hook_init / hook_exit, function de shutdown, etc ORIGINE Confusion entre settings/config/state (formalisés en D8) DIAGNOSTIC var_dump(debug_backtrace(FALSE)) dans variable_set() et remonter la pile pour trouver le coupable VARIANTE Autres caches toujours en MISS SOLUTION GÉNÉRALE Heisencache (WriteSubscriber) 60/66 • Drupal : worst current practice • © OSInet
  • 55. Back Trop grand nombre de requêtes SQL DIAGNOSTIC devel.module ou utiliser les fonctions de trace de l’API DB SOLUTION Manuelle 61/66 • Drupal : worst current practice • © OSInet
  • 56. Back Trop grand nombre d’interventions de hook, notamment sur les nodes CAUSE TYPIQUE Trop de modules SOLUTION Réduire le nombre d’implémentations en repensant la logique fonctionnelle HACK hook_module_implements_alter() pour supprimer les situations connues comme ne pouvant donner lieu à une modification en pratique — difficile et fragile, mais résultats rapides 62/66 • Drupal : worst current practice • © OSInet
  • 57. Back Autres problèmes courants Opérations en boucle (node_load, node_view) au lieu d’opérations multiples (node_load_multiple) 63/66 • Drupal : worst current practice • © OSInet
  • 58. CONCLUSION 64/66 • Drupal : worst current practice • © OSInet
  • 59. Conclusion La clef : compétence • Compétence du maître d'ouvrage (MOA) : déléguer n’est pas ignorer ⇒ se faire bien entourer et suivre son projet 65/66 • Drupal : worst current practice • © OSInet
  • 60. Conclusion 66/66 • Drupal : worst current practice • © OSInet
  • 61. Conclusion La clef : compétence • Compétence du maître d'ouvrage (MOA) : déléguer n’est pas ignorer ⇒ se faire bien entourer et suivre son projet • Compétences internes ou AMOA • Compétence du maître d'oeuvre (MOE) 67/66 • Drupal : worst current practice • © OSInet
  • 62. Conclusion Mesurer pour agir • Savoir quoi mesurer • Savoir sur quoi agir selon la mesure 68/66 • Drupal : worst current practice • © OSInet
  • 63. Conclusion Adapter Adapter les pratiques à la taille du projet En-dessous de quelques milliers de visites/jour, le stack Drupal/LAMP pardonne à peu près tout sauf l’absence de MàJ. 69/66 • Drupal : worst current practice • © OSInet
  • 64. PASSEZ NOUS DIRE BONJOUR ! Frédéric G. Marand (fgm) Outi Munter (outi) www.osinet.fr 70/66 • Drupal : worst current practice • © OSInet
  • 65. 71/66 • Drupal : worst current practice • © OSInet OSInet www.osinet.fr sales@osinet.fr