Archive for the 'Programmation' Category

Ajaxian::XMLHttpRequest W3C Working Draft

Monday, April 10th, 2006

Source: http://ajaxian.com/archives/xmlhttprequest-w3c-working-draft

Document de travail W3C sur le XMLHttpRequest

La W3C a annoncé leur intention de standardiser l’objet XHR et la première version du document de travail a été dévoilée.
Qu’est ce que cela signifie pour nous? Et bien cela vous donne un peu de documentation, quelques tuyaux pour les éditeurs (grâces aux notes d’implémentation), et nous indique donc que la nouvelle requête XMLHttpRequest sera la méthode du futur (vu que cette fonction est quasi incluse dans IE7, etc…)

Babozor:
Effectivement c’est une bien bonne nouvelle tout ça :)

Ajaxian::Single Page Ajax Store

Monday, April 10th, 2006

Source: http://ajaxian.com/archives/single-page-ajax-store

WebMarchand Ajax, page unique

HiDefDvd.com est un nouveau web machand qui a implémenté une application Ajax sur une page unique.
Certains éléments nous paraissent très pertinents. Ajouter un article est une opération Ajx, idem pour la wish-list. Par contre, est ce vraiment censé de cliquer sur une catégorie, voir un message de ‘loading’ et ensuite réafficher la même page? Je ne pense pas.
Pour cela, des pages séparées marchent mieux, alors ne devenez pas fou d’Ajax pour tout et n’importe quoi.

Babozor:
Je suis assez d’accord avec cette analyse. L’Ajax a des côtés très très pratiques, mais n’est pas applicable n’importe où et n’importe comment. Il n’empêche ce WebMarchand a le mérite d’être un des premiers à étreiner la technologie, et même si c’est parfois maladroit, moi je dis quand même bravo…

Web/PHP & Sécurité : Première partie

Monday, April 10th, 2006

Depuis quelques semaines certaines personnes ont fait très justement remarqué dans certains posts que le niveau de certaines applications utilisant Ajax pouvait laisser à désirer au point de vue sécurité. Malheureusement ce phénomène n’est pas réservé à Ajax et touche beaucoup d’applications web qui sont peu ou mal sécurisés.

Nous allons donc essayer de faire le tour des différentes failles possibles et leurs réponses.

Dans la première partie nous tenterons d’expliquer les bases d’une sécurité adéquate, en reprenant la base et certains aspects fonctionnels.
Dans la deuxième partie (qui devrait arriver d’un jour à l’autre)  nous nous intéresserons plus à des cas d’écoles et à leurs solutions.

