parent
90df574ffd
commit
45853dcafa
@ -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
|
||||
|
@ -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…
Reference in new issue