JavaScript est un langage de programmation orienté objet (à prototype) principalement utilisé sur le web. Notez en passant qu’il n’a rien à voir avec Java. Il est interprété par votre navigateur et, en somme, c’est lui qui permet d’afficher des messages comme “Veuillez remplir tous les champs” lorsque vous souhaitez faire un achat sans mettre le numéro de votre carte bleue.

Il est très pratique pour rendre les sites web interactifs.

Avec JavaScript on se situe au niveau de l’ordinateur client. Nous détaillerons les termes “client” et “serveur” par la suite.

JavaScript est déjà un minimum sécurisé, vous ne pouvez par exemple pas accéder au registre de Windows ou créer des dossiers et fichiers par défaut. Bien que ce soit faisable avec VBScript sous Internet Explorer uniquement.

Vous ne pouvez pas non plus accéder aux variables des autres sites ni voir les autres pages ouvertes par le navigateur (politique Same Origin). Vous pouvez par contre définir des cookies.

1) Pourquoi il ne faut pas faire confiance à Javascript si vous êtes propriétaire d’un site web

Un exemple vaut mieux que 100 mots : https://www.leblogduhacker.fr/sandbox/faillejs.html

Cet exemple est issu d’un autre site web (qui pensait bien faire) et a été copié à l’identique. Essayez de trouver le mot de passe.

Les plus aguerris d’entre vous l’auront trouvé, il suffit d’afficher le code source de la page (CTRL + U) pour afficher ce magnifique bout de code JavaScript:

 function Login(){
            var password=document.login.password.value;
            if (password=="kztYq8") {
                window.location="bravo.htm";
            }
            else
            {
                window.location="dommage.htm";
            }
        }

Erf.sécurité avec javascript

Non seulement le mot de passe y est défini en clair, de plus il est le même pour tout le monde MAIS surtout le fichier résultant est donné. Je n’ai donc même pas besoin du mot de passe, il me suffit d’aller sur https://www.leblogduhacker.fr/sandbox/bravo.htm

Tout ça pour dire que le code JavaScript que vous écrivez est visible par tout le monde. Visible et éditable !

Mais en plus, Javascript est désactivable. Littéralement, vous pouvez supprimer les scripts des pages visitées…

2) Vérifier du côté client ET du côté serveur

Le côté client est le côté des visiteurs des sites web, c’est leur navigateur qui va afficher la page. Le côté serveur est le code qui s’exécutera seulement sur le serveur et qui est donc inaccessible aux clients.

Ce que vous vérifiez du côté client (avec JavaScript) n’est pas fiable comme on l’a vu, et doit être revérifié du côté serveur (en php/asp /etc).

Mais alors à quoi sert JavaScript ? On l’a vu au début, il sert à rendre le site plus ergonomique, plus interactif.

Reprenons un exemple :

function validateURL(val) {
   var test = /(ftp|http|https)://(w+:{0,1}w*@)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?/.test(document.frmrac.url.value);
   if (test == false) {
           alert("L'URL à raccourcir n'est pas valide !");
           return false
    }
    else return true;
}

La ligne avec w+:{0,1}…etc est une expression régulière qui va permettre de tester si une chaîne de caractère est une URL. Si la valeur retournée est false il ne s’agit pas d’une URL et vous ne pouvez donc (normalement) pas soumettre le formulaire.

Admettons que je sois malin et que je désactive JavaScript, je peux écrire n’importe quoi et soumettre le formulaire sans voir le message “L’URL à raccourcir n’est pas valide !”.

Seulement je vérifie une nouvelle fois du côté serveur (en php donc) si le lien est bien une URL :

function validateURL($url) {
    return filter_var($url, FILTER_VALIDATE_URL);
}

et ça, on ne le contourne pas avec des bricoles dans le navigateur !

3) Aller plus loin

On a donc vu qu’il ne faut pas placer d’éléments privés dans du code JavaScript et qu’il ne faut pas se fier à lui lors de la validation de données.

C’est d’autant plus vrai qu’il est possible dans des cas précis de soumettre une donnée valide mais faussée. Et qu’il est possible de changer les données à la volée.

Je peux par exemple copier le code source d’une page, changer le code JavaScript, réenregistrer et soumettre le tout.

Je vois aussi le fameux “clic droit désactivé” sur certaines pages qui utilisent un code JavaScript pour empêcher de copier les éléments du site.

C’est inutile, la seule utilité est de retarder les gens d’utiliser le clic droit. On a vu qu’il suffit de désactiver JavaScript pour passer outre cette “restriction”.

11 Commentaires
Cliquez ici pour ajouter un commentaire

Laisser un commentaire

Menu