Projet : Blog sécurisé
Étape 0 : GitHub
Créez un repository GitHub public avec un README et appelez-le bre04-secu-blog. Clonez-le dans le dossier sites/php de votre IDE.
Étape 1 : les fichiers
Vous trouverez les fichiers du projet dans l'archive secu-blog.zip.
Parcourez ces fichiers, vous verrez qu'une partie des contenus vous sont déjà fournis. À vous de compléter le reste.
Étape 2 : base de données
Sur PhpMyAdmin, créez une base de données prenomnom_secu_blog (en utf8_general_ci) et importez-y les fichiers SQL que vous trouverez ici dans l'ordre suivant :
categories.sqlusers.sqlposts.sqlposts_categories.sqlcomments.sql
Étape 3 : les models
Faites en sorte que vos modèles soient conformes à ce qui est présent dans votre base de données. Vous devrez utiliser la composition pour représenter les jointures (par exemple, un Post a, entre autres, une Category et un User en attribut). La table posts_categories est une pure table de liaison, elle n'a donc pas de modèle.
Étape 4 : les Managers
Vous allez devoir créer les managers vous permettant de manipuler votre base de données. Attention, vous devez obligatoirement hydrater des instances de classes.
Voici les méthodes minimum que vous devez avoir dans vos Managers :
CategoryManager
findAll()qui retourne toutes les catégoriesfindOne(int $id)qui retourne la catégorie qui a l'id passé en paramètre, null si elle n'existe pasfindByPost(int $postId)qui retourne sous forme de tableau associatif les informations des catégories liées au post qui à l'id passé en paramètre
PostManager
findLatest()qui retourne les 4 derniers postsfindOne(int $id)qui retourne le post qui a l'id passé en paramètre, null si il n'existe pasfindByCategory(int $categoryId)qui retourne les posts ayant la catégorie dont l'id est passé en paramètre
CommentManager
findByPost(int $postId)qui retourne les commentaires ayant le post dont l'id est passé en paramètrecreate(Comment $comment)qui insère le commentaire passé en paramètres dans la base de données
UserManager
findByEmail(string $email)qui retourne le user qui a l'email passé en paramètre, null si il n'existe pasfindOne(int id)qui retour le user qui a l'id passé en paramètre, null si il n'existe pascreate(User $user)qui insère l'utilisateur passé en paramètres dans la base de données
Étape 5 : les Controllers
Vous allez devoir utiliser vos controllers pour afficher le contenu de vos pages et gérer la soumission de vos formulaires. Attention, vous devez gérer la faille CSRF et la faille XSS pour toute information soumise par l'utilisateur.
Sécurité
Les mots de passe doivent faire 8 caractères au minimum, avec au moins une majuscule, une minuscule, un chiffre et un caractère spécial.
Vous allez devoir utiliser une expression régulière pour cela, mon conseil, demandez à ChatGPT (ou toute autre IA) de rédiger cette expression pour vous et de vous l'expliquer. Les expressions régulières sont une syntaxe à part entière d'où ce conseil. Vous avez un bref cours sur les Regex et leu usage en PHP ici : https://elearning.3wa.fr/mod/page/view.php?id=44348.
Les mots de passe doivent être chiffrés avec l'algorithme BCRYPT.