Here With Me

Blog personnel et technique, Blog technique et personnel, Blog avant tout.

argent-thumb.gif

18 mars 2008
par Amaury
3 Commentaires

Dis papa, ça coûte combien un site internet ?

argent En lisant le blog de WordPress Tuto, je suis tombé sur un article très intéressant, mais un peu perdu entre toutes ses traductions de thèmes… Et c’est bien dommage soit dit en passant !!!

Libretto y fait une analyse des derniers rachats de sites Web tels que Doctissimo, Auféminin.com. Et c’est vrai qu’en suivant son raisonnement, mon blog me rapporterai beaucoup :D

Et donc la question, c’est quand que la bulle pète ?!

Bonne lecture !

96-picto-dotdeb-thumb.png

17 mars 2008
par Amaury
1 Commentaire

Bug avec les paquets MySQL 5 de dotdeb ?!

96_picto_dotdeb Étrangement, si j’utilise les paquets MySQL 5 des depots dotdeb, j’ai un bug au niveau des requêtes SQL.

Le couple : ORDER BY et GROUP BY inverse les résultats…

Conclusion, lors de l’utilisation de la fonction query_posts ou get_posts, je me retrouve avec l’ordre inverse des articles… Donc les plus anciens, en lieu et place des plus récents…

Quelqu’un a déjà rencontre ce problème ?

Je pense à un problème entre Debian 64 bits et MySQL 5. Du coup, je repars sur la version des dépôts officiels…

959811-88673421.jpg

16 mars 2008
par Amaury
4 Commentaires

Faire des requêtes sécurisées sous WordPress 2.5 ! Utilisation de la méthode $wpdb->prepare !

959811_88673421 Parlons un peu sécurité !

WordPress, comme tout logiciel informatique, est de plus en plus soumis a des attaques diverses et variées... Pour contrer ce genre de désagrément, WP utilise plusieurs mécanismes:

  • Gestion des droits
  • Un nouvel algorithme de cryptage des mots de passe pour WordPress 2.5
  • La gestion de "nonce" permettant de vérifier la provenance lors d'une action dans l'administration.

La grande nouveauté de cette version 2.5, c'est l'ajout d'une méthode permettant de protéger rapidement et efficacement les requêtes SQL d'une technique très remployées, j'ai nommé les injections SQL.

Avant WordPress 2.5, c'était un peu l'anarchie. En effet, chaque plugin dispose de son propre mécanisme de protection, plus ou moins efficace et plus ou moins testé...

Afin de remettre les choses a plats, les développeurs ont ajouté la méthode "prepare" à la classe d'accès a la base de données "wpdb".

Cette méthode bouscule les habitudes sur plusieurs aspects, pour bien comprendre le fonctionnement, je vais décortiquer une requête SQL de WordPress avec l'ancienne et la nouvelle méthode !

Ancienne méthode

Dans cet exemple, je vais prendre la requête SQL utilise lors de l'insertion d'un article dans la base de donnes. Cette requête permet de vérifier que l'identifiant de l'article (ou slug) est bien unique, le cas échéant WP rajoutera un suffixe mais peu importe... Le sens de la requête n'a aucun intérêt dans cette démonstration !

Voici la requête:

$post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '$post_name' AND post_type = '$post_type' AND ID != '$post_ID' AND post_parent = '$post_parent' LIMIT 1");

Note: vous pouvez trouver la requête dans le fichier "wp-includes/post.php", à la ligne 701.

Comme vous pouvez le constater, la requête fait appel à 4 variables dynamiques:

  • $post_name
  • $post_type
  • $post_ID
  • $post_parent

Ces variables sont des sources potentielles d'injections SQL... Pour être sûr de leur contenu, il est impératif de les sécuriser une par une... Cela implique plus de code... et surtout un code répétitif à souhait qui perd en lisibilité !

La nouvelle méthode !

Voici la même requête sous WP 2.5:

$post_name_check = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1", $post_name, $post_type, $post_ID, $post_parent));

Note: vous pouvez trouver la requête dans le fichier "wp-includes/post.php", à la ligne 1267.

