ACTIV TECHNOLOGY

Adobe ColdFusion 10, ça y est !

La version 10 d’Adobe ColdFusion est sortie aujourd’hui même… Il aura fallut attendre 2 ans et demi pour voir cette version au nom de code Zeus poindre le bout de son nez. Alors, quelles sont les nouveautés majeures ? Pour un petit tour rapide du propriétaire, c’est par ici…

Nous vous proposons un aperçu global des principales nouvelles fonctionnalités car certains sujets demanderaient une étude dédiée comme les web sockets, l’amélioration de la sécurité ou encore les Closures.
Les dernières nouveautés d’Adobe ColdFusion 10 seront abordées cette semaine au cf.objective() de Minneapolis. Alors restez à l’écoute…

jRun est remplacé par Tomcat

C’est assurément une grande nouvelle… Même si jRun me permet d’intervenir chez beaucoup de nos clients… Tomcat est un serveur moderne et bien plus fiable que jRun qui a été abandonné il y a quelques années.

Amélioration de la console d’administration

  • Hot Fix Installer : les mises à jour sont maintenant accessibles par un simple clic sur un bouton. Il est également possible de désinstaller une version depuis l’interface ;
  • Le cache des Templates  (trusted cache) est maintenant paramétrable par répertoire ;
  • Navigateur de fichier basé sur jQuery en remplacement de l’applet Java qui était utilisée ;
  • Il est possible de vider le cache Query depuis l’interface ;
  • On peut limiter l’accès à l’admin par adresse IP directement dans l’interface.

Plus de sécurité

  • Prévention Cross-site scripting (XSS)
    Ce type d’attaque profite de failles de développement qui permettent d’injecter dans une page du code javascript par exemple directement depuis un formulaire ou par URL. Un hacker peut alors en profiter pour voler des données sensibles et même la session d’un utilisateur. Il convient de toujours “nettoyer” les données en provenance du navigateur avant de les reproduire vers le client. Pour cela une liste de fonctions a été introduite : encodeForHTML, encodeForHTMLAttribute, encodeForJavaScript, encodeForCSS, and encodeForURL, canonicalize
  • Prévention Cross-Site Request Forgery (CSRF)
    Cette attaque simple permet de faire exécuter une action à un utilisateur à son insu en profitant de son authentification. En effet, un utilisateur est en général authentifié sur un système de manière globale. Ses actions sont toujours acceptées avec confiance. Cependant, quelqu’un de malveillant peut lui envoyer par exemple par email un lien qui conduit à l’exécution d’une commande (par exemple, supprimer un élément). Pour se prémunir de ce type d’attaque, on peut introduire un token temporaire unique dans un formulaire et on accepte alors que l'exécution de ce formulaire si le token est valide : CSRFGenerateToken, CSRFVerifyToken.
  • Protection contre les CRLF attacks
    Il s’agit d’une corruption des entêtes HTTP, ainsi les tags qui manipulent ces entêtes ont été protégés: cfheader, cfcontent, cfmail, cfmailpart, and cfmailparam
  • Amélioration de la gestion des Cookies de session : HTTPOnly (transmis uniquement dans les entêtes HTTP et inaccessible par JavaScript) par défaut, secure (via HTTPS seulement), domain (cookie limité à un domaine), timeout et introduction des fonctions SessionInvalidate() et SessionRotate()
  • Hash/HMAC (Hash-based Message Authentication Code)
  • Contrôle du type Mime des uploads de fichiers ;
  • Et plus encore… Renforcement du cflogin, cryptage des mots de passe et autres services…

Nouveauté dans le langage

  • Cookie via script ;
  • for-in pour les types query ;
  • Nouvelle fonction sessionStartTime() ;
  • Contenu du tag cffile
    <cffile action="write" file="#filename#">
    Contenu du fichier à écrire
    </cffile>
  • Accès à la pile d’appel de fonctions : fournit des informations sur le nom du template, la ligne et le nom de la fonction impliquée à travers les nouvelles fonctions callStackGet(), callStackDump() ;
  • Nouvelle fonction getApplicationMetadata() qui permet d’accéder aux informations de paramétrage de l’application ;
  • Espace disque détaillé : getTotalSpace(), getFreeSpace() ;
  • Système de fichier en mémoire maintenant gérable au niveau Application ;
  • Nouvelle méthode onAbort (Application.cfc) appelée lors d’un <cfabort> ;
  • Nouvelle fonction directoryCopy() ;
  • Nouvelle fonction ArraySlice(array, offset, [length])

