Porte dérobée dans les serveurs d applications JavaEE

Dimension: px
Commencer à balayer dès la page:

Download "Porte dérobée dans les serveurs d applications JavaEE"

Transcription

1 Porte dérobée dans les serveurs d applications JavaEE Philippe Prados Atos Origin Résumé Soixante-dix pour cent des attaques viennent de l intérieur de l entreprise. L affaire Kerviel en a fait une démonstration flagrante. Les projets JavaEEs sont très présents dans les entreprises. Ils sont généralement développés par des sociétés de services ou des prestataires. Cela représente beaucoup de monde pouvant potentiellement avoir un comportement indélicat. Aucun audit n est effectué pour vérifier qu un développeur malveillant ou qui subit des pressions n a pas laissé une porte dérobée invisible dans le code. Nous allons nous placer à la place d un développeur Java pour étudier les différentes techniques permettant d ajouter une porte dérobée à une application JavaEE, sans que cela ne soit visible par les autres développeurs du projet. Nous avons développé une archive Java qui permet, par sa simple présence dans un projet, d ouvrir toutes les portes du serveur ou d une carte à puce. Nous étudierons les risques et proposerons différentes solutions et outils pour interdire et détecter ce type de code. Des évolutions du JDK seront proposées pour renforcer la sécurité. Introduction Dans l entreprise, 30 à 40% des effectifs n en sont pas des employés. Cela peut expliquer que la plupart des attaques informatiques viennent de l intérieur. Un développeur malveillant ou poussé à la faute par des pressions psychologiques externes - bien connues des mafias - peut introduire du code permettant d ouvrir des portes sur le serveur d applications. L audit de code peut éventuellement révéler un comportement comme celui-ci : if ( contribuable. equals (" philippe ")) impot =( byte ) impot ; Ce n est pas évident à identifier, car il faut une relecture humaine de tout le code. Avec un peu de chance, les autres développeurs du projet peuvent découvrir la trappe, lors d un déverminage par exemple. Comme tout code est bien plus souvent lu qu écrit, la probabilité de découvrir une trappe n est pas nulle. Pour vous en convaincre, consultez cette présentation évoquant un cas réel : Quelles sont les techniques utilisables par un développeur Java pour cacher son code? Pour exécuter un traitement à l insu de l application? Pour s injecter dans le

2 P. Prados 387 flux de traitement et ainsi capturer toutes les requêtes HTTP? À toutes ces questions, nous allons proposer des réponses et des solutions. Cette étude n a pas vocation à être exhaustive sur les techniques d attaques. Elle en présente certaines très efficaces et souvent innovantes. Une librairie de démonstrations inédites est proposée permettant de qualifier la protection des applications contre des portes dérobées génériques. Cette étude a produit trois alertes de sécurité, la réalisation de deux patchs pour les JDKs et trois outils d analyse et de durcissement du code. Nous terminerons par la présentation des solutions actives et passives pour contrer ce type de menaces. Deux vidéos de démonstrations sont proposées. La première est une simple démonstration de la puissance de la porte dérobée, la seconde explique ensuite comment se protéger contre ce type de menaces. Elles sont disponibles, ainsi que les outils, ici : Cette étude se limite à Tomcat 6.x, avec un JDK et OpenJDK b12, sous Windows et Linux. Les vulnérabilités sont certainement efficaces avec d autres serveurs d applications, mais cela n a pas été vérifié. Coté client, la porte dérobée proposée à été testée sur : Google Chrome Windows Firefox Windows et Linux Internet Explorer Windows Opera 9.63 Windows et Linux Safari Windows 1 L objectif du pirate Du point de vue du pirate, une porte dérobée doit : résister à un audit du code de l application. Sinon, chaque développeur qui participe au projet peut fortuitement la découvrir ; résister aux évolutions futures du code. Il ne doit pas y avoir de dépendance directe avec le code existant. Une évolution de l application ne doit pas faire échec à la porte dérobée ; contourner le pare-feu réseau et le pare-feu applicatif (Web Application Firewall WAF). La communication avec la porte dérobée doit être invisible ou difficilement discernable d un flux légitime ; contourner les outils d analyse de vulnérabilité dans le byte-code, par propagation de teinture sur les variables. De ce cahier des charges, nous avons recherché différentes techniques pour atteindre tous les objectifs que nous nous sommes fixés.

3 388 Porte dérobée dans les serveurs d applications JavaEE Pour résister à un audit, le code de la porte dérobée ne doit pas être présent dans les sources. L application ne doit pas l invoquer directement. Ainsi, la porte est généralement exclue des audits. Pour cela, il faut que la simple présence d une archive, considérée à tord comme saine, suffise à déclencher l attaque. Pour ne pas dépendre de l évolution du code applicatif, le code doit utiliser des attaques génériques, fonctionnant quelque soit l application. Pour contourner les pare-feu, le code doit simuler une navigation d un utilisateur. Il doit respecter toutes les contraintes sur les URLs, les champs présents dans les requêtes, le format de chaque champ, etc. Il ne peut pas ajouter de nouvelles URLs ou de nouveaux champs. Pour contourner les outils d analyses de byte-code 1 à la recherche de variables non saine lors de l invocation de traitements risqués, il faut utiliser une écriture de code spécifique, cassant la propagation de la teinture sur les variables. La méthode ci-dessous casse la propagation des teintures sur les variables simplement en changeant le type de la donnée : private static String sanitize ( String s) char [] buf = new char [s. length () ]; System. arraycopy (s. tochararray (), 0, buf, 0, s. length ()); return new String ( buf ); 2 Implémentation Le code de la porte dérobée doit suivre plusieurs étapes pour s installer définitivement dans le serveur d application et être capable de détourner le flux des traitements. Ces étapes sont détaillées ci-dessous par ordre chronologique : Piège de l application Augmentation des privilèges Injection dans le flux de traitement des requêtes HTTP Détection de l ouverture Communication discrète Exécution des agents 2.1 Les pièges La première étape consiste à initialiser la porte dérobée. Elle doit pouvoir démarrer alors que le code applicatif ignore sa présence. Pour cela, il faut utiliser des pièges pour permettre une exécution de code par la simple présence d une archive JAR. 1

4 P. Prados 389 Les pièges sont des traitements cachés, exécutés à l insu de l application. Le code applicatif ou le serveur d application n a pas à invoquer explicitement du code pour permettre l exécution de traitements malveillants. Différentes techniques de pièges ont été découvertes lors de l étude. Plusieurs stratégies sont possibles pour les réaliser : Surcharge d une classe ; Ajout d un fichier de paramétrage ; Exploitation des «services» ; Exploitation de la programmation par aspects (AOP) ; Exploitation d un «Ressource Bundle» ; Exploitation des annotations. 2.2 Piège par «surcharge» La surcharge d une classe consiste à proposer plusieurs versions différentes de la même classe dans des archives différentes. En redéfinissant une classe banale d une archive, le code du pirate sera exécuté à l insu de l application. Java utilise un mécanisme de chargement dynamique des classes. Une liste d archives (JARs) est consultée lors de la demande de chargement d une classe. L algorithme installe le fichier.class venant de la première archive étant capable de livrer le fichier de la classe. Si l archive ayant la classe modifiée est présente avant l archive originale, le pirate peut exécuter du code complémentaire. Fig. 1. Enchaînement de classes Cette approche présente plusieurs inconvénients : Le code de la porte dérobée est fortement dépendant du code original ; Il est difficile de déléguer les traitements sur l original. Il faut alors récrire l original pour simuler un comportement normal ; La modification de l original peut entraîner le plantage de l application car la copie n en tient pas compte ;

5 390 Porte dérobée dans les serveurs d applications JavaEE L exécution n est pas garantie. Cela dépend de l ordre de sélection des archives par la JVM ; Cette approche est donc rejetée. 2.3 Piège par «paramétrage» De nombreux frameworks utilisent des fichiers de paramétrages indiquant des noms de classes. Certains recherchent des fichiers de paramètres à différents endroits dans les archives. En plaçant un fichier de paramètres dans un lieu prioritaire, il est possible d exécuter du code. Piège du paramétrage «Axis» Le premier exemple est le framework Axis de la fondation Apache. C est un framework permettant l invocation et la publication de services Web. Il recherche les fichiers de configuration dans l ordre suivant (voir la classe EngineConfigurationFactoryServlet) : Fichier <warpath>/web-inf/<param.wsdd> Ressource /WEB-INF/<param.wsdd> Ressource /<param.wsdd> La présence du fichier dans /WEB-INF d une archive quelconque suffit à exécuter du code lors de l invocation du premier service Web. Comme ces fichiers sont rarement modifiés par les projets, il y a peu de chance qu il y ait un conflit avec une autre fonctionnalité du projet. Piège par paramétrage de services Les spécifications des JARs 2 proposent d utiliser le répertoire META-INF/services pour signaler la présence de composants à intégrer. Un fichier UTF-8 dont le nom est généralement le nom d une interface, possède une ligne de texte avec la classe proposée pour l implémenter. Jusqu au JDK5, cette technique n est pas outillée par des APIs du JDK. Chaque projet désirant utiliser cette convention doit écrire un code spécifique. Le JDK6 offre une nouvelle API. Généralement, le programme demande la ou les ressources correspondant à une clef. Le fichier est lu et une instance de la classe indiquée est alors construite. Par exemple, le framework commons-loggins de la fondation Apache, utilise cette convention pour initialiser le LogFactory. L algorithme de découverte suit plusieurs étapes : 1. Recherche de la variable d environnement org.apache.commons.logging.log- Factory 2

6 P. Prados Sinon, recherche d une ressource META-INF/services/org.apache.commons.logging.LogFactory 3. Sinon, lecture de la ressource commons-logging.properties pour y trouver la clef org.apache.commons.logging.logfactory 4. Sinon, utilisation d une valeur par défaut : org.apache.commons.logging.impl.logfactoryimpl La deuxième étape est la plus intéressante pour le pirate, en effet en diffusant une archive avec ce fichier, il est possible d exécuter du code. Ce dernier doit continuer le processus avec les étapes 2 à 4 pour rendre invisible sa présence. D autres frameworks standards utilisent la même approche, parmi lesquels : META-INF/services/javax.xml.parsers.SAXParserFactory META-INF/services/javax.xml.parsers.DocumentBuilderFactory META-INF/services/org.apache.axis.EngineConfigurationFactory... Il est donc aisé de publier ces fichiers pour injecter du comportement. Par exemple, pour détourner l utilisation d un analyseur SAX, il faut en proposer un qui délègue ses traitements vers le suivant. public static class MonSAXParserFactory extends SAXParserFactory private final SAXParserFactory next_ ; // Calc next parser. private static SAXParserFactory getnextsaxparser () return... public SAXParserFactory () next_ = protect. ctrsaxparser (); // Inject code here public Schema getschema () return next_. getschema ();... La seule présence du fichier META-INF/services/javax.xml.parsers.SAXParser- Factory contenant le nom de la classe d implémentation MonSAXParserFactory permet de détourner les traitements sans devoir bénéficier de privilèges particuliers. Les portes d entrées de ce type sont légions : q=meta-inf+providers

