Académique Documents
Professionnel Documents
Culture Documents
ALLAIS Solène
FORMATION DWWM - La Manu, Amiens
Année 2021
SOMMAIRE
1
Liste des compétences
Développer la partie front-end d’une application web ou web mobile en intégrant les
recommandations de sécurité :
Développer la partie back-end d’une application web ou web mobile en intégrant les
recommandations de sécurité :
2
Résumé de projet
Avant de pouvoir présenter mon projet, nous allons avoir besoin du contexte.
J’écoute de la kpop depuis 2010, c’est donc un sujet que j’affectionne tout
particulièrement. La kpop (pop coréenne) est devenue une catégorie musicale à part
entière. Au fil des années, j’ai vu ce genre se démocratiser et grandir au-delà des
frontières coréennes. Dans cette communauté grandissante, il y a tout type de fan.
Pour ce projet, je vais me concentrer sur les collectionneurs. Plus particulièrement
les collectionneurs de photocards.
3
Cahier des charges
- Page wishlist : page sur laquelle l'utilisateur pourra charger ses propres
wishlists (et les supprimer), afin d’être plus organisé dans sa collection.
Cette rubrique est facultative pour l’utilisateur, tout le monde n’utilise
pas de wishlists.
4
Spécifications techniques
5
Pour ce qui est du code, j’ai utilisé le logiciel Visual Studio Code qui m’a
accompagnée tout le long du projet. J’ai utilisé du HTML, CSS, JavaScript et du PHP,
liant ainsi les parties front et back.
L’architecture MVC m’a beaucoup aidée afin de garder mon code organisé et
propre. J’ai pour cela créé plusieurs dossiers, en plus de mon dossier assets (qui
contient le css, js et les éventuelles images), Views (dont un sous dossier templates
pour le header et le footer), les Controllers (qui contrôlent les vues), user (pour les
formulaires), Model (pour les différentes classes) et Utils (les regex, utilisées pour les
formulaires). Une page 404 a également été créée pour pallier tout éventuel problème
de liens.
La sécurisation des formulaires se fait dans les controllers, à l’aide des regex, des
filtres (FILTER_SANITIZE, qui permet de nettoyer les données, FILTER_VALIDATE, qui
permet de valider les données), différentes conditions ainsi que des try and catch.
6
La partie graphique a été réalisée grâce à Canva pour le logo, coolors pour la
palette de couleurs et AdobeXD pour la maquette graphique.
7
Réalisations du candidat
8
Pour ce qui est des photocards, j’avais le choix entre : en prendre déjà
existantes ou les faire moi-même. J’ai choisi la seconde option. Pour ce faire, j’ai
utilisé pinterest pour trouver les photos ainsi que procreate et mon ipad pour
dessiner. En procédant ainsi, j’ai pu m’assurer d’une homogénéité dans le style, dans
la taille et dans la qualité.
Ici, vous trouverez des captures d’écran de mon architecture MVC et donc de
l’organisation de mes différents dossiers (j’ai dû adapter ce que vous voyez
ci-dessous tout au long du projet, ce que vous voyez n’est peut-être donc pas la
version finale) .
9
Le fichier regex.php contient les regex suivantes. Couplées aux patterns
ajoutées aux inputs de la partie front et aux conditions des controllers, les regex
renforcent la sécurité des formulaires envoyés afin de réduire au maximum les
risques de malveillances. J’aurais pu utiliser une regex pour le mot de passe, mais
par soucis de sécurité, j’ai préféré laisser le choix à l’utilisateur de sa longueur ne
voulant pas donner des informations sur le contenu du mot de passe à d'éventuels
hackers (le mot de passe étant haché grâce à la fonction password_hash(), sa
longueur réelle importe peu).
Vous pouvez voir un exemple des filtres utilisés. Pour le mail, j’utilise trim afin
de m’assurer qu’il n’y a pas d’espace au début comme à la fin de l’adresse mail (si
cette dernière a été copiée collée par exemple). Le filter_input me sert à filtrer ce qu’il
y a dans mon input. L’ INPUT_POST permet de préciser la méthode de récupération
des données (POST ou GET), ‘email’ fait référence au nom précisé dans l’input, et le
FILTER_SANITIZE_EMAIL permet de nettoyer une adresse mail. Ce filtre permet de se
passer d’une regex.
10
Les différentes erreurs sont envoyées dans un tableau “error” afin d’afficher le
bon message à l’utilisateur en fonction des erreurs commises et ainsi améliorer
l’expérience utilisateur. Le fait que ce tableau soit rempli ou non nous aide d’ailleurs à
savoir si nous pouvons créer le compte ou non : si le tableau d’erreurs est vide, nous
pouvons passer à la suite. Sinon, il faut les corriger pour pouvoir créer son compte.
11
Jeu d’essai
Une fois que les images s’ajoutaient sans problème, j’ai pu me concentrer sur
la partie ajax de mon formulaire. Je voulais que, lorsque je sélectionne un groupe
grâce au select, les membres s’affichent dans le select suivant, rendant ainsi
l’affichage plus dynamique et améliorant l’expérience utilisateur.
12
Pour ce qui est de la méthode de création, j’ai créé une class Photocard. J’ai
ensuite vérifié si le tableau d’erreurs était vide afin de passer à l’appel de la méthode
create ce qui permet de passer à l’enregistrement des photocards dans la table
concernée.
Dans l’annexe, vous pouvez voir l’enregistrement des deux photocards qui
correspondent à Jennie du groupe BLACKPINK dans la base de données. Le nom du
fichier est récupéré, ainsi que l’id du nom du membre concerné. Grâce au nom de la
photocard dans pc_name, il est plus facile d’afficher les photocard : comme vous
pouvez le voir sur la capture d’écran, tout se passe dans la source de la balise image
(aussi disponible dans l’annexe).
13
Description de la veille
Afin de sécuriser un maximum mon site, j’ai effectué des recherches sur les
bonnes pratiques à mettre en place. Même si la sécurité back est extrêmement
importante pour palier à différentes injections dans notre code via les formulaires, la
sécurité front l’est tout autant.
La sécurité front.
La sécurité back.
14
Situation de travail
Pour K-Library, j’ai besoin d’ajouter des photos, de les enregistrer et de les
afficher. Pour ce faire, j’ai dû faire des recherches sur les différentes fonctions de
PHP. J’ai par exemple été amenée à taper dans la barre de recherche “
imagecreatefrompng() php” afin d’en savoir plus sur la fonction.
J’en ai eu besoin pour l’ajout de mes photocards (que j’ai fait moi-même,
prenant soin de leur donner à toutes la même taille pour un souci d’efficacité. Elles
font toutes 286px sur 442px et sont toutes en .png). Cette fonction permet de créer
une image en format png à partir d’un fichier ou d’une url. Pour ensuite envoyer cette
image vers le fichier prévu à cet effet, j’ai dû continuer les recherches avec la fonction
“imagepng()”.
Les recherches que j’ai pu faire portaient plus ou moins leurs fruits, c’est pour
cela qu’il est important de faire des recherches en français mais aussi (et surtout) en
anglais pour accéder à un éventail de réponses plus important.
15
Extrait de site anglophone
Pour cette traduction, j’ai choisi les jointures SQL sur le site w3schools.
https://www.w3schools.com/sql/sql_join.asp
Extrait du site :
A JOIN clause is used to combine rows from two or more tables, based on a related
column between them.
Let's look at a selection from the "Orders" table:
Then, look at a selection from the "Customers" table:
Notice that the "CustomerID" column in the "Orders" table refers to the "CustomerID"
in the "Customers" table. The relationship between the two tables above is the
"CustomerID" column.
Then, we can create the following SQL statement (that contains an INNER JOIN), that
selects records that have matching values in both tables:
and it will produce something like this:
Different Types of SQL JOINs
● (INNER) JOIN: Returns records that have matching values in both tables
● LEFT (OUTER) JOIN: Returns all records from the left table, and the matched
records from the right table
● RIGHT (OUTER) JOIN: Returns all records from the right table, and the
matched records from the left table
● FULL (OUTER) JOIN: Returns all records when there is a match in either left or
right table
16
Traduction :
La clause JOINTURE est utilisée pour combiner les lignes de deux tables ou plus,
basé sur la relation de leurs colonnes.
Regardons la sélection depuis la table “Commandes” :
Maintenant, regardons la sélection depuis la table “Clients” :
Maintenant nous pouvons créer la commande SQL suivante (qui contient une
JOINTURE INTERNE) ce qui sélectionne les données ayant une valeur commune dans
les deux tables :
ce qui donne :
● JOINTURE (INTERNE): Retourne les données ayant une valeur commune dans
les deux tables.
● JOINTURE (EXTERNE) GAUCHE : Retourne toutes les données de la table de
gauche et les données communes de la table droite.
● JOINTURE (EXTERNE) DROITE : Retourne toutes les données de la table de
droite et les données communes de la table gauche.
● JOINTURE PLEINE (EXTERNE): Retourne toutes les données communes à la
table de gauche comme à la table de droite.
17
Conclusion
18
Annexes
Ici vous trouverez la totalité des 40 photocards que j’ai pu faire pour le projet :
Ici vous trouverez ma base de données et les différentes tables qui la compose :
La table photocard ainsi que le code qui affiche les photocards. (cf le jeu d’essai)
19
20