Paul Jusot

Portfolio développeur

Page de connexion et mot de passe

Hachage de mots de passe

Les mots de passe sont hachés en base de données à l'aide de la fonction: password_hash($password, PASSWORD_DEFAULT);

PASSWORD_DEFAULT peut-être remplacé par une autre valeur de manière choisir un autre algorithme. Je n'y connais rien^^, à part que l'algorithme se nomme "bcrypt"et qu'il comporte du "sel", mais je veille au minimum à utiliser la dernière version stable de PHP.

Test anti-robot

Deux chiffres inclus entre 2 et 9 sont générés aléatoirement puis présentés à l'utilisateur écrits en lettres. Celui-ci doit répondre à une multiplication du type: combien fait six multiplié par sept?

C'est très très léger. Mais je l'utilise sur le formulaire de contact de mon site personnel depuis des années et je n'ai jamais de spam. Plus exactement, je n'en ai plus depuis que la multiplication est entièrement écrite en lettres.

A l'occasion, il faudra quand même que j'améliore un peu tout ça.

E-mail comme nom d'utilisateur et solution en cas de mot de passe oublié

 

Sécurité des entrées de l'utilisateur

Sécurités des <input>

Chaque saisie de texte de l'utilisateur est contrôlée par un htmlspecialchars.

Le nom des fichiers téléchargés par l'utilisateur également sans quoi divers problèmes peuvent apparaître, notamment si il utilisate un Mac. Ce système de type Unix utilise naturellement le / dans les chemins des fichiers, mais il permet quand même d'utiliser / dans le nom d'un fichier (il est possible de nommer une photo vacances08/2024.jpg) cassant la compatibilité avec Windows et Linux.

Filtrage du HTML de l'éditeur

Le plus grand danger vient sans doute de l'éditeur TinyMCE puisque le HTML généré doit être gardé pour ne pas perdre la mise en page. Le HTML est nettoyé par HTMLawed, qui filtre donc par défaut un certains nombre de choses dangereuses, notamment les balises: applet, audio, canvas, embed, iframe, object, script, video.

Une liste blanche d'éléments HTML peut-être utilisée pour renforcer le filtre, les balises susceptibles d'être créées par l'éditeur sont donc les seules autorisées:
h1, h2, h3, h4, h5, h6, p, br, s, em, span, strong, a, ul, ol, li, sup, sub, code, blockquote, div, pre, table, caption, colgroup, col, tbody, tr, th, td, figure, img, figcaption, iframe, small

Une liste noire d'attributs peut également être ajoutée. J'ai dû laisser style, src et href qui sont utilisés par l'éditeur, j'ai bloqué id et class.

Requêtes préparées

=> doctrine + DQL

=> doctrine + QueryBuilder

Routage des requêtes, sécurité des POST et des requêtes AJAX

Rôle des GET et des POST

Les GET servent uniquement à la navigation, ils sont d'une certaine manière conçus pour le visiteur qui peut les copier-coller. À l'inverse, les données sont toutes envoyés dans des POST.

Détection d'un POST venant du site