Les risques
Les risques qu’encourent une applications sont de deux types, que nous apellerons attaques belliqueuses et attaques malicieuses.
Les attaques belliqueuses sont des attaques qui tentent de prendre le contrôle ou des informations en s’attaquant directement à l’infrastructure du serveur. Ces attaques sont liés à des éventuels problèmes de sécurité de la plateforme et ne concernent en rien la programmation de l’application et nous laisserons donc nos amis les administrateurs réseaux et autres personnes de l’exploitation s’arranger avec ces attaques belliqueuses.
Les attaques malicieuses sont plus difficiles à cerner, en général elles utilisent un faille dans la programmation de l’application web pour récupérer des informations auxquelles l’utilisateur n’a pas l’accès, effectuer des créations, modifications, suppressions, etc…
Ce sont ces attaques qui sont sous la responsabilité directe du programmeur de base, qui doit s’assurrer à tout moment que les informations qu’il délivre ou les actions qu’il autorise sont bien destinées au bon utilisateur et que ces instructions ne peuvent pas être utilisés par un petit malin dans un fjord norvégien ou en plein coeur de Paris.
Quelques principes de base
Nous allons rapeller quelques principes de base, aussi bien fontionnels que techniques qui sont à suivre en toutes circonstances pour garantir un niveau minimum de sécurité à votre application web (je sais certaines recommandations paraissent idiotes, mais vous n’avez pas idée du nombre de fois où elle ne sont pas respectées).
1. ne JAMAIS mettre un mot de passe en clair dans une page (mais alors vraiment JAMAIS, vous rigolez, je le vois, mais je l’ai déjà vu… alors ne rigolez pas trop)
2. les mots de passes stockés en base doivent être hachés (ou alors cryptés, mais le mieux reste hachés)
3. les données ultra sensibles (types numéro de carte bleu, etc…) ne doivent jamais être stockés nulle part (c’est le meilleur moyen de ne jamais se les faire voler)
4. personne, pas même l’administrateur du service ne doit avoir un accès aux mot de passes et données sensibles (comme cela aucun usurpateur ne peut tomber sur ces informations…) si le client pert son mot de passe, on lui en regénère un et on lui envoi par email…
5. Si vous ne voulez pas que quelqu’un “pique” certaines informations, ne les mettez pas en ligne (je sais c’est con de dire ça, mais c’est encore la meilleure sécurité qui existe aujourd’hui)
C’est votre devoir de développeur d’avertir votre chef de projet ou votre responsable des dangers des attaques malicieuses sur votre service et donc d’imposer ces quelques règles de base simples… Si ces règles ne sont pas respectées, le reste ne reste à rien ou en tout cas pas à grand chose.
Les requêtes
Pour certains ces notions semblent couler de source, mais 90% des développeurs ne comprennent que de façon superficielle certains concepts essentiels et fondateurs du web d’aujourd’hui…
Ces notions sont très importantes, puisque c’est sur ces bases que se fonderont les attaques malicieuses et donc aussi votre technique de défense (ton kung fu très bon…)
Les échanges sur le web se basent sur le protocole HTTP.
Ce protocole est assez simple à appréhender.
Vous voulez aller jeter un oeil sur une page web, en l’occurence http://www.babozor.com/index.php
Pour faire ceci, votre navigateur va envoyer un requête au serveur qui héberge ce site web et lui demander de bien vouloir lui renvoyer la page demandée.
Cette action est donc un requêtes du client vers le serveur.
Le serveur peut répondre de divers manières, si la page est valde et que vous y avez accès, il vous renvoi le contenu de la page qui est interpréte par votre navigateur et affiché par celui ci. Si il y a un problème, le serveur renvoi un code (par exemple la fameuse 404 pour une page inconnue, etc…) qu vous renseigne sur le problème survenu.
Traditionnellement il y a 2 façons d’envoyer des requêtes vers un serveur:
- GET: vous envoyez votre requête sous la forme d’un chaine de caractère qui comprend l’url de la page et toutes les variables (par exemple http://www.babozor.com?leplusfort=babozor)
- POST: vous envoyez votre requête au serveur sous la form d’une url et d’un chaine de caractère rajouté au header de la requête qui content les variables.
Quelle différence? pour le serveur aucune ou presque, à part de rendre explicite les variables en GET dans le navigateur (le client voit les variables dans la barre d’adresse de son navigateur).

Client / Serveur
Cette notion là encore est une notion fondatrice que peu de développeur maitrisent vraiment.
Les attaques malicieuses ne viennent jamais du serveur (sinon ce sont des attaques malicieuses, et ne vous concernent plus), mais du client.
Aucune action ne peut être effectuée sur le serveur si on ne les autorise pas. Pourquoi?
Que vous utilisiez ou non un langage dynamique (j’espère, sinon ce post vous n’est d’aucune utilité), la page affichée à l’utilisateur est une page statique, générée par Apache avec l’aide de PHP… PHP ou tout autre langage web n’est qu’une sous couche du serveur web, qui aide celui ci à construire ses pages. Les pages délivrées à l’utilisateurs sont toujours statiques, il ne peut en aucun cas les modifier… c’est vous qui modifiez les pages, le client ne peut que les visualiser.
C’est un concept important à saisir.
Il est donc important de saisir la relation embivalente Client / Serveur.
Le client envoi des requêtes et reçoit des réponses, le serveur traite ces requêtes et lui renvoi des pages.
Certains contrôles basiques peuvent être effectués côté client (tel que validation d’un formulaire, par exemple), mais ces contrôles restent limités. Par exemple, on ne vérifie pas le mot de passe côté Client, puisque ça voudrait dire envoyer “en clair” le mot de passe au navigateur pour que celui ci vérifie sa validité. Un contrôle mot de passe doit toujours rester côté serveur.
Les contrôles côté client doit être limités à la comodité pour l’utilisateur…
Cette notion est d’autant plus importante à maîtriser, si vous vous lancer dans le codage d’une application Ajax, où la délimitation entre Seveur / Client devient plus floue… ce passage n’est pas nécessairement associé à une page, mais à un requête et à une réponse du serveur.

Bon je crois qu’on en a assez fait pour maintenant. Pour certains cela a du rafraichir quelques souvenirs et pour d’autres leur causer un gros mal de crâne.
Demain on s’attaque aux choses sérieuses, les attaques malicieuses et la protection contre des actions non autorisées.

Ajaxian::Speeding Up AJAX with JSON

Friday, April 7th, 2006

Source: http://ajaxian.com/archives/speeding-up-ajax-with-json

Augmenter la rapidité d’Ajax avec JSON

La rapidité est la chose la plus importante quand on parle d’applications en ligne. Les utilisateurs détestent attendre, spécialement les plus expérimentés. En sachant cela, optimiser tout ce qui est possible dans votre application peut faire la différence entre quelqu’un qui délaisse votre service et quelqu’un qui reste et continue d’explorer votre site. Une méthode pour améliorer la vitesse de votre application est décrite sur Builder.com en utilisant JSON pour améliorer la rapidité de connexion des scripts Ajax entre ceux-ci et le serveur.


XML est la méthode standard déchange de donnée, mais ce n’est pas souvent la meilleure méthode. Bienque le XML ajoute une structure et des meta-data aux données, il le fait d’une façon un peu bavarde. XML dispose aussi d’une syntaxe un peu complexe, demandant l’action d’un parser qui est loin d’être trivial. En JavaScript, XML diot être parsé en utilisant une arborescence de type DOM. Et une fois l’arborescence DOM construite, vous devez aussi pouvoir la parcourir, pour créer les objets JavaScript correspondant ou alors utiliser les données XML dans votre application Web côté Client.

Heureusement, il existe une meilleur méthode

L’article introduit JSON au lecteur, en offrant une comparaison avec une structure XML équivalente. Leur point de vue est que le XML est très bien pour marquer les données, mais JSON permet d’accélérer les échanges de données. Un exemple est fourni de la différence pour la même requête entre XML et JSON, la solution JSON paraissant plus simple. L’article se finit sur une démonstration de la fiabilité de JSON pour votre application, et certains aspects de cette technologie côté Serveur.

Babozor:
Pas encore eut le temps de regarder plus précisément l’article en question, mais ça vaut le coup d’oeil…

Ajaxian::AjaxLoad - Custom Loading Indicators

Friday, April 7th, 2006

Source: http://ajaxian.com/archives/ajaxload-custom-loading-indicators

AjaxLoad - Indicateurs de chargement personnalisable

Quand votre application Ajax commence à dépendre de ressources externes pour récupérer les informations dont vous avez besoin, vous avez de temps en temps besoin d’un indicateur qui montre qu’une activitée est en cours en fond de tâche. Ces icônes sont un pas dans la bonne direction, mais seulement avec la possibilité de choisir entre noir et blanc, le choix est un peu limité. Allez donc jeter un oeil à AjaxLoad.info, ce site vous laisse personnaliser les couleurs et les formes de vos indicateurs à loisir.

Vous pouvez assigner n’importe quelle couleur au fond et à l’indicateur de chargement grâce au générateur d’indicateur de chargement, le rendu est immédiat sur la page. Le lien “Download” (télécharger) vous permet de sauvegarder votre création en Gif animé et de pouvoir l’utiliser directement sur votre site.

Le seul défaut de ce service reste le nombre limité pour l’instant d’indicateurs disponibles (on est quand même passé de 1 à 7), mais gageons que ce nombre risque d’augmenter sous peu.

Babozor:
Un service bien pratique, pour un besoin spécifique. Certes le nombre d’indicateurs reste limité (pour l’instant 7), mais ils regroupent les principaux modèles… juste ce qu’on a besoin et rien de plus…

Ajaxian::Ajax to Make Mobile Web 2.0 a Reality?

Friday, April 7th, 2006

Source: http://ajaxian.com/archives/ajax-to-make-mobile-web-20-a-reality
Ajax rend les Application Mobiles 2.0 réelles?

Les applications mobiles, même si elles tendent à s’améliorer, pataugent largement dans un bain de médiocrité, bien en deça de nos attentes de clients exigeants et pressés. Bien sûr il existe des exceptions, mais globalement, ces applications ne sont guère attirantes. Heureusement, il semblerait que les choses soient sur le point de changer - grâce à Ajax.

Ajit Jaokar a écrit dans cet article sur le site de LinuxWorld Magazine que Ajax pourrait bien devenir le “cachet des applcations mobile web 2.0″.


Récemment, Opéra a annoncé la disponibilité d’Ajax sur les appareils mobiles, en passant par leur navigateur. En considérant la popularité d’Opera sur le marché des navigateurs (spécialement sur le marché des navigateurs pour téléphones portables), cette annonce est très significative. Inclus dans bon nombres d’applications mobiles depuis quelques années, je pense que l’AJAX remplacera aussi bien JAVA ME et XHTML comme la plateforme de prédilection pour le développement d’applications mobiles.

Il continue son exposé en présisant que le “web mobile 2.0″ ne se limite pas juste à Ajax sur un téléphone portable, mais aussi que l’élan derrière les développements en Ajax combiné avec un manque flagrant de méthodes de développement simples, faciles à utiliser pourraient propulser Ajax en avant encore plus vite.

Il compare Ajax aux autres technologies utilisées pour le développement d’applications mobiles (comme Java ME et XHTML), et note trois problèmes qui, peu importe la plateforme, resteront quand vous voulez développer une application mobile. Son opinion est que malgré tout, Ajax prendra le dessus sur ces solutions plus lente à mettre en place et construit sur des modèles “sérieusement défectueux”, comme Java ME.

Babozor:
Aucun commentaire particulier, tout semble prouver que la technologie Ajax a le vent en poupe, la W3C, le marché mobile, etc…

La W3C légitime AJAX?

Friday, April 7th, 2006

Source: http://www.fredcavazza.net/index.php?2006/04/06/1120-ajax-…

D’après certaines informations, la W3C travaillerait sur une normalisation d’AJAX et plus précisément de l’objet XMLHttpRequest (objet essentiel et fondateur de l’AJAX).
Il n’est jamais trop tard bon bien faire, en tout cas cela permetrait que cette technologie souvent qualifiée de gadget par certains gagne ainsi enfin un peu de respectabilité.
Si la vieille dame du Web (la W3C) se met à travailler sur une spécification pour cet objet, c’est que tout simplement Ajax est en train de devenir petit à petit un standard dans notre industrie.

Ajaxian::PHPClasses.org Chooses iFrames over Ajax?

Friday, April 7th, 2006

Source: http://ajaxian.com/archives/phpclassesorg-chooses-iframes-over-ajax

PHPClasses.org choisit les iFrames au détriment d’Ajax?!

Quand les gens regardent pour la première fois les possibilités d’Ajax, il semble qu’ils soient immédiatement retournés et s’y lancent à pied joint. Bien sûr, d’autres plus mitigés, prennent Ajax comme un moyen d’ajouter certaines fonctionnalités à leur site web, mais ne semblent pas convaincu. Ils se retranchent donc vers des notions connus et qui marchent pour eux - la traditionnelle iFrame.

Une exmple est ce post sur le blog de PHPClasses qui parle du choix de Manuel Lemo de passer par des iFrame au lieu du XmlHttprequest pour la nouvelle version de son site, PHPClasses.org.


Ce plu-in Ajax que j’ai développé n’utilise par l’objet XMLJttpRequest. Il utilise à la place des iFrame cachées. Certains considèrent l’AJAX comme la seule méthode pour une interaction serveur-navigateur, grâce à l’objet XmlHttpRequest. Cette définition est fausse puisqu’on peut utiliser les iFrame pour les même besoins.
Je voudrais donc partager avec vous les raisons pour lesquelles j’ai choisi les iFrames plutôt que l’objet XMLHttpRequest.

Cretaines de ces raisons sont: “Compatibilité navigateurs”, “Les contraintes de sécurité des navigateurs” et “Rapidité de réponse”. Il base sa discussion sur une présentation qu’il a assisté qui disait que Ajax convenait pour de petites requêtes, mais qu’une iFrame pouvait supporter des requêtes plus larges, d’une façon plus facile et plus rapide que son homologue. Il cite aussi une autre raison pour sa décision: avec une connexion Ajax, les données ne sont disponibles qu’à la fin de la requête, alors que l’iFrames peut renvoyer des données partielles. Quelques autres arguments sont avencés, comme la possibilité de faire plusieurs actions dans la même requête et qu’il n’y a pas de méthode directe qui gère l’upload de fichier.

Babozor:
Je ne suis pas sûr que ce choix soit impartial, mais peut être pour aller à contre-courant de la tendance actuelle. Personnellement je ne vois pas l’intérêt d’un iFrame caché, alors que même pour des applications aux besoins gourmands, l’Ajax peut soutenir largement la comparaison. Il n’en reste pas moins, que la question reste ouverte…

Ajaxian::Script.aculo.us 1.6 Released

Friday, April 7th, 2006

Source: http://ajaxian.com/archives/scriptaculous-16-released
Script.aculo.us 1.6 disponible

Script.aculo.us version 1.6 est disponibe (et qui suit la mise en ligne de la version 1.1 de Rails), comme l’avait dit Thomas Fuchs.


Script.aculo.us 1.6 marque une divergence avec Prototype 1.5 (la version 1.4 n’est plus supportée), avec de merveilleuses nouvelles fonctionnalités et est passé par un recodage complet pour tirer le meilleur parti de Propotype 1.5.
Les nouvelles fonctionnalités incluront la possibilité de scroller des fenêtres pendant le drag & drop, des optimisations de performance et des corrections de bug.
Pour voir des combinaisons vraiment cool des nouvelles fonctionnalités de Prototype avec la dernière version béta 1.6 de script.aculo.us, regardez les exemples 1 et exemples 2 (accesibles aussi depuis le functional test suite).

Juste quand on commence à piger le truc, ils rajoutent d’autres trucs cool :)

