parent
90df574ffd
commit
45853dcafa
@ -1,303 +1,12 @@
|
|||||||
# ---> TeX
|
# Ignore everything
|
||||||
## Core latex/pdflatex auxiliary files:
|
*
|
||||||
*.aux
|
|
||||||
*.lof
|
|
||||||
*.log
|
|
||||||
*.lot
|
|
||||||
*.fls
|
|
||||||
*.out
|
|
||||||
*.toc
|
|
||||||
*.fmt
|
|
||||||
*.fot
|
|
||||||
*.cb
|
|
||||||
*.cb2
|
|
||||||
.*.lb
|
|
||||||
|
|
||||||
## Intermediate documents:
|
# Allows to traverse directories
|
||||||
*.dvi
|
!*/
|
||||||
*.xdv
|
|
||||||
*-converted-to.*
|
|
||||||
# these rules might exclude image files for figures etc.
|
|
||||||
# *.ps
|
|
||||||
# *.eps
|
|
||||||
# *.pdf
|
|
||||||
|
|
||||||
## Generated if empty string is given at "Please type another file name for output:"
|
# Specially ignore exams!
|
||||||
.pdf
|
exams
|
||||||
|
|
||||||
## 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
|
|
||||||
|
|
||||||
|
# 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