Bases HTML-CSS-Javascript
Objectifs de l’activité :
-
langage de description HTML
-
feuille de style CSS
-
langage Javascript
-
Manipulation du Document Object Model
Mise en situation
On désire réaliser une page web qui liste une série de vulnérabilités de sécurité.
Chacune des vulnérabilités listées doit mentionner :
-
Son identifiant CVE.
-
Le produit affecté ainsi que son fournisseur
-
Le type du produit affecté (OS, Matériel, Application)
-
Le type de vulnérabilité (Injection SQL, XXX, CSRF, Path Traversal …)
-
Une courte description
💻 Travail n° 1 HTML
Ce travail consiste à ajouter quelques éléments HTML dans une page web dont le code partiel est fourni pour arriver au résultat suivant :
Vérifier la prise en compte de chaque modification demandée par un aperçu de la page web dans un navigateur web.
Ressources utiles :
-
Documentation en ligne fournie par la fondation Mozilla : Mozilla Developer Network (aka MDN)
Exemple : Pour savoir comment utiliser la balise `<img />, aller directement sur MDN > HTML > HTML Reference > Elements > img
ou passer par Google en faisant une recherche sur “mdn html img”.
🎯 Travail à faire :
-
On vous donne le code HTML partiel de cette page web dans dummy-vulns.html.
Le télécharger sur votre poste de travail, l’ouvrir dans un navigateur pour avoir un aperçu de la page web et analyser son contenu dans un éditeur de texte. -
Ajouter un titre de niveau 1 à la page web pour obtenir le rendu suivant. Noter que “(fictif)” est en gras et emphase.
Registre (fictif) de Vulnérabilités de Sécurité
-
Modifier le fichier HTML pour ajouter la vulnérabilité suivante dans la liste :
- id CVE
-
CVE-2024-1408
- Fournisseur
-
Apache
- Produit
-
Log4j v2.x
- Type
-
Application
- Vulnérabilité
-
RCE
- CVSS
-
10.0
- Description
-
Exécution de code à distance via la journalisation de chaînes JNDI.
-
Déplacer le titre de la page dans un élément générique de type bloc (→
<div>…</div>) auquel vous attribuerez la classe (→class=…) “title-bar” -
Ajouter dans ce bloc, à la suite du titre, un bouton (→
<button>…</button>) intitulé “Mode sombre” auquel vous attribuerez l'identifiant (→id=…) “darkModeBtn” -
Ajouter — entre le bloc “title-bar” et le tableau qui liste les CVEs — un élément générique de type bloc (→
<div>…</div>) auquel vous attribuerez la classe (→class=…) “filters”. -
Insérer successivement dans ce bloc générique :
-
un label (→
<label>…</label>) dont l’intitulé est “Filtrer par Type de Produit :” -
4 boutons (→
<button>…</button>) intitulés “Tous”, “OS”, “Matériel”, “Application” auxquels vous attribuerez respectivement les identifiants (→id=…) “allBtn”, “osBtn”, “hwBtn”, “appBtn”
-
💻 Travail n° 2 CSS
Ce travail consiste à modifier/ajouter quelques règles CSS pour styliser la page web.
Vérifier la prise en compte de chaque modification demandée par un aperçu de la page web dans un navigateur web.
Ressources utiles :
-
Documentation en ligne fournie par la fondation Mozilla : Mozilla Developer Network (aka MDN)
.
Exemple : Pour savoir comment utiliser la propriété CSS
color, aller directement sur MDN > CSS Reference > Properties > color-* > colorou passer par Google en faisant une recherche sur “mdn color”.
🎯 Travail à faire :
-
Créer un sous-répertoire
css/dans le répertoire où se trouvedummy-vulns-statiç.htmlpuis y sauvegarder la feuille de style dummy-vulns.css fournie.[...] | dummy-vulns.html \---css dummy-vulns-light.css -
Lier cette feuille de style à notre page web (→
<link … />) et vérifier sa prise en compte par le navigateur web -
Ajouter, dans la règle CSS qui s’applique à l’entête de la table (→
<th>), les déclarations CSS (c.-à-d. les paires propriété/valeur) qui permetteront de lui appliquer :-
une couleur de 1er plan (→
color) valant “white” -
une couleur d’arrière-plan (→
background) avec les composantes Rouge, Vert, Bleu suivantes : (44, 62, 80)
-
-
Ajouter une nouvelle règle qui s’applique aux éléments HTML dont la classe est
cvsspour qu’ils s’affichent en gras avec la couleur de 1erplan RGB(255,25,0)-
Voir Sélecteurs de classe
pour savoir comment cibler une classe d’éléments HTML.
-
Pour savoir quelle propriété CSS correspond à “gras”, rechercher “mdn css gras” dans Google.
-
-
Ajouter une règle qui cible tous les éléments
<td>ayant la classe “idCVE” — et seulement eux — pour les afficher en gras avec une couleur de teinte/saturation/luminositéHSL(210deg,94%,46%) -
Ajouter une règle qui cible tous les éléments
<tr>de pseudo-classe:hover— et seulement eux — qui permettra d’appliquer la couleur hexadécimale 0xf3f3f3 lors du survol de chaque ligne du tableau avec la souris.Voir :hover
pour plus d’explication sur la pseudo-classe
:hover. -
Modifier le fichier HTML de façon à appliquer en plus de la règle
.badge, les règles.OS,.HardwareetApplication— déjà présentes dans le fichier CSS — de façon à appliquer une couleur différente à chaque type de “badge” (c.-à-d. OS, Hardware ou Application). -
Créer une règle CSS s’appliquant à tous les éléments de classe “filters” avec les propriétés suivantes :
margin-bottom: 20px; display: flex; gap: 15px; align-items: center; background: #e8ecef; padding: 15px; border-radius: 5px; -
Créer une règle CSS s’appliquant à tous les boutons présents dans le bloc de classe “filters” avec les propriétés suivantes :
padding: 8px; border: 1px solid #ccc; border-radius: 4px; background: #3498db; color: white; cursor: pointer; border: none; font-weight: bold; -
Créer une règle CSS s’appliquant spécifiquement au bouton dont l’identifiant est “darkModeBtn” avec les propriétés suivantes :
background: #899fad; color: white; font-weight: bold; -
Faire une copie du fichier de style
dummy-vuln-light.cssdansdummy-vuln-dark.csset modifier les règlesbody,container,.filtersettr:hoverpour appliquer un thème sombre de votre convenance à la page web. -
Lier ce nouveau fichier de style à la page web (→ balise
<link>) et modifier l’intitulé du bouton d’identifiant “darkModeBtn” pour obtenir un résultat équivalent à l’illustration suivante :
💻 Travail n° 3 1ers pas en Javascript : manipuler le DOM
Ce travail consiste à utiliser Javascript dans la console du navigateur pour s’approprier quelques concepts de base
🎯 Travail à faire :
-
Prendre connaissance de Dynamiser ses pages web avec JS > Manipuler le DOM
-
Sélectionner par balise (→
getElementsByTagName()) depuis la console du navigateur les éléments<button>de notre page web. Retourner le résultat dans une variable nomméetagSelect(cette variable est de type “HTMLCollection”) -
Parcourir la variable
tagSelectpour afficher les éléments qu’elle contient.Voir HTMLCollection
.
La taille d’une collection est obtenue avec l’attribut
length( Ex. :maCollectionHTML.length).La méthode
item()retourne un élément d’une collection via son indice.Résultat attendu :<button id="darkModeBtn"> <button id="allBtn"> <button id="osBtn"> <button id="hwBtn"> <button id="appBtn"> -
Sélectionner par id (→
getElementById()), l’élément dont l’id vaut “darkModeBtn” et afficher son contenu texte (→ propriétéinnerText)Résultat attendu :"Mode sombre" -
Sélectionner par classe (→
getElementsByClassName()), l’élément dont la classe vaut “title-bar” et afficher son contenu HTML (→ propriétéinnerHTML).La méthode retourne un tableau.
Notre page web ne contient qu’un élément de classe “title-bar” ⇒ on affichera donc le contenu HTML de l’élément d’indice 0 du tableau retourné.
Résultat attendu :<h1>Registre <strong><em>(fictif)</em></strong> de Vulnérabilités de Sécurité</h1> <button id="darkModeBtn">Mode sombre</button> -
Reprendre les questions précédentes en utilisant plutôt les sélecteurs CSS grâce aux méthodes
querySelector()etquerySelectorAll() -
Cibler l’élément de classe “cvss” après avoir ciblé l’élément d’id “CVE-2024-1001” comme expliqué dans Préciser sa sélection
et modifier sa valeur originale (→
7.8) pour lui donner la valeur8.2.
💻 Travail n° 4 1erspas en Javascript : évènements
Ce travail consiste aussi à utiliser Javascript depuis la console du navigateur pour s’approprier les bases de la gestion d’évènements.
🎯 Travail à faire :
-
Ajouter un écouteur d’évènement au bouton d’id “darkModeBtn” pour que son intitulé change de “Mode clair” à “Mode sombre” et réciproquement à chaque appui sur le bouton.
La méthode
indexOf()appliquée à une chaîne de caractères permet de savoir si celle-ci contient la chaîne passée en argument.
💻 Travail n° 5 Javascript : le côté obscur 🥷
Ce travail consiste à ajouter du code Javascript à la page web pour appliquer le thème sombre ou clair à la page web suite à l’appui du bouton correspondant.
Ressources utiles :
-
Documentation en ligne fournie par la fondation Mozilla : Mozilla Developer Network (aka MDN)
.
Des tutoriels et la référence Javascript sont présents dans la rubrique … Javascript : Scripting language
🎯 Travail à faire :
-
Créer un sous-répertoire
js/dans le répertoire où se trouvedummy-vulns.htmlpuis y ajouter un nouveau fichierdummy-vulns.js: ce fichier contiendra tout le code javascript permettant de basculer entre le mode clair et le mode sombre de la page suite à l’appui sur le bouton présent sur celle-ci.[…] | dummy-vulns.html | +---css | dummy-vulns-light.css | dummy-vulns-dark.css | \---js dummy-vulns.js -
Lier ce fichier à notre page web en ajoutant la balise suivante dans l’entête HTML :
<script src="dummy-vulns.js" defer></script> (1)1 deferpermet de spécifier au navigateur de n’exécuter le script qu’après chargement et analyse syntaxique du fichier HTML. -
Adapter les instructions décrites dans les étapes 2 et 3 de l’article Enabling Dark and Light mode in JavaScript – a guide
pour faire en sorte de basculer alternativement du thème clair au thème sombre lorsqu’on appuie sur le bouton d’identifiant “darkModeBtn” présent dans notre page web.
Voir une façon de procéder après l’illustration .
Le travail peut se décomposer comme suit :
-
Fusionner vos 2 feuilles de style de façon à avoir dans le même fichier, les règles CSS pour le thème clair et le thème sombre.
Les règles CSS à dupliquer concernent :
body,filters,containerettr:hover.Exemple pour la règlebody:body { (1) ... } body.dark-mode { (2) ... } // [...]1 règle pour le thème clair 2 règle pour le thème sombre -
Dans le script Javascript, ajouter un “Event Listener” à l’évènement “click” du bouton dont l’identifiant est “darkModeBtn”.
-
Coder l’algorithme suivant dans l'event listerner :
Ajouter/Supprimer la classe "`dark-mode`" sur l'élément HTML `body` (1) Ajouter/Supprimer la classe "`dark-mode`" sur l'élément HTML dont la classe est `container` (1) Ajouter/Supprimer la classe "`dark-mode`" sur l'élément HTML dont la classe est `filters` (1) Ajouter/Supprimer la classe "`dark-mode`" sur tous les éléments HTML de type `<tr>` (1) SI la liste des classes de l'élement `body` contient "`dark-mode`" ALORS (1) | Changer l'intitulé du bouton en "`Mode clair`" (2) SINON | Changer l'intitulé du bouton en "`Mode sombre`" FINSI1 Voir Manipuler le DOM > Classes et element.classlist
et sa méthode
toggle()2 Voir element.textContent pour modifier l’intitulé du bouton
-
Cibler l’élément “body” en Javascript se fait directement avec
document.body. -
Un élément possédant une classe “dummy” pourra être ciblé avec
document.querySelector('.dummy') -
Pour cibler tous les éléments de type
<tr>, on peut utiliserdocument.querySelectorAll("tr") -
On peut appliquer exécuter un code pour chacun des éléments d’un tableau retourné par
querySelectorAll()avec la méthodeforEach(). Voir Array : méthode forEach()
-
-
💻 Travail n° 6 Javascript : Filtrage
Ce travail consiste enfin à filtrer les CVEs selon le type du produit affecté : OS, Matériel, Application, Tous.
🎯 Travail à faire :
-
Coder une fonction Javascript :
function filterTable(filterType) { (1) ... }1 Argument filterType=allouOSouHardwareouApplicationSon algorithme est le suivant :
Sélectionner toutes les lignes du tableau (-> balises `<tr>`) (1) POUR CHAQUE ligne FAIRE (2) | Sélectionner l'élément de cette ligne ayant la classe "`badge`" (3) | SI le type de filtrage est "`Tous`" (4) | | OU une des classes de l'élément correspond au paramètre `filterType` ALORS | | Forcer le style de l'affichage sur "`table-row`" (5) | SINON | | Forcer le style de l'affichage sur "`none`" FINPOUR1 Voir Document : méthode querySelectorAll() 2 Voir Array : méthode forEach() 3 Voir Document : méthode querySelector() 4 Voir if…else 5 Voir HTMLElement: style property -
Attribuer un event listener à chaque bouton de filtrage. Celui-ci se contentera d’appeler la fonction
filterTable()avec le paramètre adéquat.
🞄 🞄 🞄