Babozor:
Après un test léger, ces nouvelles fonctionnalités m’ont l’air plutôt gadget qu’autre chose, mais il faudrait se plonger dans le code de la nouvelle version pour voir l’étendue de la réorganisation du code pour permettre une meilleur implémentation du code avec Prototype 1.5…
A voir…

Ajaxian::An Ajax Powered Tool

Friday, April 7th, 2006

source: http://ajaxian.com/archives/an-ajax-powered-color-tool

Un outil pour vos couleur en Ajax

Malheureusement, tous les développeurs web n’ont pas le dont inné du sens du design et des couleurs. Ils codent des pages qui fonctionnent, et se préoccuperont après de tous les “bidules” autour, une fois que le travail de ccodage sera terminé. Heuresuement pour eux, certaines ressources sont là pour les aider, comme cet outil bien pratique de Sharewonders.com.

Quand vous chargez la page, vous verrez une barre sur votre gauche avec un lien “Show” en haut. Cliquez dessus et vous serez accueilli par une interface sobre pour vous aider à choisir des couleurs coordonnées qui vont avec votre sélection de couleur. en cliquant sur une des couleurs dans un des blocks du haut, vous verrez comment les différentes zones réagissent avec les couleurs coordonnées. Les blocks de couleurs plus gros (au milieu de l’interface) peuvent ensuite être glissé sur la partie droite de la page pour créer une colorisation pour votre site.

Ouais, c’est un autre sélecteur de couleur de plus, pas vrai? Et bien, c’est un peu plus que ça. Quand vous avez sélectionné la couleur dans les boites à votre droite, vous pouvez les sauvegarder avec un nom de thème et une description et ils seront ajouté aux “10 thèmes les plus récents”. Ils utilisent une connexion Ajax pour faire des aller-retours avec le serveur pour que la sauvegarde soit transparente. Cliquez sur le lien “view” à côté d’un thème et la page se rechargera avec les couleurs du thème sélectionné.

Le site est toujours en développement, donc je sais que d’autres fonctionnalités suiveront. Les autres fonctionnalités que j’aimerais voir sont plus de layouts et d’options pour les couleurs. J’aime que l’on puisse “affiner” des thèmes pré-enregistrés, en faisant de petits changements de couleur jusqu’à obtenir entière satisfaction.

Babozor:
Le service est clairement encore en béta, mais il laisse augurer avec quelques menus aménagement un outil pratique pour prévisualiser rapidement des thèmes de couleur différent pour votre site, pratique… et tout en Ajax, off course…