Que remarquons-nous ?

  1. Avant d'effectuer la requête SQL (méthode "get_var"), nous utilisons la méthode "prepare"
  2. Nous n'avons plus de variables directement dans la requête SQL
  3. La méthode "prepare" fonctionne de la même façon que les fonctions PHP "sprintf" ou "printf" (chaînes formatées)
  4. Le nombre de paramètre de la méthode "prepare" est infini.
  5. Le code de la requête SQL est plus lisible

Comment ça marche ?

Dans le code de la requête SQL, à la place des variables PHP, nous plaçons des marqueurs. Ces marqueurs débutent toujours par un pourcentage.

  • %s pour une chaîne de caractère
  • %d pour un nombre entier
  • La suite des marqueurs sur php.net.

A ce moment de l'article, pour ceux qui ont tout compris, vous vous dites: "Quelles différences avec l'ancienne méthode, les marqueurs ont les mêmes inconvénients que les variables PHP..." et "Pourquoi faire une méthode prepare alors qu'il existe déjà la fonction PHP sprintf..."

C'est précisément ici que la méthode agit... Contrairement à la fonction sprintf, qui ne fait que remplacer bêtement les variables.

La méthode "prepare" passe par une étape intermédiaire, la sécurisation des variables:

  1. Suppression des quotes simples et doubles de la requête
  2. Ajout des guillemets entre les variables PHP pour respecter la syntaxe SQL
  3. Utilisation de la méthode "escape" pour protéger les variables des injections SQL

Conclusion

Vous l'aurez bien compris... L'intérêt majeur de cette fonction est de gagner du temps lors de la création des requêtes SQL ! (tout en les sécurisant)

Grâce à son fonctionnement "à la printf", le code de vos extensions gagnera en lisibilité, en légèreté, et la sécurité sera assurée...

Il ne reste plus qu'à attendre les nouvelles versions de vos extensions préférées pour WordPress 2.5 !

(Extensions = Plugins, préparez vous mentalement... C'est la nouvelle traduction française dans WordPress 2.5)

atom-logo75px.gif

16 mars 2008
par Amaury
5 Commentaires

Les nouveautés développeurs de WordPress 2.5 !

Quoi de neuf dans WordPress 2.5 pour les développeurs ? Pas mal de petites choses… présentation !

TinyMCE passe en version 3.x

Cette nouvelle version de l’éditeur visuel apporte plusieurs choses

  • Compatibilité à 100% avec Safari 3
  • Cœur de l’éditeur complètement réécrit, optimisé et plus léger
  • API revu et corrigé, beaucoup plus flexible pour les plugins
  • Le code produit est beaucoup plus sémantique et respecte les standards web du W3C.

Elle corrige également un grand nombre de bugs. Le site de l’éditeur : Moxiecode Systems AB pour davantage d’informations.

jQuery passe en version 1.2.x et se généralise

jQuery-logo Depuis la version 2.1, l’équipe de WordPress migre progressivement tous les JavaScripts de WordPress sous la librairie jQuery. Cette dernière passe par la même occasion à la version 1.2.x (plus performante et plus légère).

jQuery est désormais utilisé pour:

  • Les alertes de manipulation dans les listes d’articles, de pages.
  • Les alertes WordPress avec dégradés
  • Enfin jQuery remplace Prototype dans la page de rédaction (page plus rapide !)

Les librairies Prototype et script.aculo.us sont également mise à jour, respectivement aux versions 1.6.0 et 1.8.0.

Cela permettra probablement à la console d’administration d’être un peu plus légère pour les navigateurs web !

L’API XML-RPC évolue…

Quelques nouveautés… et des corrections !atom-logo75px

  • Ajout d’une méthode pour la suppression des catégories, récupération du nombre de commentaires
  • Support des champs personnalisés
  • L’API AtomPub peut désormais être découvrable automatiquement via les clients tels que Windows Live Writer, etc.
  • Support des différents statuts de publication des articles
  • L’API est extensible grâce aux filtres et actions des plugins WordPress
  • Les articles programmés dans le futur avec Windows Live Writer fonctionnent correctement
  • Etc.

Vous trouverez le détail des modifications sur le trac de WordPress.

Une nouvelle méthode pour sécuriser les requêtes SQL $wpdb->prepare !

Et pour en savoir plus… il faudra lire le prochain article entièrement consacré à cette nouvelle méthode :)

