SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
1/18Cyrille37 - CCØ - AFUP day Tours 2020
Valider les données
sans copier/coller
AFUP Day 2020 Tours
Cyrille37
KEEP
CALM
and
VALIDATE
2/18Cyrille37 - CCØ - AFUP day Tours 2020
Comme je suis vieux et aigri,
mon vocabulaire pourrait en blaisser certain·e·s
Je vous pris d’avance de m’en excuser
Cyrille37 Afup day 2020 Tours
3/18Cyrille37 - CCØ - AFUP day Tours 2020
Pourquoi valider les données ?
●
Failles de sécurité
– XSS Cross-Site Scripting
– CSRF Cross-Site request forgery
– SQL Injection
●
Règles « métier »
– Longeur de chaîne
– Valeur min/max
– Liste de référence
Qualité et
Assurance
You’ve been
Hacked !
4/18Cyrille37 - CCØ - AFUP day Tours 2020
C’est quoi valider ?
●
Filtrer
– Surrounding spaces
– Format de date
– Format des décimaux
– Encodage des
caractères
●
Vérifier
– Règles de sécurité
– Règles de stockage
– Règles « métier »
– Règles particulières
Et la Timezone ?
5/18Cyrille37 - CCØ - AFUP day Tours 2020
public function recordPerson( Request $req ) {
$errors = [] ;
$values = [] ;
if( ! isset($_GET[‘name’]) ) {
$errors[‘name’] = _(‘errors.required’, ‘name’)’ ;
} else {
$values[‘name’] = trim($_GET[‘name’]) ;
$values[‘name’] = filter_xss($values[‘name’]) ;
if( strlen($values[‘name’])<NAME_MIN_LEN )
$errors[‘name’] = _(‘errors.min_len’, ‘name’)’ ;
else if( strlen($values[‘name’])>NAME_MAX_LEN )
$errors[‘name’] = _(‘errors.max_len’, ‘name’)’ ;
}
…
if( ! empty($errors)
return view(‘personForm’, [‘input’=>$_GET,’errors’=>$errors]);
$sql = ‘insert into persons set ’ ;
foreach( $values as $k => $v )
$sql.= $k.’=’. sql_escape($v) ;
…
return redirect(‘okView’);
}
Voilà chef !
C’est codé nickel
6/18Cyrille37 - CCØ - AFUP day Tours 2020
Chef ! Z’avé vu comme c’est codé nickel ? C’est beau hein !?
7/18Cyrille37 - CCØ - AFUP day Tours 2020
Méthode « bourin » level 1
HTTP PHP Controller DB
8/18Cyrille37 - CCØ - AFUP day Tours 2020
Méthode « bourin » level 2
HTTP PHP Controller
PDO
Template Engine
DB
9/18Cyrille37 - CCØ - AFUP day Tours 2020
Méthode « framework web » level 1
HTTP PHP Controller
Framework Web
FormRequest
Model
●
Router / Dispatcher
●
ErrorHandler
●
DI Container
●
Template engine
●
Validation engine
●
ORM
●
Event / Job / Queue...
is a great framework
10/18Cyrille37 - CCØ - AFUP day Tours 2020
Méthode « framework web » level 1
class PersonFormRequest {
public function rules() {
return [
'name' => 'required|unique:persons|max:255',
];
}
}
public function recordPerson( PersonFormRequest $req )
{
$p = new Person( $req->all ) ;
$p→save() ;
return redirect(‘view.ok’);
}
Validation gérée via une classe « FormRequest »
que l’on utilise dans le controller
Les messages d’erreur
sont fournis par la brique
« validation » du framework
PersonFormRequest est injectée
par le « container DI »
après avoir été validée
11/18Cyrille37 - CCØ - AFUP day Tours 2020
Le problème
HTTP PHP Framework
FormRequest
Model
FormRequest
FormRequest
Controller
Controller
Controller
Risque de perte
de cohérence
des règles !
12/18Cyrille37 - CCØ - AFUP day Tours 2020
Le problème devient chaos
HTTP PHP Framework FormRequest
Model
FormRequest
FormRequest
Controller
Controller
Controller
Risque de perte
de cohérence
des règles !
PHP Framework
MQ
Cron
HTML
Javascript
13/18Cyrille37 - CCØ - AFUP day Tours 2020
Solution CRUD en SQL
DB
PHP
C#
Java
Presta A
Presta X
Presta Z
La validation des données
est garantie dans la base
de donnée par des
procédures stockées
Les règles de validation sont
transmises aux prestataires via
des documents (SFD, CCTP, ...)
14/18Cyrille37 - CCØ - AFUP day Tours 2020
Class « Service »
Service
Controller
Model
Model
Encapsuler les opérations « métier » dans une classe de service
qui gèrera les modifications des models au sein d’une transaction
Service DB commit DB rollback
Command
Event
Solus
level2
Solus
level2
15/18Cyrille37 - CCØ - AFUP day Tours 2020
Validation au plus proche
de l’ORM
Model
ORM
Extension
Validation
Les règles de validation
sont exprimées au plus
près du « Model »
Exceptions
Serialization
(Array, Json)
Localization
Présentation
Extension
Validation
Framework
Solus
level2
Solus
level2
16/18Cyrille37 - CCØ - AFUP day Tours 2020
Avec Laravel
Version 5 au moins
Back Front
●
laravel.com
●
jqueryvalidation.org/
●
github.com/proengsoft/laravel-jsvalidation
●
github.com/esensi/model
Model
esensi/model
Controler
proengsoft/laravel-jsvalidation
17/18Cyrille37 - CCØ - AFUP day Tours 2020
En live
framagit.org / Cyrille37 / laravel-esensi-example
●
laravel.com
●
jqueryvalidation.org/
●
github.com/proengsoft/laravel-jsvalidation
●
github.com/esensi/model
18/18Cyrille37 - CCØ - AFUP day Tours 2020
●
Ne réinvente pas la roue
●
Étudie, contribue et partage
●
Les logiciels libres sont tes amis

Contenu connexe

Similaire à Afup day 2020 tours valider sans copier-coller - cyrille37

D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons ! D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons ! Marie-Alice Blete
 
Symfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcingSymfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcingSymfonyMu
 
Alphorm.com support de la formation-ccnp route examen 300-101-ss
Alphorm.com support de la formation-ccnp route examen 300-101-ssAlphorm.com support de la formation-ccnp route examen 300-101-ss
Alphorm.com support de la formation-ccnp route examen 300-101-ssAlphorm
 
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASGUSS
 
Configurer ldaps sur un dc (avec une
Configurer ldaps sur un dc (avec uneConfigurer ldaps sur un dc (avec une
Configurer ldaps sur un dc (avec uneNovencia Groupe
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
Gu202 g formation-infosphere-guardium-9
Gu202 g formation-infosphere-guardium-9Gu202 g formation-infosphere-guardium-9
Gu202 g formation-infosphere-guardium-9CERTyou Formation
 
MIM Synchronization Services 2016 -> une solution économique pour créer, modi...
MIM Synchronization Services 2016 -> une solution économique pour créer, modi...MIM Synchronization Services 2016 -> une solution économique pour créer, modi...
MIM Synchronization Services 2016 -> une solution économique pour créer, modi...Identity Days
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerDamien Seguy
 
Développer pour tous les navigateurs
Développer pour tous les navigateursDévelopper pour tous les navigateurs
Développer pour tous les navigateursMicrosoft
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Alexis Sukrieh
 
Azure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérienceAzure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérienceMicrosoft Décideurs IT
 
Azure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérienceAzure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérienceMicrosoft Technet France
 
Cours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partieCours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partiekadzaki
 
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  la validation.pdflaravel.sillo.org-Cours Laravel 10  les bases  la validation.pdf
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdfHeartKing10
 

Similaire à Afup day 2020 tours valider sans copier-coller - cyrille37 (20)

D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons ! D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
 
Symfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcingSymfony CQRS and _event_sourcing
Symfony CQRS and _event_sourcing
 
LyonJUG-2023-v1.0.pdf
LyonJUG-2023-v1.0.pdfLyonJUG-2023-v1.0.pdf
LyonJUG-2023-v1.0.pdf
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 
Alphorm.com support de la formation-ccnp route examen 300-101-ss
Alphorm.com support de la formation-ccnp route examen 300-101-ssAlphorm.com support de la formation-ccnp route examen 300-101-ss
Alphorm.com support de la formation-ccnp route examen 300-101-ss
 
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
 
Configurer ldaps sur un dc (avec une
Configurer ldaps sur un dc (avec uneConfigurer ldaps sur un dc (avec une
Configurer ldaps sur un dc (avec une
 
E4 sp1 AD
E4 sp1 ADE4 sp1 AD
E4 sp1 AD
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Gu202 g formation-infosphere-guardium-9
Gu202 g formation-infosphere-guardium-9Gu202 g formation-infosphere-guardium-9
Gu202 g formation-infosphere-guardium-9
 
MIM Synchronization Services 2016 -> une solution économique pour créer, modi...
MIM Synchronization Services 2016 -> une solution économique pour créer, modi...MIM Synchronization Services 2016 -> une solution économique pour créer, modi...
MIM Synchronization Services 2016 -> une solution économique pour créer, modi...
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
 
Développer pour tous les navigateurs
Développer pour tous les navigateursDévelopper pour tous les navigateurs
Développer pour tous les navigateurs
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009
 
Azure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérienceAzure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérience
 
Azure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérienceAzure SQL Database, approche et retours d'expérience
Azure SQL Database, approche et retours d'expérience
 
Cours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partieCours php & Mysql - 5éme partie
Cours php & Mysql - 5éme partie
 
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  la validation.pdflaravel.sillo.org-Cours Laravel 10  les bases  la validation.pdf
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
 

Plus de OpenStreetMap, Artefacts.coop

Plus de OpenStreetMap, Artefacts.coop (11)

OSM élémentaire Michelet 2018
OSM élémentaire Michelet 2018OSM élémentaire Michelet 2018
OSM élémentaire Michelet 2018
 
Libre contribution - Cyrille37 - Hackltobertfest Tours 2019
Libre contribution - Cyrille37 - Hackltobertfest Tours 2019Libre contribution - Cyrille37 - Hackltobertfest Tours 2019
Libre contribution - Cyrille37 - Hackltobertfest Tours 2019
 
Sotmfr2018 politique de la ville cartographie participative
Sotmfr2018 politique de la ville cartographie participativeSotmfr2018 politique de la ville cartographie participative
Sotmfr2018 politique de la ville cartographie participative
 
Sotmfr2016 politique de la ville cartographie participative
Sotmfr2016 politique de la ville cartographie participativeSotmfr2016 politique de la ville cartographie participative
Sotmfr2016 politique de la ville cartographie participative
 
Internet citoyen et usages collaboratifs 2016-03-15
Internet citoyen et usages collaboratifs 2016-03-15Internet citoyen et usages collaboratifs 2016-03-15
Internet citoyen et usages collaboratifs 2016-03-15
 
Société numérique - biens communs informationnels et citoyens capteurs
Société numérique - biens communs informationnels et citoyens capteursSociété numérique - biens communs informationnels et citoyens capteurs
Société numérique - biens communs informationnels et citoyens capteurs
 
Cdl2013 découvrir la carte mondiale libre openstreetmap
 Cdl2013   découvrir la carte mondiale libre openstreetmap Cdl2013   découvrir la carte mondiale libre openstreetmap
Cdl2013 découvrir la carte mondiale libre openstreetmap
 
Cdl2013 utiliser open streetmap by cyrille37
Cdl2013   utiliser open streetmap by cyrille37Cdl2013   utiliser open streetmap by cyrille37
Cdl2013 utiliser open streetmap by cyrille37
 
Webschool internet des objets - part#2
Webschool   internet des objets - part#2Webschool   internet des objets - part#2
Webschool internet des objets - part#2
 
Open Data - Webschool#6@Tours
Open Data - Webschool#6@ToursOpen Data - Webschool#6@Tours
Open Data - Webschool#6@Tours
 
Présentation OpenStreetMap by-cyrille37
Présentation OpenStreetMap by-cyrille37Présentation OpenStreetMap by-cyrille37
Présentation OpenStreetMap by-cyrille37
 

Afup day 2020 tours valider sans copier-coller - cyrille37

  • 1. 1/18Cyrille37 - CCØ - AFUP day Tours 2020 Valider les données sans copier/coller AFUP Day 2020 Tours Cyrille37 KEEP CALM and VALIDATE
  • 2. 2/18Cyrille37 - CCØ - AFUP day Tours 2020 Comme je suis vieux et aigri, mon vocabulaire pourrait en blaisser certain·e·s Je vous pris d’avance de m’en excuser Cyrille37 Afup day 2020 Tours
  • 3. 3/18Cyrille37 - CCØ - AFUP day Tours 2020 Pourquoi valider les données ? ● Failles de sécurité – XSS Cross-Site Scripting – CSRF Cross-Site request forgery – SQL Injection ● Règles « métier » – Longeur de chaîne – Valeur min/max – Liste de référence Qualité et Assurance You’ve been Hacked !
  • 4. 4/18Cyrille37 - CCØ - AFUP day Tours 2020 C’est quoi valider ? ● Filtrer – Surrounding spaces – Format de date – Format des décimaux – Encodage des caractères ● Vérifier – Règles de sécurité – Règles de stockage – Règles « métier » – Règles particulières Et la Timezone ?
  • 5. 5/18Cyrille37 - CCØ - AFUP day Tours 2020 public function recordPerson( Request $req ) { $errors = [] ; $values = [] ; if( ! isset($_GET[‘name’]) ) { $errors[‘name’] = _(‘errors.required’, ‘name’)’ ; } else { $values[‘name’] = trim($_GET[‘name’]) ; $values[‘name’] = filter_xss($values[‘name’]) ; if( strlen($values[‘name’])<NAME_MIN_LEN ) $errors[‘name’] = _(‘errors.min_len’, ‘name’)’ ; else if( strlen($values[‘name’])>NAME_MAX_LEN ) $errors[‘name’] = _(‘errors.max_len’, ‘name’)’ ; } … if( ! empty($errors) return view(‘personForm’, [‘input’=>$_GET,’errors’=>$errors]); $sql = ‘insert into persons set ’ ; foreach( $values as $k => $v ) $sql.= $k.’=’. sql_escape($v) ; … return redirect(‘okView’); } Voilà chef ! C’est codé nickel
  • 6. 6/18Cyrille37 - CCØ - AFUP day Tours 2020 Chef ! Z’avé vu comme c’est codé nickel ? C’est beau hein !?
  • 7. 7/18Cyrille37 - CCØ - AFUP day Tours 2020 Méthode « bourin » level 1 HTTP PHP Controller DB
  • 8. 8/18Cyrille37 - CCØ - AFUP day Tours 2020 Méthode « bourin » level 2 HTTP PHP Controller PDO Template Engine DB
  • 9. 9/18Cyrille37 - CCØ - AFUP day Tours 2020 Méthode « framework web » level 1 HTTP PHP Controller Framework Web FormRequest Model ● Router / Dispatcher ● ErrorHandler ● DI Container ● Template engine ● Validation engine ● ORM ● Event / Job / Queue... is a great framework
  • 10. 10/18Cyrille37 - CCØ - AFUP day Tours 2020 Méthode « framework web » level 1 class PersonFormRequest { public function rules() { return [ 'name' => 'required|unique:persons|max:255', ]; } } public function recordPerson( PersonFormRequest $req ) { $p = new Person( $req->all ) ; $p→save() ; return redirect(‘view.ok’); } Validation gérée via une classe « FormRequest » que l’on utilise dans le controller Les messages d’erreur sont fournis par la brique « validation » du framework PersonFormRequest est injectée par le « container DI » après avoir été validée
  • 11. 11/18Cyrille37 - CCØ - AFUP day Tours 2020 Le problème HTTP PHP Framework FormRequest Model FormRequest FormRequest Controller Controller Controller Risque de perte de cohérence des règles !
  • 12. 12/18Cyrille37 - CCØ - AFUP day Tours 2020 Le problème devient chaos HTTP PHP Framework FormRequest Model FormRequest FormRequest Controller Controller Controller Risque de perte de cohérence des règles ! PHP Framework MQ Cron HTML Javascript
  • 13. 13/18Cyrille37 - CCØ - AFUP day Tours 2020 Solution CRUD en SQL DB PHP C# Java Presta A Presta X Presta Z La validation des données est garantie dans la base de donnée par des procédures stockées Les règles de validation sont transmises aux prestataires via des documents (SFD, CCTP, ...)
  • 14. 14/18Cyrille37 - CCØ - AFUP day Tours 2020 Class « Service » Service Controller Model Model Encapsuler les opérations « métier » dans une classe de service qui gèrera les modifications des models au sein d’une transaction Service DB commit DB rollback Command Event Solus level2 Solus level2
  • 15. 15/18Cyrille37 - CCØ - AFUP day Tours 2020 Validation au plus proche de l’ORM Model ORM Extension Validation Les règles de validation sont exprimées au plus près du « Model » Exceptions Serialization (Array, Json) Localization Présentation Extension Validation Framework Solus level2 Solus level2
  • 16. 16/18Cyrille37 - CCØ - AFUP day Tours 2020 Avec Laravel Version 5 au moins Back Front ● laravel.com ● jqueryvalidation.org/ ● github.com/proengsoft/laravel-jsvalidation ● github.com/esensi/model Model esensi/model Controler proengsoft/laravel-jsvalidation
  • 17. 17/18Cyrille37 - CCØ - AFUP day Tours 2020 En live framagit.org / Cyrille37 / laravel-esensi-example ● laravel.com ● jqueryvalidation.org/ ● github.com/proengsoft/laravel-jsvalidation ● github.com/esensi/model
  • 18. 18/18Cyrille37 - CCØ - AFUP day Tours 2020 ● Ne réinvente pas la roue ● Étudie, contribue et partage ● Les logiciels libres sont tes amis