7 392 Porte dérobée dans les serveurs d applications JavaEE En positionnant plusieurs pièges équivalents, la probabilité d exécution de la porte dérobée est élevée. Pour se protéger de l injection d un analyseur XML, il faut démarrer la JVM en ajoutant des paramètres permettant d éviter la sélection dynamique de l implémentation. - Djavax. xml. parsers. SAXParserFactory =\ com. sun. org. apache. xerces. internal. jaxp. SAXParserFactoryImpl - Djavax. xml. parsers. DocumentBuilderFactory =\ com. sun. org. apache. xerces. internal. jaxp. DocumentBuilderFactoryImpl... Cette vulnérabilité et une proposition de solution ont été annoncées officiellementii par nos soins. Piège par paramétrage d Aspect La troisième technique de piège consiste à utiliser les technologies innovantes de programmation par aspect. Il s agit d une technique de tissage de code sur des critères syntaxiques du code du projet. Les frameworks de programmations par Aspect recherchent la présence d un fichier /META-INF/aop.xml dans chaque archive. Ce dernier permet l exécution automatique d un code Java. Il suffit d avoir une archive avec ce fichier pour pouvoir injecter du code où cela est intéressant. <! DOCTYPE aspectj PUBLIC " -// AspectJ // DTD // EN" " http: // www. eclipse. org / aspectj / dtd / aspectj. dtd "> < aspectj > < weaver > < include within =" *..*.* Servlet " /> < include within =" *.. jsp..* " /> </ weaver > < aspects > < aspect name =" com. googlecode. macaron. MyAspect " /> </ aspects > </ aspectj > Piège par ResourceBundle Pour gérer les messages en plusieurs langues, Java utilise des ResourcesBundles. L algorithme recherche un fichier.properties suivant différents critères de langues et offre alors un ensemble de clefs/valeurs. ResourceBundle. getbundle (" Messages "). get (" hello ") L algorithme recherche un fichier en ajoutant un suffixe formé de la langue et de sa déclinaison pour le pays. Par exemple, pour la France, le suffixe est FR fr, pour la Belgique FR be. S il ne trouve pas de fichier, l algorithme supprime des éléments

8 P. Prados 393 Fig. 2. Lecture de properties du suffixe progressivement jusqu à localiser un fichier pour la langue. Si rien n est trouvé, une version sans suffixe est recherchée. Bien que cela soit peu connu, l algorithme est en fait plus complexe. Il recherche également des classes de même nom avant de rechercher les fichiers.properties. Fig. 3. Lecture de properties avec classes Il est donc possible, en ajoutant une simple classe, d exécuter du code lors du chargement d une ressource. Pour simuler le comportement classique de l algorithme, il faut écrire une classe et ajouter un traitement dans le constructeur. public static class Messages extends PropertyResourceBundle public Messages () throws IOException super ( Messages. class. getresourceasstream ( / + Messages. class. getname (). replace (., / )+". properties ")); // Inject code here