Edit: Lire Faire des requêtes sécurisées sous WordPress 2.5 ! Utilisation de la méthode $wpdb->prepare !

b2evo-logo-t.gif

16 mars 2008
par Amaury
0 Commentaires

b2evolution et nginx : Comment résoudre le problème de redirection lors de la connexion à l’administration !

b2evo-logo-t Lorsqu'on utilise le logiciel de blog b2evolution, et le serveur HTTP Nginx, il se passe un petit bug lors de la connexion à l'administration.

En effet, une fois le login passé, le logiciel part dans une boucle infinie ! Et l'admin est inaccessible... Pas terrible pour blogger...

Pour résoudre ce petit bug, nous allons éditer le fichier admin.php se situant à la racine de b2evolution.

Et à la ligne 22, nous allons remplacer

if( ! empty( $_SERVER['PATH_INFO'] ) && $_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF'] ) // the "!= PHP_SELF" check seems needed by IIS..

Par

if( ! empty( $_SERVER['PATH_INFO'] ) && $_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF'] && 1 == 0 ) // the "!= PHP_SELF" check seems needed by IIS..

Avec cette petite modification, la condition n'est jamais remplie, l'administration fonctionne mais les anciennes url du type "/admin/plugins.php" ne seront plus rediriger vers "/admin.php".

Pour note, la variable PATH_INFO est différente de PHP_SELF, raison pour laquelle la condition est remplie et cela fait tout foirer :)

Mon diagnostic s'arrête la... faute de temps !

12 mars 2008
par Amaury
0 Commentaires

WordPress 2.5 n’est pas en retard…

… sa sortie est simplement décalé d’une semaine !

Pour info, vous pouvez suivre l’avancement du développement depuis la "roadmap" du trac de WordPress.org

Si vous souhaitez connaître les nouveautés utilisateurs de cette nouvelle version, consultez l’article de Fran6 sur le blog MonetiWeb.

Enfin, vous pouvez débattre de la traduction sur le blog de WordPress Francophone.

safarilogo-thumb-1.png

9 mars 2008
par Amaury
1 Commentaire

Tester efficacement vos sites sous Internet Explorer 6, 7, 8 et les autres !

Pour tester vos sites, il existe plusieurs moyens…

opera-logo ie7_logo Firefox-logo safarilogo_thumb_1

1. Utiliser des services web de captures d’écrans

Exemple de service: http://browsershots.org/

Avantages : Multitudes de configurations différentes, multi-navigateur et multi-OS
Inconvénients : Long, impossible de tester le JavaScript, résultat pas toujours concluant

Il existe quelques services sur le web qui font la même chose, certains sont payants, d’autres moins performants…

2. Disposez d’un parc informatique de grande taille et hétérogène

Avantages : Test sur des "vraies" machines
Inconvénients : Long, et il faut le parc…

3. Avoir plein d’amis !

C’est con, mais avoir plein d’amis "feedbackeur", c’est un excellent moyen d’avoir des retours multi-OS et multi-navigateurs…

Avantages : Réel retour utilisateur
Inconvénients : Long, et il faut les amis…

4. Utiliser des machines virtuelles

Ma méthode favorite… la plus efficace, l’utilisation de machine virtuelle avec des outils tels que Virtual PC (gratuit), VMware (payant) ou VirtualBox (gratuit), etc.

Avantages : Des "vrais" systèmes d’exploitation, tous les OS (sauf Mac OS X, encore que…)
Inconvénients : Mise en place longue et fastidieuse, nécessite d’avoir une bonne station de travail.

Alors j’ai mis comme inconvénient, "Mise en place longue et fastidieuse", oui et non… De plus en plus de distributions proposent des images virtuelles de leur système, de quoi gagner du temps !

Par exemple, Microsoft met à disposition des machines virtuelles de Windows XP avec IE6, IE7 et IE8. Elles sont peut être limite en temps, mais pas de prise de tête pour l’installation…

Encore une fois, on peut dire que l’avenir de l’informatique passe bien par la virtualisation :)