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 macaron(@)philippe.prados.name 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

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

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

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

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

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

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

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

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

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

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

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

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués Architecture JEE. Objectifs attendus Serveurs d applications JEE Systèmes distribués Architectures JEE Normes JEE couches logicielles, n-tiers framework JEE et design patterns 2007/02/28 Eric Hébert.eheb@yahoo.fr

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

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

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object) Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07

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

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

CQP Développeur Nouvelles Technologies (DNT)

CQP Développeur Nouvelles Technologies (DNT) ORGANISME REFERENCE STAGE : 26572 20 rue de l Arcade 75 008 PARIS CONTACT Couverture géographique : M. Frédéric DIOLEZ Bordeaux, Rouen, Lyon, Toulouse, Marseille Tél. : 09 88 66 17 40 Nantes, Lille, Strasbourg,

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

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

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

http://www.ed-diamond.com

http://www.ed-diamond.com Ceci est un extrait électronique d'une publication de Diamond Editions : http://www.ed-diamond.com Ce fichier ne peut être distribué que sur le CDROM offert accompagnant le numéro 100 de GNU/Linux Magazine

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

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

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. 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

Java Naming and Directory Interface

Java Naming and Directory Interface Introduction Java Naming and Directory Interface Gaël Thomas gael.thomas@lip6.fr Université Pierre et Marie Curie Master Informatique M2 Spécialité SAR Java Naming and Directory Interface (JNDI) Java Standard

Plus en détail

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr Initiation à JAVA et à la programmation objet raphael.bolze@ens-lyon.fr O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp Serveur d'application Client HTML/JS Apache Thrift Bootcamp Pré-requis La liste ci-dessous de logiciels doit être installée et opérationnelle sur la machine des participants : Compilateur thrift http://thrift.apache.org/

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris : Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Introduction Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Forms 10g permet l utilisation du JAVA côté client et côté application

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

Création d une application JEE

Création d une application JEE Création d une application JEE Rédacteurs : Alexandre Baillif, Philippe Lacomme, Raksmey Phan et Michaël PLAN Date : juillet 2010 Mise à jour : Michaël PLAN Date : octobre 2014 Avertissement : - ce document