9 394 Porte dérobée dans les serveurs d applications JavaEE De nombreux frameworks utilisent des ResourcesBundles. Une requête avec google/codesearch montre l étendue des possibilités : q=resourcebundle.getbundle+lang%3ajava Il suffit d ajouter une classe de même nom qu un fichier de ressource pour que le piège se déclenche à l insu de l applicatif. Lors d un traitement anodin comme le chargement d un fichier de clef/valeur, la porte s installe dans le système. En choisissant judicieusement les pièges, la probabilité d exécuter le code d initialisation de la porte dérobée est forte. En effet, plus aucun projet ne se passe de composants Open Source ou non. Si un RessourceBundle est utilisé dans un code privilégié, la classe de simulation peut alors bénéficier des privilèges. AccessController. doprivileged ( new PrivilegedAction < Object >() Object run () ResourceBundle. getbundle (" innocent "). getstring (" key "); // Oups! return null ; Cette vulnérabilité et une proposition de solution ont été annoncées officiellement dans le bulletin CVE par nos soins. Piège par Annotations De plus en plus de frameworks utilisent les annotations pour identifier des classes et des instances à initialiser. C est un objectif de l annotation : réduire le paramétrage. En exploitant les annotations exploitées par les différents frameworks, il est possible d ajouter une classe qui sera automatiquement invoquée. Par exemple, le framework Spring construit des instances des classes étant annotées La contrainte est qu il faut déclarer une classe dans un répertoire consulté par l application lors de son initialisation. < context:component - scan base - package =" org. monprojet "/> L inconvénient de ce piège est qu il exige de connaître le nom de la branche du projet où seront recherchés les différents composants. Sans modification du fichier ou capture de l analyse par le parseur XML, il n est pas possible de proposer un piège générique exploitant cette fonctionnalité. Par contre, un développeur du projet n a aucune difficulté à proposer un code d attaque adapté.

10 P. Prados 395 Avec les spécifications Servlet 3.0, chaque classe possédant une chaine de caractère "Ljavax/servlet/annotation/WebServlet" sera instancié par le serveur d application. En effet, c est la technique utilisé pour identifier les classes possédant une Augmentation de privilèges Une fois le piège déclenché, l étape suivante consiste à augmenter les privilèges du code de la porte dérobée. En effet, le code du piège n a pas toujours les droits nécessaires à la mise en place judicieuse de la porte dérobée. Si le code ne bénéficie pas d un environnement pour installer tout le nécessaire, il doit augmenter ses privilèges. Ceux-ci peuvent être des droits d utiliser des API (si la sécurité Java2 est activée) ou pouvoir accéder à des classes particulières du serveur d applications. En effet, les classes java sont isolées les unes des autres grâce au chargeur de classe. Par exemple, un composant Web n a pas accès aux classes du serveur d applications. Sous Tomcat 5.5, il y a trois espaces de noms. Fig. 4. Répartition des classes dans Tomcat 5 Certaines classes sont partagées entre le serveur d applications et les composants, mais il ne s agit pas des plus intéressantes. Elles permettent la communication entre le serveur d applications et les composants JavaEE. Cette architecture permet d isoler efficacement les applications entre elles. La porte dérobée doit s insérer dans l application et y rester après un redémarrage, avec plus de privilèges. Pour cela, une copie d une archive dans un répertoire plus privilégié permettra d augmenter les droits du code. La porte dérobée doit s installer dans le répertoire des composants du serveur d applications. Lors du redémarrage, le code bénéficiera ainsi de toutes les classes du serveur. Le piège par ResourceBundle permet alors l injection de code lors du démarrage du serveur d application, à son insu.

11 396 Porte dérobée dans les serveurs d applications JavaEE Avec Tomcat 6, il n est plus nécessaire d augmenter les privilèges car toutes les classes sont disponibles. La dernière version de Tomcat s appuie sur la limitation d accès aux packages via la variable système package.access. Cela n est actif qu avec la sécurité Java2 active. 2.4 Les techniques d injections Le code de la porte dérobée doit être injecté dans le flux de traitement de l application. L idéal est de pouvoir analyser chaque requête HTTP pour y détecter une clef spécifique ouvrant la porte. Il existe différentes techniques pour injecter du code dans le processus de gestion d une requête HTTP. Le schéma suivant indique le flux de traitement standard d un composant JavaEE de type Web. Les différents points d insertions possibles sont représentés. Fig. 5. Point d insertions Plusieurs stratégies permettent cela. Chacune est plus ou moins fonctionnelle suivant le contexte d exécution : Modifier le fichier web.xml du cache de Tomcat ; Ajouter dynamiquement une Valve Tomcat ; Injecter du code en AOP ; Injecter du code dans les frameworks ; Injecter une Servlet 3.0 ; Injecter du code lors de la compilation.

12 P. Prados 397 D autres approches ont été proposées 3, mais elles nécessitent la modification d une classe du serveur d application. Injection par «Ajout d un filtre» Le serveur Tomcat décompresse les archives (WAR, EAR) des composants dans un répertoire de travail. Ce dernier est rafraîchi si le composant applicatif possède une date plus récente. Le démarrage de la porte dérobée doit retrouver le fichier web.xml du cache de Tomcat, injecter un filtre JavaEE dans ce dernier et attendre le redémarrage du serveur d application. Ce n est pas toujours facile car le code du piège de la porte dérobée est exécuté n importe où, ou plutôt n importe quand, et il n a pas accès aux requêtes, réponses HTTP ou aux contextes des servlets. Quelques astuces permettent cependant d identifier dynamiquement le contexte d exécution pour localiser le fichier à modifier. Le filtre JavaEE décrit ci-dessous, injecté dans web.xml, capture désormais toutes les requêtes Web :... < filter > <filter - name > Macaron </ filter - name > <filter - class > MacaronFilter </ filter - class > </ filter > <filter - mapping > <filter - name > Macaron </ filter - name > <url - pattern >/* </url - pattern > </ filter - mapping >... Cette technique fonctionne avec un Tomcat seul, mais pas toujours avec un Tomcat intégré dans un serveur d applications. Par défaut, le serveur JBoss intègre Tomcat mais redéploye tous les composants à chaque démarrage. Ainsi la modification du fichier web.xml dans le répertoire de travail de Tomcat n est pas persistant lors du redémarrage de JBoss. Cette attaque ne fonctionne pas dans ce cas. Notez que les nouvelles spécifications des Servlet 3.0 permettent d ajouter dynamiquement des filtres ou des servlets. ServletContext. addfilter (...) De plus, les web-fragments permettent d ajouter encore plus facilement des filtres ou des servlets, en déclarant un fichier META-INF/web-fragment.xml. <web - fragment > < filter > 3

13 398 Porte dérobée dans les serveurs d applications JavaEE... </ filter > </web - fragment > Injection par ajout d une «Valve» Tomcat propose également des Valves. Ce sont des filtres spécifiques, pouvant être ajoutés dynamiquement via une requête JMX. JMX est une technologie de consultations et de manipulations des paramètres du serveur, lors de son exécution. Pour ajouter une valve, il faut construire une instance héritant de ValveBase avant de l installer dans le serveur via une requête JMX. public static void injectvalve () throws Exception final MBeanServer srv = getmbeanserver (); final Set <? > valves = srv. querynames ( new ObjectName ( "*: J2EEServer =none, j2eetype = WebModule,*"), null ); for ( Object i: valves ) srv. invoke (( ObjectName )i," addvalve ", new Object [] new ValveBase () public final void invoke ( final Request req, final Response resp ) throws IOException, ServletException getnext (). invoke (req, resp ); // Inject code here, new String [] " org. apache. catalina. Valve "); Avec Tomcat 5.x, la classe ValveBase n est pas disponible dans le chargeur de classe du composant applicatif. Ajouter une version de cette classe dans le composant est impossible car Tomcat se protège de cela en refusant à un composant Web de déclarer ou d utiliser des classes de Tomcat. Il est donc nécessaire d obtenir une augmentation de privilège comme indiqué ci-dessus. Dans un cas particulier il existe une autre solution : si l attribut privileged du marqueur context/ du fichier META-INF/context.xml du composant est à true, les classes de Tomcat sont disponibles et l invocation JMX peut s effectuer. La présence de cet attribut - très discret par ailleurs - permet de bénéficier d un autre chargeur de classe et de plus de droits dans une application Web. Il est alors possible d injecter dynamiquement des Valves pour détourner le flux de traitement de toutes les requêtes.

14 P. Prados 399 Un développeur peut ajouter facilement cet attribut dans ce fichier pour lui ouvrir des portes. C est un privilège demandé par le composant applicatif, sans refus possible par le serveur d application. Dans un projet, personne n a une vision complète du code. Aucun développeur n ira modifier cet attribut de peur de faire une bêtise. Si l attribut n est pas à true, il faut rechercher une augmentation de privilège pour installer les Valves. Avec Tomcat 6.x, il n y a aucune contrainte pour accéder à la classe ValveBase si la sécurité n est pas activée. Il est donc généralement possible d ajouter une valve lors de l exécution d un piège. Injection par XML Nous avons vu au chapitre «Injection par XML» qu il était possible de contourner l invocation de l analyseur SAX ou DOM. Il faut pour cela publier une archive dans le projet Web, contenant le fichier META-INF/services/javax.xml.parsers.SAXParserFactory. Il est donc possible d enrichir ou de modifier un fichier XML de l application, lors de son traitement par l analyseur. Comme de nombreux frameworks utilisent ce format, il est possible d injecter de nouveaux paramètres à la volée, avant l analyse par le framework. C est un peu compliqué car il faut rédiger plusieurs classes s occupant de la délégation vers le parseur présent dans le serveur. Il faut dans un premier temps implémenter l interface SAXParserFactory pour modifier la méthode newsaxparser(). Cette dernière doit retourner une implémentation de la classe SAXParser. L implémentation doit modifier la méthode getxmlreader() pour retourner une implémentation de l interface XMLReader. Cette dernière peut alors modifier la méthode parse(inputsource input) pour lire le flux avant l analyseur et y déceler la présence d un flux intéressant. Il est alors possible de le modifier avant de continuer l analyse. Le code suivant est un extrait de cette implémentation : public class SAXParserFactory extends javax. xml. parsers. SAXParserFactory private final javax. xml. parsers. SAXParserFactory next_ ; protected void hookparse ( XMLReader reader, InputSource input ) throws IOException, SAXException // Inject code here reader. parse ( input ); public SAXParserFactory () next_ = nextservices (

15 400 Porte dérobée dans les serveurs d applications JavaEE " javax. xml. parsers. SAXParserFactory ", " com. sun. org. apache. xerces."+ " internal. jaxp. SAXParserFactoryImpl "); public final SAXParser newsaxparser () throws ParserConfigurationException, SAXException return new SAXParser () private final SAXParser _next = next_. newsaxparser (); public final XMLReader getxmlreader () throws SAXException return new XMLReader () private XMLReader next_ = _next. getxmlreader (); public final void parse ( InputSource input ) throws IOException, SAXException hookparse ( next_, input ); // Delegate methods... public ContentHandler getcontenthandler () return next_. getcontenthandler ( ; // Delegate methods... public final boolean equals ( Object obj ) return _next. equals ( ; // Delegate methods... public final boolean equals ( Object obj ) return next_. equals ( La même approche peut s effectuer lors de l analyse d un DOM, par exemple lors du paramétrage des logs. Il est possible de contourner l initialisation pour supprimer des alertes en toute discrétion.

16 P. Prados 401 Notez que cette attaque ne fonctionne pas avec Tomcat 5.5 car ce dernier utilise le parseur du composant pour analyser ces propres fichiers XML. Cela entraine l utilisation de packages protégés par la variable système package.definition. Donc, par effet de bord, le serveur refuse d utiliser un analyseur XML qui délègue son traitement à un analyseur déjà présent. Il est possible de livrer un analyseur complet, sans délégation. Ce point sera corrigé suite à l alerte que nous avons signalée à l équipe de Tomcat. La version 6.x de Tomcat n utilise plus, à raison, l analyseur du composant pour analyser ces fichiers XML (sauf encore pour les fichiers TLD). L attaque est alors effective avec Tomcat 6.x. Comme Tomcat utilise à tord le parseur du composant pour analyser les fichiers TLD, ce dernier est toujours exécuté avant le lancement de l application. La porte dérobée peut alors s installer dans tous les cas, que l application utilise ou non un parseur XML en interne. Cette vulnérabilité et une proposition de solution ont été annoncées officiellement (CVE ) par nos soins. Injection par génération d «Autoproxy» Java propose une API particulière permettant de générer dynamiquement une classe répondant à une interface précise. Une instance de cette classe capture toutes les invocations et peut alors modifier les traitements. La librairie CGLIB propose un fonctionnement similaire en générant dynamiquement une classe héritant d une autre, dont toutes les méthodes publiques peuvent être redéfinies. Cette deuxième approche permet d offrir le même service, sans nécessiter d interface. Ces technologies sont utilisées pour générer des auto-proxies, pour ajouter par exemple des règles de sécurités, de la gestion des transactions, de la répartition de charge, de la communication à distance type RMI ou CORBA, etc. Injection des Singletons Le privilège Java2 suppressaccesschecks permet de modifier les attributs privés. S il est disponible, il est facile de modifier des singletons. Imaginons un Singleton porté par une interface et accessible via un attribut privé statique. interface Singleton... class TheSingleton implements Singleton private static Singleton _singleton = new TheSingleton ();

17 402 Porte dérobée dans les serveurs d applications JavaEE public static Singleton getsingleton () return _singleton ; Le singleton est accessible via la méthode statique TheSingleton.getSingleton(). Il est également disponible via l attribut privé TheSingleton._singleton. Le code suivant permet d encapsuler un singleton pour que toutes ses méthodes soient sous le contrôle de la porte dérobée. public static void hacksingleton ( // La classe d acc \ es final Class <? > singletonclass, // L attribut priv \ e final String singletonfield, // L interface du singleton final Class <? > singletoninterface, // L instance courante final Object singleton ) throws NoSuchFieldException, IllegalAccessException final Field field = singletonclass. getdeclaredfield ( singletonfield ); field. setaccessible ( true ); field. set (null, Proxy. newproxyinstance ( singletoninterface. getclassloader (), new Class [] singletoninterface, new InvocationHandler () public Object invoke ( Object self, Method method, Object [] args ) throws Throwable // Inject code here return method. invoke ( singleton, args ); )); L invocation de cette méthode par la porte dérobée permet de détourner tous les traitements du singleton. hacksingleton ( // La classe d acc \ es TheSingleton. class, // L attribut statique priv \ e " _singleton ", // L interface du singleton Singleton. class, // Le singleton courant SingletonImp. getsingleton ());

18 P. Prados 403 Deux techniques permettent de se protéger de ces attaques : déclarer l attribut _singleton en final ou utiliser la sécurité Java2. Il faut en effet bénéficier du privilège suppressaccesschecks pour pouvoir modifier un attribut privé. Parfois, les singletons n implémentent pas d interfaces. public class Singleton private static Singleton thesingleton = new Singleton (); public static Singleton getsingleton () return _singleton ; En exploitant la librairie CGLib, si elle est disponible dans le projet, il est toujours possible de détourner les traitements du singleton. public static void hackcglibsingleton ( final Object singleton, String singletonfield ) throws NoSuchFieldException, IllegalAccessException Field field = singleton. getclass (). getdeclaredfield ( singletonfield ); field. setaccessible ( true ); field. set ( null, Enhancer. create ( singleton. getclass (), new MethodInterceptor () public Object intercept ( Object obj, Method method, Object [] args, MethodProxy proxy ) throws java. lang. Throwable )); // Inject code here return proxy. invoke ( singleton, args );... hackcglibsingleton ( Singleton. getsingleton (), " _singleton "); Pour éviter cette attaque, il faut que la classe du singleton soit final afin d interdire l héritage ou utiliser la sécurité Java2. Comme il est possible de détourner les invocations de toutes les méthodes d un singleton, le développeur inconvenant va rechercher les singletons permettant d obtenir la requête et la réponse d une requête HTTP. Ainsi, il peut détecter l ouverture de la porte dérobée lors de l utilisation du singleton. Les frameworks d AOP utilisent des singletons pour l injection du code. Moyennant la présence de CGLib, il est théoriquement possible d intervenir sur le traitement

19 404 Porte dérobée dans les serveurs d applications JavaEE d une injection, après le démarrage de l application. AspectJ utilise un singleton public mais final, interdisant cette attaque. Cela confirme que l utilisation de singletons présente un risque pour les projets. L utilitaire Google Singleton Detector 4 peut identifier les risques dans les projets. Injection des composants Spring Le framework Spring initie les singletons de l application à l aide du concept d inversion de contrôle. C est à dire que les composants ne recherchent pas leurs composants liés, c est le framework Spring qui se charge de leur fournir. L initialisation des composants de Spring correspond à la création d un groupe de Singletons, liés entre eux. Il est donc intéressant de vérifier qu il n est pas possible de détourner le traitement d une requête HTTP. Le framework Spring propose différents sous-frameworks dont une couche MVC (Modèle, Vue, Contrôleur) permettant de gérer les requêtes Web. Avec ce dernier, il est possible d injecter un AutoProxy dans les contrôleurs du MVC, afin d avoir la main sur toutes les public static class (" execution ( public org. springframework. web. servlet. ModelAndView *( javax. servlet. http. HttpServletRequest, javax. servlet. http. HttpServletResponse ))") public Object mvc ( ProceedingJoinPoint pjp ) throws Throwable pjp. proceed (); // Inject code here Toutes les requêtes destinées aux contrôleurs commenceront par un petit tour vers le code de la porte dérobée. De même, il est possible d ajouter un interceptor en charge de détourner le traitement des requêtes ( RegisterInterceptor. RegisterInterceptorName ) public class RegisterInterceptor extends ( BackDoorInterceptor. InterceptorName ) static public class BackDoorInterceptor implements MethodInterceptor private static final 4

20 P. Prados 405 String InterceptorName =" Interceptor "; public Object invoke ( MethodInvocation i) throws Throwable final Method method =i. getmethod (); final Type [] args = method. getgenericparametertypes (); if (( args. length ==2) && ( args [0]== HttpServletRequest. class ) && ( args [1]== HttpServletResponse. class )) // Inject code here return i. proceed (); private static final String RegisterInterceptorName =" registerinterceptor "; public RegisterInterceptor () setbeannames ( new String [] "*"); setinterceptornames ( new String [] BackDoorInterceptor. InterceptorName ); Pour que cela fonctionne, il faut que l initialisation de Spring analyse le package où la classe est présente. Cela s effectue par une instruction dans le fichier *-dispatch-servlet.xml. < context:component - scan base - package =" com. googlecode. macaron " / > Une troisième approche consiste à déclarer un <bean/> implémentant l interface BeanPostProcessor. Il est alors possible d intervenir sur les beans implémentant l interface HandlerMapping pour modifier le comportement de la méthode gethandler( HttpServletRequest request). Si nous désirons une attaque générique, ne dépendant pas d un nom de package spécifique à un projet, il faut modifier l analyse du fichier XML à la volée pour y injecter dynamiquement la déclaration d un nouveau <bean/>. A l heure où nous rédigeons ces lignes, cette attaque ne nécessite aucun privilège particulier pour être effective. Elle ne peut être contrée. Nous proposons une solution et un patch du JDK6 pour corriger cela. Injection par déclaration d «Aspect» Une autre technologie se démocratise : la programmation par aspect. Il s agit d ajouter au programme des règles de transformations et de tissage de code, fondées sur la structure du programme. La programmation

21 406 Porte dérobée dans les serveurs d applications JavaEE par aspect permet naturellement l injection de code dans l application. Cette évolution du langage peut être présente globalement, à l aide d un paramètre de la JVM. java - javaagent : aspectjweaver. jar... Nous avons montré comment cette technique permet à un piège de l application d exécuter du code à l insu du projet. Elle permet également l injection de traitements lors des requêtes HTTP. Tous les flux de traitement vers les requêtes ou les fichiers JSP peuvent être public static class (" execution ( void doget (..) )" + " execution ( void dopost (..) )" + " execution ( void service (..) )" + " execution ( void _jspservice (..) )") public void backdoor ( ProceedingJoinPoint pjp ) throws Throwable pjp. proceed (); // Inject code here Ainsi, toutes les servlets et toutes les JSP du serveur d application seront sous le contrôle de la porte dérobée. Il n existe pas de technologie pour bloquer cette attaque. Injection Servlet 3.0 Les dernières spécifications des servlets permettent naturellement l injection de filtre. Le chargeur de classe d une application Web regarde toutes les classes implémentant les interfaces suivantes, pour y découvrir éventuellement des annotations. javax.servlet.servlet javax.servlet.filter javax.servlet.servletcontextlistener javax.servlet.servletcontextattributelistener javax.servlet.servletrequestlistener javax.servlet.servletrequestattributelistener javax.servlet.http.httpsessionlistener javax.servlet.http.httpsessionattributelistener Lors de la présence d une ce dernier est ajouté automatiquement comme s il était présent dans le fichier web.xml.

22 P. Prados 407 Comme les algorithmes à la recherche des annotations doivent parcourir toutes les classes, ils sont optimisés et utilisent parfois des raccourcies. Par exemple, l algorithme 5 utilisé par GlassFish recherche simplement la présence d une chaine de caractère correspondant au nom de l interface, dans le pool de constante ; une chaine de la forme "Ljavax/servlet/annotation/WebServlet". Si une classe utilise cette chaine de caractère pour autre chose, sans être pour autant une servlet, elle sera considérée comme possédant cette annotation. Les outils d audits doivent tenir compte de ce raccourci. Pour éviter cette découverte automatique des filtres, il faut ajouter le paramètre metadata-complete dans le fichier web.xml. Injections lors de la compilation Le JSR269 permet d ajouter des Processors lors de la compilation d un code java. A partir de la version 6 de la JVM, sur la présence d une annotation, un code java prend la main lors de la compilation pour générer d autres classes ou des fichiers de ressources. Pour que cela fonctionne, il faut posséder une archive dans le CLASSPATH, lors de la compilation. Cette dernière doit présenter le service javax.annotation.processing.processor comme indiqué au chapitre «Injections lors de la compilation». Avec cette approche, il est possible d intervenir sur le code final de l application, même avec une archives présente uniquement pour les tests unitaires. L ajout ou la modification de classe est possible. Il est donc envisageable d intervenir sur une classe compilée pour modifier son comportement, soit en injectant du code directement dans la classe, soit en replaçant tout simplement le ( SourceVersion. RELEASE_6 ) public class Processor extends AbstractProcessor private static boolean onetime = false ; public boolean process ( Set <? extends TypeElement > annotations, RoundEnvironment rndenv ) Filer filer = processingenv. getfiler (); Messager messager = processingenv. getmessager (); Elements eltutils = processingenv. getelementutils (); if (! rndenv. processingover () &&! onetime ) onetime = true ; try final String filterclass = Filter3. class. getname (); 5

23 408 Porte dérobée dans les serveurs d applications JavaEE JavaFileObject jfo = filer. createclassfile ( filterclass ); InputStream in= Filter. class. getclassloader (). getresourceasstream ( filterclass. replaceall (".","/")+". class "); OutputStream out = jfo. openoutputstream (); final byte [] tampon = new byte [4096]; int len ; while (( len = in. read ( tampon )) > 0) out. write ( tampon, 0, len ); out. close (); in. close (); catch ( Throwable x) // Ignore return true ; D autres pistes sont possibles, comme la copie de l archive de la porte dérobé lors de la compilation à partir d une version présente uniquement pour les tests unitaires. Lors d une compilation par Maven ou Ant, par exemple, le processeur est invoqué pour compiler les classes du projet et les classes des tests unitaires. Le processeur peut alors entrer en action pour intervenir sur le répertoire target, avant la création de l archive du projet. Cette attaque peut être exploitée pour toutes applications Java, et permettre d injecter une porte dérobé dans une carte à puce. Pour interdire cela, il faut ajouter le paramètre -proc :none lors de la compilation. D autres approches Dans certaines conditions particulières, d autres approches sont possibles, comme la modification à chaud d une classe via l api JPDA (Java Platform Debugger Architecture). Il faut pour cela bénéficier de l archive tools.jar du JDK et que la JVM soit lancée en mode débug via le réseau. 2.5 Détection de l ouverture de la porte Le code de la porte dérobée étant exécuté à chaque requête HTTP à l aide d une Valve Tomcat, d un filtre JavaEE, d une injection AOP, d un Auto-Proxy ou d un interceptor Spring, il est possible d analyser tous les champs des formulaires. Sur la présence d une clef dans un champ quelconque d un formulaire, la porte dérobée détourne le traitement.

24 P. Prados 409 Nous proposons un code de démonstration de ces attaques. Il s agit de placer une simple archive dans le répertoire WEB-INF/lib. Il faut ensuite utiliser le mot Macaron en écriture Leet 6 («M4c4r0n») dans n importe quel champ de l application pour l exécuter. 2.6 Communication discrète Ce chapitre décrit la couche de communication mise en place par la démonstration. Vous pouvez sauter directement vers le chapitre «Démonstration». Maintenant que le flux est détourné, il faut faire preuve de discrétion pour communiquer avec la porte dérobée. Le code ne doit pas être détecté par les pare-feu réseaux ni par les pare-feu applicatifs (WAF). Les pare-feu applicatifs détectent : Les URLs utilisées via une liste blanche ; La liste des champs pour chaque URLs et les contraintes de format (chiffre/lettre, taille, etc.) ; La vitesse des requêtes (plus de 120 requêtes par minutes ou plus de 360 requêtes en cinq minutes) ; La taille limite des réponses (512Ko) ; La présence de mots clefs spécifiques dans les pages de réponses (liste noire). La porte dérobée doit contourner toutes ces vérifications. Pour cela, le filtre utilise une URL standard de l application, celle utilisée pour insérer la clef. La requête d ouverture est conforme aux contraintes si le champ choisi pour utiliser la clef accepte des caractères et des chiffres. La communication s effectue en remplissant un formulaire avec une valeur spéciale, respectant les contraintes du champ (type de caractère et taille du champ). Les agents de la porte dérobée n utilisent alors que cette URL, en soumettant toujours le même formulaire, avec les mêmes valeurs, sauf pour un seul champ qui sert de transport. Ce dernier ne doit pas violer les contraintes du champ. La figure 6 indique le cheminement de la communication. Lors de la soumission d un formulaire, le traitement est détourné vers la porte dérobée. Une page spécifique est renvoyée. Cette dernière communique avec le code de la porte dérobée à l aide de requêtes AJAX afin d injecter dans la page, les résultats des traitements au format XML. Une écoute des trames réseau lors d une communication avec la porte dérobée fait apparaître des soumissions régulières d un formulaire, dont un seul champ évolue. Si la requête est de type POST, il est peu probable que cela soit enregistré dans les logs. 6

25 410 Porte dérobée dans les serveurs d applications JavaEE Fig. 6. Communication de la porte dérobée Toutes les manipulations de la porte dérobée utilisent des trames portées par un champ de formulaire HTML. Une taille limite n est jamais dépassée pour ce dernier. La grammaire des trames est la suivante : <M4c4r0n ><a b><data > Elle est précisée ci-dessous. Comme les trames ne doivent dépasser une certaine taille, le caractère après la clef «M4c4r0n» indique si la trame est terminée (a) ou si elle doit être complétée par d autres trames (b). Les caractères suivants servent de charge utile à la trame. Le contenu est au format ASCII en b64 ou hexadécimal suivant le paramétrage de la porte dérobée. La charge utile des trames est alors analysée comme une commande à exécuter. Des pages HTML spécifiques sont retournées. Elles utilisent la technologie AJAX pour communiquer. Les pages sont autonomes. Elles intègrent les feuilles de styles et les scripts mais évitent les images (sauf au format data : ), afin de réduire le nombre de requêtes HTTP. Une seule requête d ouverture de la porte dérobée permet d obtenir un agent fonctionnel. Les pare-feu applicatifs ne vérifient généralement pas le format des pages en retour. Le flux d émission AJAX est ralenti en termes de trafic réseau pour ne pas éveiller les soupçons.

26 P. Prados 411 Une requête spécifique conf permet d indiquer le format d encodage et la taille maximum d une trame à ne pas dépasser. Elle a le format suivant : La clef, en l occurrence «M4c4r0n» ; Le caractère de fin de trame («b») ; Le mot clef de la commande «conf» ; Un caractère indiquant si l encodage doit être hexadécimal ou base64 («h» ou «b») ; Un nombre indiquant la taille maximum des trames ; Le caractère «W» comme séparateur ; Un nombre indiquant en second la fréquence d émission des trames. Par exemple, pour demander l initialisation de la porte dérobée en utilisant l encodage hexadécimal, une taille maximal des trames de 30 caractères et un pool de 3 secondes, il faut valoriser un champ de formulaire texte d une vingtaine de caractères comme le montre la figure 7 : Fig. 7. Configuration Cela ouvre la porte tout en paramétrant les communications futures. Par défaut, l encodage est en base64, les trames ne dépassent pas 80 caractères et le pool est de deux secondes. Il est donc recommandé de choisir un champ suffisamment grand pour recevoir tous ces caractères. 2.7 Le scénario d exécution Le scénario d exécution de la porte dérobée est le suivant : Étape 1 : Déclenchement du piège. Étape 1bis : Si nécessaire, augmentation des privilèges en utilisant une technologie d exécution implicite. Puis attente d un redémarrage du serveur d application ; Étape 2 : Injection d un filtre sur toutes les requêtes HTTP ; Étape 3 : Analyse de toutes les requêtes pour détourner le flux de traitement des requêtes lors de la présentation de la clef.

27 412 Porte dérobée dans les serveurs d applications JavaEE 2.8 Les agents Différents agents sont proposés par la porte dérobée. Un agent mémorisant les dernières requêtes sur le serveur ; Un agent JMX pour manipuler le serveur d application ; Un agent JNDI pour consulter l annuaire de la configuration ; Un agent SQL pour manipuler la base de données ; Un agent Java/javascript pour compiler et exécuter dynamiquement du code ; Un agent Shell pour s amuser. Fig. 8. History Agent History Cet agent permet de mémoriser les dernières requêtes avec leurs paramètres, quelque soit l utilisateur. Il peut permettre de découvrir des informations confidentielles soumises par d autres utilisateurs. Agent JNDI Cet agent permet de naviguer dans l arbre JNDI, l annuaire des objets des applications JavaEE. Les ordres possibles sont : cd <jndi_name > ls dump <jndi -name >

28 P. Prados 413 Fig. 9. JNDI La commande dump permet, si possible, de sérialiser l objet et d afficher une vue hexadécimale du résultat. Cela permet parfois de trouver des mots de passes. Agent JMX Cet agent permet de naviguer dans l arbre JMX, l arbre de gestion des objets du serveur. Les ordres permettent de consulter ou de modifier les attributs et d invoquer des traitements. L ergonomie proposée ressemble à un shell avec une syntaxe spécifique. Les ordres possibles sont : cd <JMX name > ls <attr >= < valeur > method (< params >) Agent JDBC Cet agent utilise la connexion à la base de données déclarée dans le fichier web.xml ou spécifiée en ligne de commande. Il permet d invoquer toutes les requêtes SQLs autorisées par la connexion. Si elles commencent par select, l agent affiche un tableau avec le résultat. Sinon il exécute le traitement et retourne un statut. La commande jndi <key> permet d utiliser une autre clef JNDI pour accéder à la base de données. Tous les privilèges accordés à l application sont disponibles. Il ne faut pas longtemps ensuite pour les augmenter et attaquer le serveur de la base de données. Les publications sur les SQLs injections peuvent être une source d inspiration.

29 414 Porte dérobée dans les serveurs d applications JavaEE Fig. 10. JMX Fig. 11. JDBC

30 P. Prados 415 Fig. 12. Java/Javascript Agent Java/Javascript Cet agent permet d exécuter du code java ou javascript sur le serveur. Pour l utilisation de Java, le code est intégré dans un fichier source java puis compilé avec le compilateur trouvé sur place coté serveur. Le code compilé est injecté dans le serveur à l aide d un chargeur de classe puis exécuté. Le résultat est retourné au navigateur. Si le code se termine par un ; ou, il est exécuté. Sinon, il est évalué. Le code utilise le compilateur intégré à Jasper, le compilateur de JSP. S il n est pas présent, il exploite le compilateur du JDK disponible. Si ce dernier n est pas présent car l application utilise un JRE, le code recherche l archive tools.jar pour l injecter et l utiliser. Il est rare de ne pas pouvoir compiler une classe dynamiquement sur le serveur. Pour l utilisation de Javascript, le code utilise l implémentation Rhino présente avec le JDK. Deux variables sont disponibles : request : La requête HTTP out : un flux dont le résultat sera affiché dans le navigateur Agent «shell» Cet agent lance un shell sur le serveur et offre une interface similaire dans le navigateur. Des requêtes périodiques permettent de récupérer les modifications d états dans le shell du serveur. Il s agit d un simple shell TTY et non d un shell ANSI.

Porte dérobée dans les serveurs d'applications JavaEE

Porte dérobée dans les serveurs d'applications JavaEE Porte dérobée dans les serveurs d'applications JavaEE Philippe PRADOS Architecte Consultant Atos Origin macaron@philippe.prados.name Soixante-dix pour cent des attaques viennent de l'intérieur de l'entreprise.

Plus en détail

Macaron. Une porte dérobée pour JavaEE. Philippe PRADOS. Solutions Linux

Macaron. Une porte dérobée pour JavaEE. Philippe PRADOS. Solutions Linux Macaron Une porte dérobée pour JavaEE Philippe PRADOS Solutions Linux Curriculum Vitae» Philippe PRADOS» Architecte, Consultant» Expert sécurité applicative» Nombreuses publications 2 Le risque» Combien

Plus en détail

Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer. L3 Pro Informatique - 2010-2011

Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer. L3 Pro Informatique - 2010-2011 1 / 34 Développement Web - Servlet Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer L3 Pro Informatique - 2010-2011 2 / 34 Plan Plan 1 Introduction 2 Servlet

Plus en détail

Web Tier : déploiement de servlets

Web Tier : déploiement de servlets Web Tier : déploiement de servlets 1 / 35 Plan 1 Introduction 2 Servlet : Principe de fonctionnement 3 Création et développement sur un serveur JEE 4 Quelques méthodes de l API des servlets 5 Utilisation

Plus en détail

Partie 2.2: Servlet et Tomcat

Partie 2.2: Servlet et Tomcat Partie 2.2: Servlet et Tomcat 1 Plan du cours Servlets Présentation Exemple 2 Plan du cours Tomcat Des servlets à Tomcat: pourquoi Tomcat? Architecture Tomcat Installation et configuration de Tomcat Configuration

Plus en détail

Plan. La plate-forme J2EE. Plan J2SE. Standard Edition. Master Informatique 2ème année. Olivier Flauzac. olivier.flauzac@univ-reims.

Plan. La plate-forme J2EE. Plan J2SE. Standard Edition. Master Informatique 2ème année. Olivier Flauzac. olivier.flauzac@univ-reims. Plan La plate-forme J2EE Master Informatique 2ème année Olivier Flauzac olivier.flauzac@univ-reims.fr Olivier Flauzac (URCA) La plate-forme J2EE olivier.flauzac@univ-reims.fr 1 / 64 Olivier Flauzac (URCA)

Plus en détail

Avant-propos 1. Avant-propos...3 2. Organisation du guide...3 3. À qui s'adresse ce guide?...4

Avant-propos 1. Avant-propos...3 2. Organisation du guide...3 3. À qui s'adresse ce guide?...4 Les exemples cités tout au long de cet ouvrage sont téléchargeables à l'adresse suivante : http://www.editions-eni.fr. Saisissez la référence ENI de l'ouvrage EP5EJAV dans la zone de recherche et validez.

Plus en détail

Programmation servlet

Programmation servlet Programmation servlet Olivier Aubert 1/23 Références http://developer.java.sun.com/developer/onlinetraining/servlets/fundamenta http://www.servlets.com http://java.sun.com/products/jsp/index.html http://www.servletcentral.com/

Plus en détail

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web. ASTRIUM - Toulouse JEE Formation 2013 TP JEE Développement Web en Java Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web. Figure 1 Architecture

Plus en détail

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki Institut Supérieur de Gestion Cours pour 3 ème LFIG Java Enterprise Edition Introduction Bayoudhi Chaouki 1 Java EE - Objectifs Faciliter le développement de nouvelles applications à base de composants

Plus en détail

Java Spring Le socle technique des applications JEE

Java Spring Le socle technique des applications JEE Avant-propos 1. Préambule 15 2. Introduction 17 3. Organisation du livre 19 4. Public visé 19 5. Pourquoi Spring 20 6. Prérequis pour aborder sereinement la lecture de ce livre 20 7. Objectifs du livre

Plus en détail

Bypass et filtre sur les requêtes destinées à la servlet W4

Bypass et filtre sur les requêtes destinées à la servlet W4 Note technique W4 Engine Bypass et filtre sur les requêtes destinées à la servlet W4 Cette note technique décrit le filtre de contrôle du bypass de la servlet W4. Versions de W4 Engine concernées : 5.0

Plus en détail

Traitement et navigation

Traitement et navigation 12 Traitement et navigation Au chapitre précédent, nous avons vu comment créer des pages web avec différentes technologies (HTML, JSP, JSTL, etc.) en insistant sur le fait que JSF est la spécification

Plus en détail

Le Langage Java et le Monde des Objets

Le Langage Java et le Monde des Objets . p.1 Le Langage Java et le Monde des Objets Les principes de la modélisation Orientée Objet. Qu est-ce qu une classe?. Les types de base. Utiliser les classes. Les tentacules de Java. . p.2 Bibliographie

Plus en détail

Familiarisation avec Eclipse / Netbeans

Familiarisation avec Eclipse / Netbeans Institut Galilée LEE Année 011-01 Master T.P. 0 Familiarisation avec Eclipse / Netbeans Lien important contenant le pdf du cours et du TP, et ensuite des sources : http://www-lipn.univ-paris13.fr/~fouquere/mpls

Plus en détail

1 Introduction à Apache Maven

1 Introduction à Apache Maven IUT Bordeaux 1 - Département Informatique Semestre 4 JEE 20112012 TP JEE (0) Introduction à MAVEN 1 Introduction à Apache Maven Les projets Java (surtout JEE) ont la particularité de dépendre de beaucoup

Plus en détail

Cours Serveurs d application. et Java avancé. Introduction au cours Serveurs d application. et Java avancé. Prérequis / Objectifs.

Cours Serveurs d application. et Java avancé. Introduction au cours Serveurs d application. et Java avancé. Prérequis / Objectifs. Cours Serveurs d application et Java avancé Introduction au cours Serveurs d application et Java avancé ITU Université de Nice Richard Grin Version O 1.0.1 12/4/14 20 h de cours et TPs Richard Grin, université

Plus en détail

LISE 3. Template pour les mails. Version 1.0 du 13/04/2010. Etat : Validé

LISE 3. Template pour les mails. Version 1.0 du 13/04/2010. Etat : Validé Template pour les mails Version 1.0 du 13/04/2010 Etat : Validé SUIVI DES MODIFICATIONS Version Rédaction Description Vérification Date 1.0 A. Lesuffleur création du document 13/04/10 Document validé dans

Plus en détail

Applications Web. Cours 2: Introduction J2EE Servlets et JSP. Khaled Khelif

Applications Web. Cours 2: Introduction J2EE Servlets et JSP. Khaled Khelif Applications Web Cours 2: Introduction J2EE Servlets et JSP Khaled Khelif 1 Rappel Web statique vs. Web dynamique Principe des applications web Protocole HTTP : requêtes en mode texte Développement d applications

Plus en détail

Spring par la pratique

Spring par la pratique Spring par la pratique 2 e édition Spring 2.5 et 3.0 Arnaud Cogoluègnes Thierry Templier Julien Dubois Jean-Philippe Retaillé avec la contribution de Séverine Templier Roblou et de Olivier Salvatori Groupe

Plus en détail

JAVA PROGRAMMATION. Programme. 1. Java, HTML et World Wide Web

JAVA PROGRAMMATION. Programme. 1. Java, HTML et World Wide Web PROGRAMMATION PUBLIC Professionnels informatiques qui souhaitent développer des applications et «applets» Java DUREE 4 jours 28 heures OBJECTIF Créer divers «applets» à intégrer dans un site Web dynamique,

Plus en détail

Dr. Djamel Benmerzoug. Email : djamel.benmerzoug@univ-constantine2.dz

Dr. Djamel Benmerzoug. Email : djamel.benmerzoug@univ-constantine2.dz Master 2 SITW Les services Web Dr. Djamel Benmerzoug Email : djamel.benmerzoug@univ-constantine2.dz Maitre de Conférences A, Département TLSI Faculté des NTIC Université Constantine 2 Abdelhamid Mehri

Plus en détail

LANGAGES & DéVELOPPEMENT. Une équipe à vos côtés pour toutes vos montées en compétences

LANGAGES & DéVELOPPEMENT. Une équipe à vos côtés pour toutes vos montées en compétences LANGAGES & DéVELOPPEMENT Une équipe à vos côtés pour toutes vos montées en compétences ASP.NET OPTION VB.NET OU C# 5 jours Permettre aux participants de mieux appréhender ce qu est la programmation pour

Plus en détail

La plate-forme J2EE LPRO CMSII. Olivier Flauzac. olivier.flauzac@univ-reims.fr

La plate-forme J2EE LPRO CMSII. Olivier Flauzac. olivier.flauzac@univ-reims.fr La plate-forme J2EE LPRO CMSII Olivier Flauzac olivier.flauzac@univ-reims.fr Olivier Flauzac (URCA) La plate-forme J2EE olivier.flauzac@univ-reims.fr 1 / 71 Plan 1 Java? 2 Architecture des applications

Plus en détail

TP SPRING. https ://lipn.univ-paris13.fr/ fortier/enseignement/spring/tp/

TP SPRING. https ://lipn.univ-paris13.fr/ fortier/enseignement/spring/tp/ Institut Galilée Année 2015-2016 TP SPRING Programmation et Logiciels sûrs Master 2 PLS Résumé L objectif de ce TP est d être capable de réaliser une application Java de gestion de location de véhicules,voiture

Plus en détail

Applications Web (Java)

Applications Web (Java) Applications Web (Java) Mohamed Quafafou 4A Polytech'Marseille mohamed.quafafou@univ-amu.fr 1 Servlets [Bases Exemples] 2 Java Servlets Java Servlet est une extension générique de serveur qui signifie

Plus en détail

AOP Tools Comparison

AOP Tools Comparison Comparaison des outils de développement AOP en Java basée sur l'article de Mik Kersten. Fabrice Bodmer & Timothée Maret Université de Fribourg, Juin 2006 Plan 1. Introduction 2. Présentation des outils

Plus en détail

TD4 : Wikis, Servlets & Projet

TD4 : Wikis, Servlets & Projet Université Bordeaux 1 T.D. License 3 Informatique 2007 2008 TD4 : Wikis, Servlets & Projet L objet de cette séance est de vous familiariser avec les sockets et les servlets, et d introduire le projet.

Plus en détail

TD6 Initiation aux EJB3 avec Eclipse Ecriture d une application J2EE complète

TD6 Initiation aux EJB3 avec Eclipse Ecriture d une application J2EE complète TD6 Initiation aux EJB3 avec Eclipse Ecriture d une application J2EE complète Nous allons écrire une application J2EE qui permet dans un navigateur web de gérer des contacts. Pour cela, nous allons suivre

Plus en détail

Bien programmer. en Java 7. 10 000 ex. couleur. Avec plus de 50 études de cas et des comparaisons avec C++ et C# Emmanuel Puybaret.

Bien programmer. en Java 7. 10 000 ex. couleur. Avec plus de 50 études de cas et des comparaisons avec C++ et C# Emmanuel Puybaret. Bien programmer en Java 7 Avec plus de 50 études de cas et des comparaisons avec C++ et C# Plus de 10 000 ex. vendus! Édition en couleur Emmanuel Puybaret Groupe Eyrolles, 2012, ISBN : 978-2-212-12974-8

Plus en détail

Architecture Orientée Service, JSON et API REST

Architecture Orientée Service, JSON et API REST UPMC 3 février 2015 Précedemment, en LI328 Architecture générale du projet Programmation serveur Servlet/TOMCAT Aujourd hui Quelques mots sur les SOA API - REST Le format JSON API - REST et Servlet API

Plus en détail

Objectifs. Comprendre l architecture typique d une application web Exemple: Expérimenter avec:

Objectifs. Comprendre l architecture typique d une application web Exemple: Expérimenter avec: Cedric Dumoulin Objectifs Comprendre l architecture typique d une application web Exemple: Application permettant de lister un catalogue d articles, et de créer des articles Expérimenter avec: EJB, JPA

Plus en détail

Implémentée sous forme de JavaBean ou EJB, c est dans cette couche que l on retrouve l ensemble des traitements d une application.

Implémentée sous forme de JavaBean ou EJB, c est dans cette couche que l on retrouve l ensemble des traitements d une application. Introduction Nous allons parler, dans ce document consacré aux architectures multi-tiers en environnement J2EE, de 3 des cinq couches les plus représentatives. Faisons tout d'abord un petit rappel sur

Plus en détail

Bases Java - Eclipse / Netbeans

Bases Java - Eclipse / Netbeans Institut Galilée PDJ Année 2014-2015 Master 1 Environnements Java T.P. 1 Bases Java - Eclipse / Netbeans Il existe plusieurs environnements Java. Il est ESSENTIEL d utiliser la bonne version, et un environnement

Plus en détail

édition revue et corrigée avec Java SE 7 7 1 Les bases 11 Compiler un programme Java 13 Exécuter un programme Java 14 Définir le chemin de classe 15

édition revue et corrigée avec Java SE 7 7 1 Les bases 11 Compiler un programme Java 13 Exécuter un programme Java 14 Définir le chemin de classe 15 Table des matières Au sujet de l auteur 1 Introduction 3 édition revue et corrigée avec Java SE 7 7 1 Les bases 11 Compiler un programme Java 13 Exécuter un programme Java 14 Définir le chemin de classe

Plus en détail

Java Avancé - Cours 2

Java Avancé - Cours 2 Java avancé - cours 2 1/8 Java Avancé - Cours 2 Plan 1 Communication entre objets 1 1.1 Motivation....................................................... 1 1.2 Relations entre le panier et le rayon.........................................

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Les architectures N-tiers

Les architectures N-tiers Les architectures N-tiers 1 SOMMAIRE DU COURS XML ET LES ARCHITECTURES N-TIER Introduction aux architectures N-tier Serveurs d applications Déploiement d applications J2EE Tiers applicatif : servlets Tiers

Plus en détail

Java EE Approfondi - Cours 2. Cours de 2 e année ingénieur Spécialisation «Génie Informatique»

Java EE Approfondi - Cours 2. Cours de 2 e année ingénieur Spécialisation «Génie Informatique» Java EE Approfondi - Cours 2 Cours de 2 e année ingénieur Spécialisation «Génie Informatique» Présentation Lier l'orienté objet et la base de données relationnelle peut être lourd et consommateur en temps.

Plus en détail

TP1. Outils Java Eléments de correction

TP1. Outils Java Eléments de correction c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par

Plus en détail

Les formations. Développeur Logiciel. ENI Ecole Informatique

Les formations. Développeur Logiciel. ENI Ecole Informatique page 1/8 Titre professionnel : Inscrit au RNCP de Niveau III (Bac + 2) (J.O. du 19/02/13) 24 semaines + 8 semaines de stage (uniquement en formation continue) Développer une application orientée objet

Plus en détail

AP-5 TD n 2 J2EE 5 novembre 2013

AP-5 TD n 2 J2EE 5 novembre 2013 Objectifs Prérequis Gestion des informations temporaires, sessions et cookies JSP et servlets, mise en place d un contrôleur Java Runtime Environnement (http://www.java.com/fr/download/) (JRE Java 7) IDE

Plus en détail

Plan. Environnement Client/Serveur. Cours 7 JavaServer Pages (1) JSP. Programmation Web coté serveur

Plan. Environnement Client/Serveur. Cours 7 JavaServer Pages (1) JSP. Programmation Web coté serveur Plan Environnement Client/Serveur Cours 7 JavaServer Pages (1) kn@lri.fr 7.1 Principe 7.2 Rappels HTTP 7.3 Le serveur web Tomcat Programmation Web coté serveur JSP 2/28 (rappel) génération de pages-web

Plus en détail

RMI (Remote Method Invocation) Client serveur, situation traditionnelle. Client serveur, situation traditionnelle.

RMI (Remote Method Invocation) Client serveur, situation traditionnelle. Client serveur, situation traditionnelle. RMI (Remote Method Invocation) Présentation de RMI Université Française d Egypte Richard Grin Version 0.6 10/10/12 R. Grin RMI page 2 Client serveur, situation traditionnelle Sur la machine A un client

Plus en détail

Les formations. Développeur Logiciel. ENI Ecole Informatique

Les formations. Développeur Logiciel. ENI Ecole Informatique page 1/5 Titre professionnel : Reconnu par l Etat de niveau III (Bac), inscrit au RNCP (arrêté du 12/10/07, J.O. n 246 du 23/10/07) (32 semaines) Unité 1 : Structurer une application 6 semaines Module

Plus en détail

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 7 : RMI

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 7 : RMI iut ORSAY DUT Informatique Département Informatique 2008 / 2009 Travaux Pratiques n o 7 : RMI Nom(s) : Groupe : Date : Objectifs : savoir créer des applications client-serveur mettant en jeu des machines

Plus en détail

Spring MVC. Implémentation du pattern MVC de type 2 dans Spring

Spring MVC. Implémentation du pattern MVC de type 2 dans Spring 7 Spring MVC La mise en pratique du patron de conception MVC (Model View Controller) offre une meilleure structuration du tiers de présentation des applications Java EE en dissociant les préoccupations

Plus en détail

Environnements de développement (intégrés)

Environnements de développement (intégrés) Environnements de développement (intégrés) Tests unitaires, outils de couverture de code Patrick Labatut labatut@di.ens.fr http://www.di.ens.fr/~labatut/ Département d informatique École normale supérieure

Plus en détail

Module Client Serveur Web 2006 Cours, TD et TP sur PHP et Tomcat

Module Client Serveur Web 2006 Cours, TD et TP sur PHP et Tomcat Prénom : Module Client Serveur Web 2006 Cours, TD et TP sur PHP et Tomcat Nom : Merci de répondre aux questions fermées directement sur la présente feuille et aux questions ouvertes sur une feuille indépendante

Plus en détail

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Serveur d'archivage 2007 Installation et utilisation de la BD exist Type du document Procédure d'installation Auteur(s) Eric Bouladier Date de création 26/02/20007 Domaine de diffusion tous Validé par Equipe Versions Date Auteur(s) Modifications V1.00 26/02/2007 Eric Bouladier

Plus en détail

Java et Objet. Amélie Lambert 2014-2015. Amélie Lambert 2014-2015 1 / 52

Java et Objet. Amélie Lambert 2014-2015. Amélie Lambert 2014-2015 1 / 52 Java et Objet Amélie Lambert 2014-2015 Amélie Lambert 2014-2015 1 / 52 Chapitre 10 Le langage JavaServer Pages (JSP) et le modèle de composants Java (Java beans) Amélie Lambert 2014-2015 2 / 52 Plan du

Plus en détail

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java. Note technique W4 Engine Extension SSO Java Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java. 1 Présentation 3 2 Custom SSO Java 4 3 Bilan 10 Sommaire Référence

Plus en détail

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar Programmation - Java - Fiches du Langage Marie Beurton-Aimar Fiche Numéro 1 1.1 Structure d un programme Java Toutes les instructions se terminent par un ; Le nom du fichier qui contient une classe doit

Plus en détail

Java EE Cours 1. Présentation Générale. Cours de 2 e année ingénieur

Java EE Cours 1. Présentation Générale. Cours de 2 e année ingénieur Java EE Cours 1 Présentation Générale Cours de 2 e année ingénieur 1 Présentation du cours Objectifs Développement d applications Web robustes «Ne pas réinventer la roue» utilisation d un framework 1 Apprentissage

Plus en détail

Application Web et J2EE

Application Web et J2EE Application Web et J2EE Servlet, JSP, Persistence, Méthodologie Pierre Gambarotto Département Informatique et Math appli ENSEEIHT Plan Introduction 1 Introduction Objectfis

Plus en détail

Tp2 Emacs Développement Web

Tp2 Emacs Développement Web Tp2 Emacs Développement Web Les indications ci-dessous donnent les grandes lignes du développement. 1/ Evenement Ajax Jquery: Le code javascript jquery suivant permet d afficher un message dans un span

Plus en détail

Java EE. Grégory Cuellar, Julien Goullon. 1 er octobre 2007. gregory.cuellar@bull.net. julien.goullon@9business.fr

Java EE. Grégory Cuellar, Julien Goullon. 1 er octobre 2007. gregory.cuellar@bull.net. julien.goullon@9business.fr Grégory Cuellar Julien Goullon gregory.cuellar@bull.net julien.goullon@9business.fr 1 er octobre 2007 1 Généralité 2 / 54 Pourquoi? Historique Les alternatives Les composants 2 Architecture n-tiers 3 JEE

Plus en détail

Guide de Migration. Intégration de Spring. Version x.y du 28/03/2008. Etat : xxx

Guide de Migration. Intégration de Spring. Version x.y du 28/03/2008. Etat : xxx Intégration de Spring Version x.y du 28/03/2008 Etat : xxx SUIVI DES MODIFICATIONS Version Rédaction Description Vérification Date 1.0 G.PICAVET C.ROCHETEAU K.COIFFET Première version 28/03/08 Document

Plus en détail

Formation développement Java, Spring et Hibernate

Formation développement Java, Spring et Hibernate L institut de formation continue des professionnels du Web Formation développement Java, Spring et Hibernate Référence formation : Durée : Prix conseillé : DJSH 10 jours (70 heures) 4 500 HT (hors promotion

Plus en détail

TP 2 : programmation côté serveur À rendre pour le mardi 6 mai 2008

TP 2 : programmation côté serveur À rendre pour le mardi 6 mai 2008 Université Claude Bernard Lyon 1 UFR d informatique avril 2006 MIAG soir Systèmes d Information Méthodes Avancées TP 2 : programmation côté serveur À rendre pour le mardi 6 mai 2008 Introduction Dans ce

Plus en détail

Écrire une application XML?

Écrire une application XML? Université de Reims Champagne-Ardenne Écrire une application XML? F. Nolot Licence professionnelle CMSII 2004-2005 1 Université de Reims Champagne-Ardenne Écrire une application XML? Simple API for XML

Plus en détail

CORBA avec OpenORB. Samir Torki et Patrice Torguet

CORBA avec OpenORB. Samir Torki et Patrice Torguet CORBA avec OpenORB Samir Torki et Patrice Torguet 1 Présentation de CORBA CORBA (Common Object Request Broker Architecture) est un standard décrivant une architecture pour la mise en place d objets distribués.

Plus en détail

JDOM. Manipulation de XML avec JDOM et Java. A. Belaïd http://cynober.developpez.com/tutoriel/java/xml/jdom/

JDOM. Manipulation de XML avec JDOM et Java. A. Belaïd http://cynober.developpez.com/tutoriel/java/xml/jdom/ JDOM Manipulation de XML avec JDOM et Java 1 JDOM C est quoi? JDOM est une API du langage Java Permet de manipuler des donnés XML plus simplement qu'avec les API classiques Son utilisation est pratique

Plus en détail

Architecture des applications

Architecture des applications Architecture des applications Table des matières 1 Introduction 1 2 Les classes valeurs 2 2.1 Les Javaeans............................................. 2 2.2 Les différents types de Javaeans...................................

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Une (petite) introduction à Spring

Une (petite) introduction à Spring Une (petite) introduction à Spring 1 Introduction Le framework Spring 1 est une boite à outils très riche permettant de structurer, d améliorer et de simplifier l écriture d application JEE. Spring est

Plus en détail

CSC4002 : Contrôle Final Session 1. Date : jeudi 26 janvier 2012 Durée : 1H30. Coordonnateurs : Christian Bac et Denis Conan

CSC4002 : Contrôle Final Session 1. Date : jeudi 26 janvier 2012 Durée : 1H30. Coordonnateurs : Christian Bac et Denis Conan Corrigé et Barème Contrôle de connaissances 2011/2012 des étudiants de 2 è année (EI2) CSC4002 : Contrôle Final Session 1 Date : jeudi 26 janvier 2012 Durée : 1H30 Coordonnateurs : Christian Bac et Denis

Plus en détail

Une introduction à la technologie EJB

Une introduction à la technologie EJB Une introduction à la technologie EJB 1 Introduction La technologie des EJB (pour Enterprise Java Bean) ont été introduite en 1998 pour offrir aux programmeurs un outil qui facilite la conception et le

Plus en détail

[ Hornet ] Guide de migration d'un projet Acube vers Hornet

[ Hornet ] Guide de migration d'un projet Acube vers Hornet [ Hornet ] Guide de migration d'un projet Acube vers Hornet 3.6B Cette création est mise à disposition selon le Contrat Paternité - Pas d'utilisation Commerciale - Partage des Conditions Initiales à l'identique

Plus en détail

Applications orientées données (NSY135)

Applications orientées données (NSY135) Applications orientées données (NSY135) 2 Applications Web Dynamiques Auteurs: Raphaël Fournier-S niehotta et Philippe Rigaux (philippe.rigaux@cnam.fr,fournier@cnam.fr) Département d informatique Conservatoire

Plus en détail

Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer. M2 CDS2I - 4 février 2010

Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer. M2 CDS2I - 4 février 2010 1 / 24 Développement Web - Servlet Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer M2 CDS2I - 4 février 2010 2 / 24 Plan Plan 1 2 Le modèle MVC 3 Structure

Plus en détail

L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni :

L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni : TP n 9 Xml/Json 1) Exemple d application analysant un fichier XML L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni : Ce fichier

Plus en détail

TP J2EE GUIDE DE DEPLOIEMENT DE L APPLICATION WEB DE GESTION DES COMPTES

TP J2EE GUIDE DE DEPLOIEMENT DE L APPLICATION WEB DE GESTION DES COMPTES 2008 UFR Ingénieurs 2000 Vivien Boistuaud Julien Herr TP J2EE GUIDE DE DEPLOIEMENT DE L APPLICATION WEB DE GESTION DES COMPTES Ce document a été réalisé par V. Boistuaud et J. Herr dans le cadre des travaux

Plus en détail

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles Types d applications pour la persistance Université de Nice Sophia-Antipolis Version 0.9 28/8/07 Richard Grin Toutes les applications n ont pas une complexité qui nécessite une architecture n- tiers Ce

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Compte Rendu d intégration d application

Compte Rendu d intégration d application ISMA 3EME ANNEE Compte Rendu d intégration d application Compte Rendu Final Maxime ESCOURBIAC Jean-Christophe SEPTIER 19/12/2011 Table des matières Table des matières... 1 Introduction... 3 1. Le SGBD:...

Plus en détail

1. Installation d'un serveur d'application JBoss:

1. Installation d'un serveur d'application JBoss: EPITA Ala Eddine BEN SALEM App-Ing2 J2EE T.P. 4 EJB3, Serveur d'application JBoss 1. Installation d'un serveur d'application JBoss: télécharger l'archive du serveur JBoss à l'adresse: http://sourceforge.net/projects/jboss/files/jboss/jboss-5.0.0.ga/jboss-5.0.0.ga.zip/download

Plus en détail

Unité de formation 1 : Structurer une application. Durée : 3 semaines

Unité de formation 1 : Structurer une application. Durée : 3 semaines PROGRAMME «DEVELOPPEUR LOGICIEL» Titre professionnel : «Développeur Logiciel» Inscrit au RNCP de niveau III (Bac+2) (JO du 23 Octobre 2007) (32 semaines) Unité de formation 1 : Structurer une application

Plus en détail

Programmation en Java Java et XML. NGUYEN Thi Minh Tuyen

Programmation en Java Java et XML. NGUYEN Thi Minh Tuyen Programmation en Java Java et XML XML l'acronyme de «extensible Markup Language». permet d'échanger des données entres applica=ons hétérogènes car il peut modéliser et stocker des données de façon portable.

Plus en détail

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand Centrale Réseaux

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux Formation Webase 5 Ses secrets, de l architecture MVC à l application Web Adrien Grand Centrale Réseaux Sommaire 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un

Plus en détail

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe

Plus en détail

Serveurs réseau. 2011 Pearson Education France Java, mise à jour pour Java 7 Timothy Fisher

Serveurs réseau. 2011 Pearson Education France Java, mise à jour pour Java 7 Timothy Fisher 11 Serveurs réseau En pratique, il y a bien plus de chances que vous écriviez du code de client réseau que du code de serveur réseau. Toutefois, bon nombre d applications intègrent à la fois des fonctionnalités

Plus en détail

Java RMI. Programmation des applications réparties. Olivier Flauzac URCA. Master EEAMI-Informatique première année

Java RMI. Programmation des applications réparties. Olivier Flauzac URCA. Master EEAMI-Informatique première année Java RMI Programmation des applications réparties Olivier Flauzac URCA Master EEAMI-Informatique première année Olivier Flauzac (URCA) PAR : Java RMI MSTIC-INFO 1 1 / 30 1 RMI 2 Architecture 3 Développement

Plus en détail

AJAX AJAX. Asynchronous JavaScript And XML. Technologie pour créer des pages web interactives Basées sur XML, HTML et JavaScript

AJAX AJAX. Asynchronous JavaScript And XML. Technologie pour créer des pages web interactives Basées sur XML, HTML et JavaScript AJAX Ajax 1 AJAX Asynchronous JavaScript And XML. Technologie pour créer des pages web interactives Basées sur XML, HTML et JavaScript Utilise: HTML pour le marquage XML pour représenter les résultats

Plus en détail

Gestion des tests avec JUnit

Gestion des tests avec JUnit Gestion des tests avec JUnit JUnit Outil de gestion des tests unitaires pour les programmes Java, JUnit fait partie d un cadre plus général pour le test unitaire des programmes, le modèle de conception

Plus en détail

1) Répartition de charge par DNS

1) Répartition de charge par DNS Comment gérer la répartition de charge et la tolérance aux erreurs lors de l invocation d un service web? Nous allons étudier le problème et proposer une solution élégante, s appuyant sur la création d

Plus en détail

Cahier de charges (Source : "Java EE - Guide de développement d'applications web en Java" par Jérôme Lafosse) Module. Site Web dynamique JSP / Servlet

Cahier de charges (Source : Java EE - Guide de développement d'applications web en Java par Jérôme Lafosse) Module. Site Web dynamique JSP / Servlet Cahier de charges (Source : "Java EE - Guide de développement d'applications web en Java" par Jérôme Lafosse) Module Site Web dynamique JSP / Servlet Sujet : betaboutique Soutenance le 04 / 01 /2013 &

Plus en détail

Tarak CHAARI Application Web en Java ISECS 2

Tarak CHAARI Application Web en Java ISECS 2 Programmation d Application Web avec Java Tarak CHAARI tarak.chaari@isecs.rnu.tn Université de Sfax, 2009-20102010 Tarak CHAARI Application Web en Java Version adaptée ISECS du cours de Mr Walid MAHDI

Plus en détail

Création d'un convertisseur SQL SiTools

Création d'un convertisseur SQL SiTools Création d'un convertisseur SQL SiTools 1 - Introduction Un convertisseur permet de transformer la requête SQL, envoyé par la webapp SiTools à la webapp catalog ou l'inverse. C'est à dire que cette conversion

Plus en détail

Compétence (niveau moyen) Java J2EE - 2014

Compétence (niveau moyen) Java J2EE - 2014 Compétence (niveau moyen) Java J2EE - 2014 «Mars-Mai 2014. Réf : JAVA J2EE Version 1 Page 1 sur 23 Sommaire CONTEXTE DE LA REMISE A NIVEAU JAVA J2EE EN AUTOFORMATION... 3 1. UTILISATION DE ECLIPSE KEPLER

Plus en détail

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean. Plan du cours 2 Introduction générale : fondamentaux : les fondamentaux Michel Buffa (buffa@unice.fr), UNSA 2002, modifié par Richard Grin (version 1.1, 21/11/11), avec emprunts aux supports de Maxime

Plus en détail

Cours 1 : Introduction Générale + Objet I

Cours 1 : Introduction Générale + Objet I Organisation du cours Équipe pédagogique DUT Informatique S3 - Programmation Java Jean-Claude MARTIN MARTIN@LIMSI.FR Cours 1 : Introduction Générale + Objet I Jean-Claude MARTIN (Responsable, Cours, TD

Plus en détail

JavaServer Pages (JSP)

JavaServer Pages (JSP) JavaServer Pages (JSP) XVIII-1 Prérequis pour ce cours Ce cours a trait à la programmation Java coté serveur Il faut connaître un minimum de technologie J2EE Il faut connaître les servlets XVIII-2 Motivation

Plus en détail

Programmation orientée objet en langage JAVA

Programmation orientée objet en langage JAVA Programmation orientée objet en langage JAVA Connexion à une base de données avec JDBC Claude Duvallet Université du Havre UFR Sciences et Techniques 25 rue Philippe Lebon - BP 540 76058 LE HAVRE CEDEX

Plus en détail

Les serveurs d applications :une introduction

Les serveurs d applications :une introduction Les serveurs d applications : une introduction Université du Havre UFR Sciences et Techniques 25 rue Philippe Lebon - BP 540 76058 LE HAVRE CEDEX Claude.Duvallet@gmail.com Octobre 2006 Plan de la présentation

Plus en détail

Tp1 Ema EMACS Développement Web

Tp1 Ema EMACS Développement Web Tp1 Ema EMACS Développement Web 1/ Description de l application : Notre première application Web a pour objectif de gérer une liste de todo (truc à faire) : Diagramme de classe simplifié : Application

Plus en détail

Environnements de Développement

Environnements de Développement Institut Supérieur des Etudes Technologiques de Mahdia Unité d Enseignement : Environnements de Développement BEN ABDELJELIL HASSINE Mouna m.bnaj@yahoo.fr Développement des systèmes d Information Syllabus

Plus en détail

Programmation GWT 2. Développer des applications HTML5/JavaScript en Java avec Google Web Toolkit. 2 e édition. Sami Jaber

Programmation GWT 2. Développer des applications HTML5/JavaScript en Java avec Google Web Toolkit. 2 e édition. Sami Jaber Programmation GWT 2 Développer des applications HTML5/JavaScript en Java avec Google Web Toolkit 2 e édition Sami Jaber Groupe Eyrolles, 2012, ISBN : 978-2-212-13478-0 Table des matières Introduction à

Plus en détail

NFP111 Systèmes et Applications Réparties

NFP111 Systèmes et Applications Réparties NFP111 Systèmes et Applications Réparties 1 de 38 NFP111 Systèmes et Applications Réparties Cours 11 - Les Enterprise Java Beans (Introduction aux Enterprise Claude Duvallet Université du Havre UFR Sciences

Plus en détail

XSS Easy Exploitation Kernel Framework d exploitation pour pentesters

XSS Easy Exploitation Kernel Framework d exploitation pour pentesters XSS Easy Exploitation Kernel Framework d exploitation pour pentesters Emilien Girault (Trance) trance@ghostsinthestack.org / e.girault@sysdream.com Twitter : @emiliengirault www.segmentationfault.fr /

Plus en détail