Architecture(s) et application(s) Web - CSC4101 - Apports du framework Symfony - Contrôle d'accès - Télécom SudParis
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Architecture(s) et application(s)
Web
Télécom SudParis
(26/10/2018)
CSC4101 - Apports du framework Symfony
- Contrôle d'accèsCSC4101 2018-2019 CM 7
Table des matières
1 Rappel : Où en sommes-nous 1
2 Contrôle des accès 1
3 Authentication Web 3
4 Contrôle d'accès et permissions 6
5 Symfony 7
6 Ensuite. . . 9
1 Rappel : Où en sommes-nous
1.1 Récapitulatif
Gabarits Twig pour le HTML
CSS avec Bootstrap pour la présentation
ORM Doctrine pour l'interface avec la BD
Contrôleurs Symfony (routage)
Gestion CRUD basique
Formulaires
API
1.2 Que manque-t-il ?
Authentication / contrôle d'accès (S 7)
Gestion avancée des données soumises : données liées (S 8)
Sécurité, gestion des erreurs (S 9)
Déploiement
Approfondir la compréhension des apports du framework
2 Contrôle des accès
Cette section présente le principe des mécanismes de contrôle d'accès qui seront mis en ÷uvre
pour reconnaître les utilisateurs de l'application et leur donner la permission d'utiliser ou non
les fonctionnalités de celle-ci.
2.1 Protéger les données / fonctions
Condentialité : application accessible sur Internet, même si processus / données privés
Privilèges : qui fait quoi
Spécications fonctionnelles (prols utilisateurs)
Contrôle par l'application (HATEOS)
Contrôle d'accès : reconnaître les utilisateurs, et mettre ne place les restrictions (sans nuire à
l'utilisabilité, mobilité, etc.)
Autres aspects sécurité vus dans une séance ultérieure
2.2 Contrôle des accès
Protéger l'accès aux fonctionnalités de l'application
Qui est autorisé à faire quoi
Dans un monde ouvert (Internet, Web, standards)
Poly étudiant 1CSC4101 2018-2019 CM 7
Dans la vie d'une entreprise, on peut déployer des applications sans nécessairement les déployer
sur le Web, sur Internet, donc ouvertes à tous les vents. . .
Mais on rend alors l'accès délicat : intranet/extranet, nécessité d'un VPN, compatibilité avec
terminaux mobiles, utilisateurs nomades, etc.
Déployer sur le Web garde des avantages.
2.2.1 Sécurité par obscurcissement ?
Ne pas protéger spéciquement,
et ne pas documenter / expliquer / rendre visible ?
Ce n'est pas parce que le code de l'application est caché sur le serveur que les méchants ne trouveront
pas des failles !
#Fail
Il faut partir d'un principe de mise en place de contrôles eectifs, d'autant plus si le code source
de certains éléments de l'application est facilement récupérable (HTML, JS).
Attention aussi à protéger l'accès aux couches basses : middleware, base de données, code
source, chiers de conguration.
Le Cloud n'aide pas, de ce point de vue (repositories de code publics, stockage Cloud non-
protégé).
2.2.2 Contrôle eectif
Au niveau de la conguration du serveur (ne pas permettre aux clients de découvrir les failles en
regardant le source)
Dans les fonctionnalités du logiciel : rewall Symfony
Mesures complémentaires (audit, etc.)
2.3 Modèle contrôle des accès
Identication l'utilisateur fournit à un service un moyen de le reconnaître : identité
Authentication le service vérie cette identité
Autorisation le service donne à l'utilisateur certaines permissions
Cette section ne vise pas à un cours théorique exhaustif sur le sujet, mais juste à rappeler
quelques éléments importants, généraux, et illustrés dans le contexte particulier des applications
déployées en contexte Web.
2.3.1 Identication
Identiants :
email
identiant d'utilisateur (login )
certicat client X509 (TLS)
Jeton dans un en-tête HTTP
...
L'identication doit être conrmée par l'authentication
Importance des standards : compatibilité avec tous les clients Web.
Les certicats clients X509, par exemple, ont posé des problèmes du fait d'une ergonomie
discutable dans la mise en ÷uvre dans les navigateurs. . . et de la méconaissance des utilisateurs
des mécanismes associés (révocation, non-dissémination, etc.).
2.3.2 Authentication
Valide le fait que celui qui essaye d'utiliser le service est bien le propriétaire légitime de l'iden-
tiant présenté
Protocole de vérication :
Poly étudiant 2CSC4101 2018-2019 CM 7
mot-de-passe
signature valide d'une donnée quelconque (challenge ) avec la clé privée associée au certicat
client
délégation à service externe (Shibboleth/CAS, OAuth 2, . . . )
nouveaus standards : U2F, Fido
...
Importance des mécanismes de double facteur d'authentication (2FA).
Problème des mots-de-passe : évolution vers un monde sans mots-de-passe sur le Web : diusion
de nouveaux standards.
Attention à déléguer à un service tiers : est-il able ?
2.3.3 Autorisations
Permissions applicatives associées à l'identiant
Pour une certaine période
Génération d'un jeton temporaire (session authentiée)
Cookie
Alors que l'authentication peut être déléguée, la gestion des autorisations est du ressort du
développeur de l'application.
2.4 Dans protocole HTTP
Identication / authentication de bas niveau dans le protocole HTTP (cf. RFC2617 : HTTP
Authentication: Basic and Digest Access Authentication )
Rappel : HTTP est sans état
Le client HTTP doit se réauthentier à chaque requête
Permet de transporter l'authentication dans les en-têtes
Alternative : authentication applicative + session applicative
3 Authentication Web
Cette section présente un mécanisme d'authentication de base, l'authentication applicative,
via un formulaire dédié construit par l'application, dans une de ses pages Web.
3.1 Mécanismes
Authentication HTTP
Authentication Basic
autres
Authentication applicative
3.2 Authentication applicative
3.2.1 Gestion de l'identication et de l'authentication par l'application
L'authentication est une des fonctionnnalités de l'application, via la session
Formulaire d'authentication
Login
Mot-de-passe
base de données de comptes
C'est un module particulièrement sensible : ne pas improviser son développement.
Atention aux contraintes juridiques en plus de techniques.
Poly étudiant 3CSC4101 2018-2019 CM 7
3.2.2 Formulaire d'authentication
Formulaire standard
Champs :
Login ou email
Mot-de-passe (saisie cachée)
3.2.3 Vérication de l'authentication
Comparer avec prol d'utilisateur connu (en base de données)
Générer une session pour reconnaître l'utilisateur par la suite
Attention : attaques force brute
Invalider un compte/prol, ou faire une gestion de surcharge qui désactive les tentatives (throt-
tling, blacklist réseau, etc.)
3.2.4 Dans Symfony
Composant Security
Flexible : gestion souple et extensible de l'authentication
Utilisera le bundle FOSUserBundle pour nous simplier la vie en gérant les utilisateurs via la base
de données
3.2.5 Procédures ?
Gestion des mots-de-passe (qualité aléa, longueur, stockage approprié, etc.)
Récupération de compte si oubli mot-de-passe
Canal sécurisé ou envoi jeton de réinitialisation sur email (implique gestion emails)
Conrmations d'authentication pour sections critiques de l'application
Garder des traces (audit, obligations légales)
Conformité RGPD (données personnelles dans les prols)
Complexe, donc tentative de déléguer à un tiers. . . mais ce tiers est-il able ?
Augmentation des risques pour les utilisateurs.
Si on est piraté, seuls nos clients sont victimes. Mais est-ce que ça vaut le coup pour les pirates ?
Il vaut peut-être mieux qu'ils essayent de pirater FaceBook, et ce jour-là gare à nous (tous)
qui avons intégré une authentication via FaceBook. . . ?
3.2.6 Captcha
Completely Automated Public Turing test to tell Computers and Humans Apart
Vérier qu'un humain est aux commandes
Pas infaillible
Problèmes accessibilité
Poly étudiant 4CSC4101 2018-2019 CM 7
Travail dissimulé
Surveillance
3.2.7 Authentication à double facteur
Pas uniquement élément connu
plus
Élément en possession
Exemples
carte bancaire (possession) + code PIN (connu)
Poly étudiant 5CSC4101 2018-2019 CM 7
login + mdp (connu) + SMS reçu (possession mobile)
login + mdp (connu) + badge de sécurité générant un code unique (possession)
Authentication plus forte.
Attention : certains mécanismes s'avèrent moins able que prévu (SMS)
Attention aux exigences de sécurité réglementaires.
4 Contrôle d'accès et permissions
Cette section présente le principal modèle de dénition de permissions utilisé pour le contrôle
d'accès, à base de rôles.
4.1 Role-Based Access Control (RBAC)
Contrôle d'accès à base de rôles
Utilisateur
Rôle
Permissions
Au-lieu d'attribuer des permissions à un utilisateur, on les attribue à un rôle, qu'on délègue
à un utilisateur : les permission sont gérées en fonction de la structure de l'organisation,
indépendamment des embauches, départs ou changement de responsabilité des individus.
4.2 Permissions
Modèle applicatif de permissions
Vérier les permissions à chaque traitement de requête
Routage
Dans les traitements fonctionnels
Module Firewall de Symfony
4.3 Réponses Web
Code 200 + Page mentionnant problème de permissions
Code 403 (et peut-être un message dans la page) ?
Poly étudiant 6CSC4101 2018-2019 CM 7
5 Symfony
Cette section présente la façon dont on peut mettre en ÷uvre les mécanismes d'authentication
et de contrôle d'accès dans Symfony.
5.1 Flexibilité
Symfony permet de gérer plein de modalités de l'authentication
Choix : utiliser un module prêt à l'emploi : FOSUserBundle
5.2 Gestion des utilisateurs avec FOSUserBundle
Classe User du Modèle (et mapping Doctrine en base)
Dénition de règles dans le rewall Symfony
Rôles
Routes et templates standards :
Login + password
Logout
Inscription, rappel du mot-de-passe,
Cf. documentation FOSUserBundle
5.3 Classe User
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
// ...
FOS\UserBundle\Model\User fournit déjà :
username
email
password
Sera sérialisé dans la session à la n de chaque réponse
5.4 Hiérarchie de rôles
Arbitraire, selon les besoins de l'application
Exemple :
1. ROLE_SUPER_ADMIN
2. ROLE_ADMIN
3. ROLE_CLIENT
4. ROLE_USER
# security.yml
role_hierarchy:
ROLE_CLIENT: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN]
Poly étudiant 7CSC4101 2018-2019 CM 7
5.5 Firewall
Contrôle l'accès aux URLs en fonction des rôles :
# app/config/security.yml
security:
# ...
firewalls:
# ...
default:
# ...
access_control:
# require ROLE_ADMIN for /admin*
- { path: ^/admin, roles: ROLE_ADMIN }
Expressions rationnelles : "^/admin" signie tout chemin de route qui commence par /admin.
D'autres possibilités existent (programmées).
5.6 Utilisation dans les contrôleurs
Contrôle d'accès sur les routes :
@Route("/comment/{postSlug}/new", name="comment_new")
@Security("is_granted('IS_AUTHENTICATED_FULLY')")
Encore une fois, importance des annotations
Contrôle d'autorisation dans le code des méthodes :
$this->denyAccessUnlessGranted('ROLE_ADMIN', null, 'Access denied!');
Entrée interdite, à moins que. . .
5.7 Prol de l'utilisateur
Accès aux propriétés de l'utilisateur :
$this->getUser()
// ...
$email = $this->getUser()->getEmail();
$post->setAuthorEmail($email);
5.8 Personnalisation apparence
Gabarits Twig
{% if is_granted('ROLE_ADMIN') %}
Delete
{% endif %}
5.9 Gestion ne
Dans code d'une méthode de contrôleur :
$this->denyAccessUnlessGranted('ROLE_ADMIN', null, 'Access denied!');
équivalent à :
if (! $this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
throw $this->createAccessDeniedException('Access denied!');
}
Déclenche une exception :
erreur 403
ou redirection vers login
Poly étudiant 8CSC4101 2018-2019 CM 7
5.9.1 Exceptions et codes retour
try {
// faire quelque chose qui appelle : throw
} catch (Exception $e) {
echo 'Exception reçue : ', $e->getMessage(), "\n";
}
Permet d'intercepter de façon standard les exceptions :
AccessDeniedException (403)
NotFoundHttpException (404)
5.10 Gestion des utilisateurs
Via du code PHP (API de Symfony)
Par console en ligne de commande :
création utilisateur
php bin/console fos:user:create testuser test@example.com p@ssword
dénition de rôle :
php bin/console fos:user:promote testuser ROLE_ADMIN
6 Ensuite. . .
6.1 TP n° 7
Mise en ÷uvre de l'authentication et du contrôle d'accès
6.2 Q / R
Copyright
Ce cours est la propriété de ses auteurs et de Télécom SudParis.
Cependant, une partie des illustrations incluses est protégée par les droits de ses auteurs, et
pas nécessairement librement diusable.
En conséquence, le contenu du présent polycopié est réservé à l'utilisation pour la formation
initiale à Télécom SudParis.
Merci de contacter les auteurs pour tout besoin de réutilisation dans un autre contexte.
Poly étudiant 9Vous pouvez aussi lire