Plus en détail

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i Développement JEE 5 avec Eclipse Europa K a r i m D j a a f a r A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i Groupe Eyrolles, 2008, ISBN : 978-2-212-12061-5 5 Le projet WTP (Web

Plus en détail

Projet Java EE Approfondi

Projet Java EE Approfondi EISTI Projet Java EE Approfondi Manuel d installation du framework Stripes Amaury Languillat, Yann Gonzalez, Arnaud Recher, Vincent Laronde, Anys Mechkar 10 Manuel d installation Téléchargement On part

Plus en détail

Alfstore workflow framework Spécification technique

Alfstore workflow framework Spécification technique Alfstore workflow framework Spécification technique Version 0.91 (2012-08-03) www.alfstore.com Email: info@alfstore.com Alfstore workflow framework 2012-10-28 1/28 Historique des versions Version Date

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

La base de données XML exist. A. Belaïd

La base de données XML exist. A. Belaïd La base de données XML exist Introduction Qu est-ce-que exist? C est une base de donnée native, entièrement écrite en Java XML n est pas une base de données en soi Bien qu il possède quelques caractéristiques

Plus en détail

Utilisation de Jakarta Tomcat

Utilisation de Jakarta Tomcat ISI 1022 : Déploiement d applications Web Jean-Noël Sorenti. Année 2002/2003 Déploiement d application Web Utilisation de Jakarta Tomcat ISI 1022 : 1 ISI 1022 : Déploiement d applications Web Une application

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

Java pour le Web. Cours Java - F. Michel

Java pour le Web. Cours Java - F. Michel Java pour le Web Cours Java - F. Michel Introduction à JEE 6 (ex J2EE) Historique Qu'est-ce que JEE JEE : Java Entreprise Edition (ex J2EE) 1. Une technologie outils liés au langage Java + des spécifications

Plus en détail

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI Institut Galilée Année 2014-2015 TP WEBSERVICES Programmation et Logiciels sûrs Master 2 PLS Résumé Ce TP s appuie sur le cours de C. Fouqueré traitant des Environnements et Langage Évolués, ainsi que

Plus en détail

Java DataBaseConnectivity

Java DataBaseConnectivity Java DataBaseConnectivity JDBC JDBC est une API Java (ensemble de classes et d interfaces défini par SUN et les acteurs du domaine des SGBD) permettant d accéder aux bases de données à l aide du langage

Plus en détail

Une introduction à la technologie EJB (2/3)

Une introduction à la technologie EJB (2/3) Une introduction à la technologie EJB (2/3) 1 Les singletons des EJB 3.1 1.1 Synchronisation gérée manuellement Depuis la version 3.1, des EJB Statless à instance unique sont maintenant disponibles : ce

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Vulgarisation Java EE Java EE, c est quoi?

Vulgarisation Java EE Java EE, c est quoi? Paris, le 1 Février 2012 Vulgarisation Java EE Java EE, c est quoi? Sommaire Qu est ce que Java? Types d applications Java Environnements Java Versions de Java Java EE, c est quoi finalement? Standards

Plus en détail

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage Technologies du Web Créer et héberger un site Web Page 1 / 26 Plan Planification Choisir une solution d hébergement Administration Développement du site Page 2 / 26 Cahier des charges Objectifs du site

Plus en détail

2 Chapitre 1 Introduction

2 Chapitre 1 Introduction 1 Introduction Ce livre présente les Enterprise JavaBeans 2.0 et 1.1 qui constituent la troisième et la deuxième version de la spécification des Enterprise JavaBeans. Tout comme la plate-forme Java a révolutionné

Plus en détail

Mise en œuvre des serveurs d application

Mise en œuvre des serveurs d application Nancy-Université Mise en œuvre des serveurs d application UE 203d Master 1 IST-IE Printemps 2008 Master 1 IST-IE : Mise en œuvre des serveurs d application 1/54 Ces transparents, ainsi que les énoncés

Plus en détail

Dis papa, c est quoi un bus logiciel réparti?

Dis papa, c est quoi un bus logiciel réparti? Dis papa, c est quoi un bus logiciel réparti? Raphael.Marvie@lifl.fr LIFL IRCICA Equipe GOAL Octobre 2006 10. Des sockets aux bus logiciels répartis 1 0. Une application répartie 2 Objectif Découvrir la

Plus en détail

A. Architecture du serveur Tomcat 6

A. Architecture du serveur Tomcat 6 Administration du serveur A. Architecture du serveur Tomcat 6 La compréhension de l architecture interne du serveur Tomcat 6 est un pré-requis indispensable pour bien en maîtriser l administration et la

Plus en détail

JOnAS Day 5.1. Outils de développements

JOnAS Day 5.1. Outils de développements JOnAS Day 5.1 Outils de développements Agenda Introduction Plugin Eclipse (JOPE) Plugin NetBeans (JOnbAS) Cargo 2 Bull, 2009 JOnAS Day 5.1 Objectifs - Réduire les temps de développement - Construction

Plus en détail

RMI le langage Java XII-1 JMF

RMI le langage Java XII-1 JMF Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Tutoriel d installation de Hibernate avec Eclipse

Tutoriel d installation de Hibernate avec Eclipse Tutoriel d installation de Hibernate avec Eclipse Table des matières 1. Création de la base de données... 4 2. Installation de Hibernate Synchronizer... 5 3. Utilisation de Hibernate... 6 3.1 Création

Plus en détail

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines) Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines) Module 1 : Programmer une application informatique Durée

Plus en détail

Devenez un véritable développeur web en 3 mois!

Devenez un véritable développeur web en 3 mois! Devenez un véritable développeur web en 3 mois! L objectif de la 3W Academy est de former des petits groupes d élèves au développement de sites web dynamiques ainsi qu à la création d applications web

Plus en détail

Patrons de Conception (Design Patterns)

Patrons de Conception (Design Patterns) Patrons de Conception (Design Patterns) Introduction 1 Motivation Il est difficile de développer des logiciels efficaces, robustes, extensibles et réutilisables Il est essentiel de comprendre les techniques

Plus en détail

Les architectures 3-tiers Partie I : les applications WEB

Les architectures 3-tiers Partie I : les applications WEB Les architectures 3-tiers Partie I : les applications WEB 1 Evolutions logicielles Des objets aux composants... Objets JavaBeans, Objets ActiveX, Objets COM,... 1 Evolutions logicielles Des objets aux

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

La technologie Java Card TM

La technologie Java Card TM Présentation interne au CESTI La technologie Java Card TM sauveron@labri.u-bordeaux.fr http://dept-info.labri.u-bordeaux.fr/~sauveron 8 novembre 2002 Plan Qu est ce que Java Card? Historique Les avantages

Plus en détail

Supplément de renseignements : Examens d applications et pare-feux d applications web clarifiés Normes : Normes en matière de sécurité des données de

Supplément de renseignements : Examens d applications et pare-feux d applications web clarifiés Normes : Normes en matière de sécurité des données de Supplément de renseignements : Examens d applications et pare-feux d applications web clarifiés Normes : Normes en matière de sécurité des données de la PCI (PCI DSS) Version : 1.2 Date : Octobre 2008