<cfscript>

     array = [1, 2, 3, 4, 5, 6, 7, 8];

     newArray = arraySlice(array, 2, 3); //returns 2,3,4

     newArray = arraySlice(array, 4); //returns 4,5,6,7,8

     newArray = arraySlice(array, -5, 3); //returns 4,5,6

</cfscript>

  • Constructeurs implicites pour les CFCs via les accesseurs
  • Appel de méthode en cascades pour les CFCs :
    emp=new employee();
    emp.setFirstName("Tom").setLastName("Nash").setAge("30");
  • Nouvel attribut runOnce ajouté au tag <cfinclude> ;
  • Nouvel attribut timeout ajouté au tag <cfstoredproc> ;
  • Nouvel attribut maxLength ajouté au tag <cfparam> ;
  • dateTimeFormat() et lsDateTimeFormat()
  • reEscape() qui permet de supprimer les caractères correspondants à une expression régulière ;
  • replaceList() permet de définir maintenant un délimiteur ;
  • Modification des fonctions arraySort, listSort et structSort : ces fonctions supportent désormais les locales Java pour sortype=text ou textnocase
  • Déclaration implicite d’une structure supports maintenant les deux points comme la définition JSON :
    <cfset point = {x=1,y=2}>
    <cfset point = {x:1,y:2}>
  • ColdFusion 10 supporte la syntaxe XPath 2.0 et XSLT 2.0
  • Et bien d’autres fonctionnalités plus mineures…

Les closures

  • Introduction des closures : on pourrait faire une session entière sur ce sujet. Le concept est simple mais puissant, il s’agit d’avoir une fonction imbriquée dans une autre fonction avec la possibilité d’accéder à ses variables. On peut alors déclarer des fonctions paramétrées : ce sont les closures.
    Voici un exemple :

<cfscript>

function helloTranslator(String helloWord) {

return function(String name) {

return "#helloWord#, #name#";

};

}

helloInHindi=helloTranslator("Namaste");

helloInFrench=helloTranslator("Bonjour");

// Print  Namaste, Anna.

writeoutput(helloInHindi("Anna"));

writeoutput("<br>");

//Print Bonjour, John.

writeoutput(helloInFrench("John"));

</cfscript>

Les closures ont leurs nouvelles fonctions spécifiques pour manipuler des structures et des tableaux : ArrayEach, ArrayFilter, ArrayFind, ArrayFindAll, ArraySort, ListFilter, isClosure, StructEach, StructFilter

Meilleure intégration de Solr

Vous étiez prévenus avec ColdFusion 9, Verity est aujourd’hui définitivement abandonné. Le support de Solr a été amélioré :

  • Utilisation du “Data Import Handler” pour indexer une base de données ;
  • Indexation et recherche basées sur des custom fields dynamiques ;
  • Possibilité de rafraîchir individuellement une collection ;
  • 17 langues sont maintenant supportées pour la recherche ;
  • Possibilité de forcer l’accès via HTTP depuis l’interface d’administration ;
  • Auto-commit pour les documents indexés ;
  • Capacité de mettre en avant un champ spécifique pour améliorer les résultats d’une recherche

Web Services

Adobe ColdFusion 10 implémente maintenant Apache Axis 2 dont le support complet au style d’architecture REST.

HTML5 & Mobiles

  • Introduction des WebSockets HTML5, qui révolutionnent le mode non connecté inhérent à HTTP et permettent ainsi une communication à double sens et notamment le push d’information. Nouveau tag <cfwebsocket>.
    ColdFusion 10 encapsule la compatibilité ascendante avec les navigateurs ne supportant HTML5 en utilisant un composant Flash
  • Introduction d’un nouveau player video HTML5 qui fonctionne parfaitement sur les tablettes et autres smartphone avec une compatibilité ascendante en utilisant un player Flash. Ce player peut être customisé.
  • Amélioration de la géolocalisation avec <cfmap>
  • <cfinput> supporte maintenant tous les types HTML5
  • Vous aimiez <cfchart> ? Et bien maintenant vous allez l’adorer : ce tag produit des graphiques côté client en javascript assurant de l’interactivité avec l’utilisateur…

Autres Améliorations

  • Grâce à Tomcat il est possible d’avoir des sessions persistantes ;
  • Support de Microsoft Exchange 2010 ;
  • Les tâches planifiées ont été revues de fond en comble ! Il est maintenant possible de créer des déclencheurs, de “chaîner” les tâches, gérer les priorités des groupes…