Added: lab6 + typos

public
Maxime Puys 1 year ago
parent 90df574ffd
commit 45853dcafa

309
.gitignore vendored

@ -1,303 +1,12 @@
# ---> TeX
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
# Ignore everything
*
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
# Allows to traverse directories
!*/
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
*.lzo
*.lzs
*.slg
*.slo
*.sls
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplot
*.gnuplot
*.table
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.glog
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
# *.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# newpax
*.newpax
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# svg
svg-inkscape/
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# titletoc
*.ptc
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz
# xwatermark package
*.xwm
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib
# Specially ignore exams!
exams
# Manually allow PDF lectures and MD labs
!lectures/**/cours_symfony_*.pdf
!labs/**/*.md

@ -110,7 +110,7 @@ public function getLogDir(): string
## Création de votre premier controlleur
6. Utilisez la console `Symfony` pour créer un controlleur que vous appellerez
`QuoteController`. Quels sont les fichiers crées par `Symfony` ? Obrservez
`QuoteController`. Quels sont les fichiers crées par `Symfony` ? Observez
leur contenu.
7. Quelle route mène à ce controlleur ? Trouvez la réponse dans le fichier du

@ -1,4 +1,4 @@
# TP5: API Platform
# TP5 : API Platform
## Objectifs

@ -0,0 +1,110 @@
# TP6 : Renforcer la Sécurité des Applications Symfony
## Objectifs :
Les objectifs de ce TP sont :
- Renforcer la sécurité d'un projet Symfony existant en mettant en place des mesures contre les menaces courantes
de sécurité web, telles que :
- le Cross-Site Scripting (XSS),
- le Cross-Site Request Forgery (CSRF),
- en permettant l'inscription sécurisée des utilisateurs, leur connexion et déconnexion,
- et en implémentant l'autorisation des utilisateurs en fonction des rôles.
## Prérequis :
- Un projet Symfony fonctionnel (votre projet `TweetTok`, votre projet Symfony, une SAE).
## Ressources
- [Documentation de Sécurité Symfony](https://symfony.com/doc/current/security.html)
## Partie 1 : Protection contre les attaques XSS
1. Utilisez l'un de vos formulaire (ajout d'un `Twok`) pour tester un exploit
de faille XSS (écrivez le code en JS). Que constatez-vous ?
- Indice : Utilisez la balise `<script>` et la fonction `alert` en Javascript.
2. Modifiez le template Twig et ajoutez le filtre `raw` lorsque vous affichez
la variable dans laquelle vous stockez votre exploit XSS (ex : `{{
commentaire|raw }}`). Retestez l'attaque, que constatez-vous ?
3. Utilisez le composant `html-sanitizer` de Symfony pour permettre d'afficher
du code (ex : un commentaire en rouge) mais sans permettre les failles XSS.
Créez un formulaire simple pour tester les vulnérabilités XSS ou modifiez un
formulaire existant.
## Partie 2 : Prévention des attaques CSRF
1. Vérifiez si la protection contre les CSRF est activée dans vos formulaires.
Comment avez-vous fait ? Si elle est activée, désactivez-la.
2. Testez un exploit d'attaque CSRF sur l'un de vos formulaires.
- Indice : Implémentez un formulaire dans une page HTML externe au projet,
qui fait une requête POST vers votre site cite de l'attaque. Utilisez les
fonction Javascript `getElementById` et `submit` pour forcer le browser à
envoyer la requête sans le consentement de l'utilisateur. Si vous êtes
machiavélique, trouvez une façon de ne pas afficher le formulaire sur la
page.
3. Activez la protection CSRF dans les formulaires. Que constatez-vous ?
Retestez votre attaque.
4. Utilisez la commande `curl` pour envoyer une requête POST sur votre
formulaire avec et sans le token CSRF, que constatez-vous ?
## Partie 3 : Inscription sécurisée des utilisateurs
1. Générez une entité `User` qui sera identifié avec son email et qui aura un mot de passe, avec la commande :
```bash
symfony console make:user
```
2. Générez un formulaire de login et logout pour l'entité `User` avec la commande suivante :
```bash
symfony console make:security:form-login
```
3. Générez un formulaire d'inscription pour votre entité `User` avec la commande suivante :
```bash
symfony console make:registration-form
```
N'envoyez pas de mail de confirmation.
4. Utilisez des contraintes sur votre entité `User` pour vous assurer que :
- Le mot de passe est fort : [https://symfony.com/doc/current/reference/constraints/PasswordStrength.html](https://symfony.com/doc/current/reference/constraints/PasswordStrength.html)
- Le mot de passe est plus long que 8 charactères (contrainte sur la longueur)
Testez votre formulaire pour valider que ces contraintes sont bien implémentées.
5. Vers quelle route votre site redirige l'utilisateur losqu'il se connecte et se déconnecte ?
## Partie 4 : Autorisation des utilisateurs avec des rôles
1. Notez que l'entité `User` a une propriété `role` qui contient le rôle de
l'utilisateur (administrateur, utilisteur, etc). Quelle est la valeur par
défaut ?
2. Nous allons créer un utilisateur normal et un administrateur pour tester nos
permissions. Exécutez la commande suivante et créez le CRUD de l'entité `User` :
```bash
symfony console make:crud
```
Modifiez le fichier `src/Form/UserType.php` crée par la commande précédente et remplacez `->add('roles')` par
```php
->add('roles', ChoiceType::class, [
'choices' => [
'ROLE_ADMIN' => 'ROLE_ADMIN',
'ROLE_USER' => 'ROLE_USER',
], 'multiple' => true,
])
```
3. Utilisez le formulaire d'inscription pour inscrire au moins deux
utilisateurs et utilisez le formulaire de modification nouvellement crée
pour modifier le rôle d'un utilisateur en administrateur.
4. Restreignez l'accès aux routes en fonction des rôles des utilisateurs dans
votre configuration de sécurité à l'aide du fichier
`confi/packages/security.yaml` puis dans les fichiers des controlleurs (avec
la primitive `IsGranted`) afin de restreindre les URL commençant par `/user`
aux seuls administrateurs (le CRUD de modification des utilisateurs).
5. Essayer d'acceder aux URL `/user` et au reste de votre site sans être
authentifié, en étant authentifié en tant qu'utilisateur et enfin en tant
qu'administrateur afin de valider que votre configuration est correcte.
Loading…
Cancel
Save