Plus en détail

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau) CS WEB Ch 1 Introduction I. INTRODUCTION... 1 A. INTERNET INTERCONNEXION DE RESEAUX... 1 B. LE «WEB» LA TOILE, INTERCONNEXION DE SITES WEB... 2 C. L URL : LOCALISER DES RESSOURCES SUR L INTERNET... 2 D.

Plus en détail

4. SERVICES WEB REST 46

4. SERVICES WEB REST 46 4. SERVICES WEB REST 46 REST REST acronyme de REpresentational State Transfert Concept introduit en 2000 dans la thèse de Roy FIELDING Est un style d architecture inspiré de l architecture WEB En 2010,

Plus en détail

Programmation Web. Madalina Croitoru IUT Montpellier

Programmation Web. Madalina Croitoru IUT Montpellier Programmation Web Madalina Croitoru IUT Montpellier Organisation du cours 4 semaines 4 ½ h / semaine: 2heures cours 3 ½ heures TP Notation: continue interrogation cours + rendu à la fin de chaque séance

Plus en détail

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement Guillaume HARRY l Contenu sous licence Creative Commons CC-BY-NC-ND Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement P. 2 1. Introduction 2.

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES WEB & DÉVELOPPEMENT LES BASES DU WEB HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES LE LANGAGE HTML STRUCTURE D UNE PAGE En-tête et corps Syntaxe INSÉRER DES CONTENUS Texte : formatage (titre,

Plus en détail

Refonte front-office / back-office - Architecture & Conception -

Refonte front-office / back-office - Architecture & Conception - Refonte front-office / back-office - Architecture & Conception - GLG204 - Architectures Logicielles Java 2008/2009 Nom : Cédric Poisson Matricule : 06-49012 Version : 1.0 Jeudi 28 mai 2009 1 / 23 Table

Plus en détail

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. fortier@lipn.univ-paris13.fr A308, Université de Paris 13

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. fortier@lipn.univ-paris13.fr A308, Université de Paris 13 WEBSERVICES Michael Fortier Master Informatique 2ème année fortier@lipn.univ-paris13.fr A308, Université de Paris 13 https ://lipn.univ-paris13.fr/ fortier/enseignement/webservices/ Sommaire 1 Rappels

Plus en détail

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture API04 Contribution Apache Hadoop: Présentation et application dans le domaine des Data Warehouses Introduction Cette publication a pour but de présenter le framework Java libre Apache Hadoop, permettant

Plus en détail

Projet Active Object

Projet Active Object Projet Active Object TAO Livrable de conception et validation Romain GAIDIER Enseignant : M. Noël PLOUZEAU, ISTIC / IRISA Pierre-François LEFRANC Master 2 Informatique parcours MIAGE Méthodes Informatiques

Plus en détail

EXA1415 : Annotations JavaEE : @Local, @Stateful

EXA1415 : Annotations JavaEE : @Local, @Stateful EXA1415 : Annotations JavaEE : @Local, @Stateful Sur une idée de P. Sécheresse sur http://developpez.com (http://tinyurl.com/5gr57j) Diapo 1 Objectif Créer un EJB CalculatriceBean (V1) Contient une opération

Plus en détail

Applications et Services WEB: Architecture REST

Applications et Services WEB: Architecture REST Applications et : Erick Stattner Laboratoire LAMIA Université des Antilles et de la Guyane France erick.stattner@univ-ag.fr Guadeloupe 2014-2015 Erick Stattner Applications et : 1 / 90 Description du cours

Plus en détail

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation ING 01 LANGAGUE JAVA Durée : 21 heures 1090 HT / jour Dates : à définir en 2012 Concevoir et développer des programmes en langage Java Comprendre le fonctionnement de la machine virtuelle S approprier

Plus en détail

Cours en ligne Développement Java pour le web

Cours en ligne Développement Java pour le web Cours en ligne Développement Java pour le web We TrainFrance info@wetrainfrance Programme général du cours Développement Java pour le web Module 1 - Programmation J2ee A) Bases de programmation Java Unité

Plus en détail

IBM DB2 Alphablox. d administration GC11-2170-00

IBM DB2 Alphablox. d administration GC11-2170-00 IBM DB2 Alphablox Guide d administration Version 8.4 GC11-2170-00 IBM DB2 Alphablox Guide d administration Version 8.4 GC11-2170-00 ii IBM DB2 Alphablox - Guide d administration Table des matières Avis

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

HTTP 1.1. HyperText Transfer Protocol ... ... TCP IP ...

HTTP 1.1. HyperText Transfer Protocol ... ... TCP IP ... HTTP 1.1 Place de http dans le modèle osi : HyperText Transfer Protocol...... TCP IP...... HTTP est un protocole «sans état» : chaque page WEB est transmise dans une connexion séparée (sauf pour les connections

Plus en détail

Java c est quoi? Java pourquoi?

Java c est quoi? Java pourquoi? Grandes lignes du cours Cours JAVA : Le bases du langage Java. Version 3.02 Julien Sopena 1 1 julien.sopena@lip6.fr Équipe REGAL - INRIA Rocquencourt LIP6 - Université Pierre et Marie Curie Licence professionnelle

Plus en détail

Introduction aux «Services Web»

Introduction aux «Services Web» Introduction aux «Services Web» Sana Sellami sana.sellami@univ-amu.fr 2014-2015 Modalité de contrôle de connaissances Note de contrôle de continu Note projet Evaluation du projet la semaine du 17 novembre

Plus en détail

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

E-mail : contact@nqicorp.com - Web : http://www.nqicorp.com

E-mail : contact@nqicorp.com - Web : http://www.nqicorp.com - 5, rue Soutrane - 06560 Valbonne Sophia-Antipolis E-mail : contact@nqicorp.com - Web : http://www.nqicorp.com NQI Orchestra 3.3 - Guide d'installation Linux....................................................................

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

arcopole Studio Annexe 4 Intégration LDAP et processus d authentification Site du programme arcopole : www.arcopole.fr

arcopole Studio Annexe 4 Intégration LDAP et processus d authentification Site du programme arcopole : www.arcopole.fr arcopole Studio Annexe 4 Intégration LDAP et processus d authentification Site du programme arcopole : www.arcopole.fr Auteur du document : ESRI France Version de la documentation : 1.2.0.0 Date de dernière

Plus en détail

ASP.NET MVC 4 Développement d'applications Web en C# - Concepts et bonnes pratiques

ASP.NET MVC 4 Développement d'applications Web en C# - Concepts et bonnes pratiques Introduction 1. Introduction 11 2. La plateforme de développement web de Microsoft 11 3. Définition du modèle de programmation MVC 14 4. L'historique d'asp.net MVC 17 4.1 ASP.NET MVC 1 (2008) 17 4.2 ASP.NET

Plus en détail

Programmation en Java IUT GEII (MC-II1) 1

Programmation en Java IUT GEII (MC-II1) 1 Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)

Plus en détail

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry. : Java Agent DEvelopment framework Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.fr Introduction à la plateforme JADE 1) Modèle d agent 2) Services 3) Norme FIPA

Plus en détail

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web» Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web» Sana Sellami sana.sellami@lsis.org 2014-2015 Plan Partie 1: Introduction aux Services Web (SW) Partie 2: Vers une

Plus en détail

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework Gaël de Chalendar CEA LIST / LIC2M Journée de Présentation des Technologies WebContent INSTN 14/12/2009 Présentation de gsoap Plan

Plus en détail

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS Avant de commencer 1. Introduction 15 2. HTML5 oui, mais pas que... 15 2.1 HTML5 16 2.2 JavaScript 17 2.3 CSS 18 3. Les outils 18 Préparation des outils et création du projet 1. Introduction 21 2. Team

Plus en détail

Création d objet imbriqué sous PowerShell.

Création d objet imbriqué sous PowerShell. Création d objet imbriqué sous PowerShell. Par Laurent Dardenne, le 13/01/2014. Niveau Ce tutoriel aborde la création d objet composé, c est-à-dire que certains de ses membres seront eux-mêmes des PSObjects.

Plus en détail

Code Produit Nom Produit Dernière mise à jour. AM003 Alias Mobile On Demand Licence 1 mois 27/04/2015

Code Produit Nom Produit Dernière mise à jour. AM003 Alias Mobile On Demand Licence 1 mois 27/04/2015 www.alias-ad.com ALIAS MOBILE DESIGNER Des solutions innovantes pour la création d applications de gestion accessibles aux appareils mobiles (tablettes et smartphones) en client léger. Code Produit Nom

Plus en détail

Protection des protocoles www.ofppt.info

Protection des protocoles www.ofppt.info ROYAUME DU MAROC Office de la Formation Professionnelle et de la Promotion du Travail Protection des protocoles DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC Sommaire 1. Introduction... 2

Plus en détail

Tolérance aux Fautes des Grappes d Applications J2EE. Applications Internet dynamiques

Tolérance aux Fautes des Grappes d Applications J2EE. Applications Internet dynamiques Application statique Tolérance aux Fautes des Grappes d Applications J2EE Sara Bouchenak Sacha Krakowiak, Noël de Palma, Stéphane Fontaine Projet SARDES INRIA IMAG CFSE'4, 6-8 avril 2005 Tolérance aux

Plus en détail