IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

La sécurité (de base) et plus


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut La sécurité (de base) et plus
    Après m'être battu avec la création d'une application hors d'une sandox (oui, on peut le faire ). Après m'être battu avec un p...n de menu en jQuery (bon, c'est beau, mais fonctionnellement (côté développeur), c'est de la m...e ).

    J'en arrive a vouloir activer la sécurité de base dans l'application.

    Donc je part sur la documentation de la sécurité qui ressemble à un magnifique gâteau à la crème, avec plein de zoli fruits confit, mais sous une coupole de verre blindé et sans le couteau pour le découper (au cas où tu passerais la coupole).

    Donc l'idée est une sécurité de façade (pour une maquette c'est largement suffisant) et c'est inclus, en principe, dans Symfony 2.

    La partie rajoutée dans le fichier de configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    security.config:
      providers:
        encoders:
          Application/Entity/MyUser: plaintext
        main:
          users:
            admin:      { password: admin, roles:[ ROLE_ADMIN, ROLE_SPUSER ] }
            demo:       { password: demo, roles: ROLE_SPUSER }
     
      firewalls:
        main:
          pattern:        /.*
          http-basic:     true
          logout:         true
    Une configuration minimaliste, mais j'ai des doutes sérieux sur cette partie de la configuration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        encoders:
          Application/Entity/MyUser: plaintext
    Application et le nom de mon application, pour le reste, je suis sensé utiliser l'objet user de base (d'après la doc de symfony). Si cette ligne n'est pas présente, le site plante lamentablement. Si elle est présente, la boite de demande d'identification s'affiche bien, mais l'authentification ne se fait pas (lol même pas pour afficher la barre de debug...) donc quelque soit le mot de passe et le nom d'user, juste ou pas, même punition, la boite se ré-affiche.

    Si quelqu'un à une idée... j'achète (enfin, faut pas exagérer non plus, c'est juste une expression )

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Salut

    Paf, encore moi!

    Alors, voici ce que j ai fait:

    J utilise la classe User fourni avec Symfony2 qui est celle par defaut.
    Symfony\Component\Security\User\User
    Cela donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    security.config:
        encoders:
            Symfony\Component\Security\User\User: plaintext
     
        providers:
            main:
                password_encoder: plaintext
                users:
                    rapotor: { password: azerty, roles: ROLE_USER }
     
        firewalls:
            main:
                pattern:    /.*
                http-basic: true
                logout:     true
     
        access_control:
            - { path: /.*, role: ROLE_USER }
    et si on veut utiliser un MD5 ou SHA1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    security.config:
        encoders:
            Symfony\Component\Security\User\User: md5
     
        providers:
            main:
                password_encoder: md5
                users:
                    rapotor: { password: ab4f63f9ac65152575886860dde480a1, roles: ROLE_USER }
     
        firewalls:
            main:
                pattern:    /.*
                http-basic: true
                logout:     true
     
        access_control:
            - { path: /.*, role: ROLE_USER }
    De mon coté, ca fonctionne comme sur des roulettes.

    Tu sais montrer ta classe MyUser?

    Cédric!

  3. #3
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Dans les mystères de la configuration de symfony...

    J'ai compris, je crois, le sens du chemin pour l'encoder. J'ai donc rectifié ma configuration et ... rien.

    J'ai repris la tienne, copié collé dans le config et ... rien.

    J'ai affiné la mienne (une petite erreur dans les enchainements de niveau en yaml que je n'avais pas vu et ... ça marche !

    La config donne
    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    security.config:
      encoders:
          Symfony\Component\Security\User\User: plaintext
      providers:
        main:
          password_encoder: plaintext
          users:
            admin:      { password: admin, roles:[ ROLE_ADMIN, ROLE_USER ] }
            demo:       { password: demo, roles: ROLE_USER }
      firewalls:
        main:
          pattern:        /.*
          http-basic:     true
          logout:         true
      access_control:
         - { path: /.*, role: ROLE_USER }

    Va comprendre pourquoi la tienne a 98% identique ne passe pas ?

    Je travail avec la dernière version récupérée il y a 5 jours par git. Mais je ne vois pas de différences entre les deux configurations.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Tant que ça fonctionne

    Maintenant je tente d'utiliser une classe Doctrine pour utiliser des utilisateurs de la base de données...

    Je poste si je réussi!

  5. #5
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    OK.

    Je tenterais bien d'étendre un peu cette classe doctrine pour y intégrer, comme dans sfGuard, la notion de droits et de groupes.

    Mais ceci sera pour plus tard.

    Je suis ta réussite avec attention

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Ce n’était pas sans mal mais j'ai finalement vaincu!

    Alors, voici les choses ou j ai trébuché avec la solution:

    1. Entité
      Elle doit dépendre de "AccountInterface".
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      namespace Application\HelloBundle\Entity;
       
      use Symfony\Component\Security\User\AccountInterface;
       
      /**
       * Application\HelloBundle\Entity\Users
       */
      class Users implements AccountInterface
      {
      // et le reste avec les getters et setters
      }
      Comme il y a implémentation, il faut definir les fonctions manquantes:

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
       
          /** 
           * Implementing the AccountInterface interface 
           */  
          public function __toString()  
          {  
              return $this->getUsername();  
          }  
       
          public function getRoles()  
          {  
              return array('ROLE_ADMIN');  
          }  
       
          public function eraseCredentials()  
          {  
       
          }
       
          public function getSalt()  
          {  
              return '';
          }
       
          public function equals(AccountInterface $account)  
          {  
              if($this->getUsername() == $account->getUsername())
                  return true;
       
              return false;
          }
      Notez que:
      • J ai mis par defaut ROLE_ADMIN a nos utilisateurs, a peaufiner apres.
      • le "salt" est vide. commencez par un vide avant de corser les choses


    2. Security config

      Les commentaires sont les suivants:
      • les pass en md5 dans la database
      • j ai desactivé le security check pour le profiler... sinon pas simple pour debug!
      • n oubliez pas de mettre le role "ROLE_ADMIN" pour la page a afficher en cas de succès... vu que vos utilisateurs sont "ROLE_ADMIN"


      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      security.config:
          encoders:
              Application\HelloBundle\Entity\Users: md5
       
          providers:
              main:
                  password_encoder: md5
                  entity: { class: HelloBundle:Users, property: username }
       
          firewalls:
              profiler:
                  pattern:    /_profiler/.*
                  security:  false
              main:
                  pattern:    /.*
                  http_basic: true
                  logout:     true
       
          access_control:
              - { path: /.*, role: ROLE_ADMIN }
    3. Tout taper dans un bundle "SecurityBundle"

      Bah, j'avais tout mis dans le HelloBundle! Rangeons un peu histoire de pouvoir reutiliser le bundle dans plusieurs projects!


    Allez hop, étape suivante : form_login avec les routing qui vont avec!
    Je regarde ca ce soir.

Discussions similaires

  1. [Sécurité] Les failles les plus courantes
    Par Lootro dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 94
    Dernier message: 11/02/2008, 08h43
  2. vb.net et insertion de donnée dans une base sql plus
    Par anissabosch dans le forum VB.NET
    Réponses: 4
    Dernier message: 18/10/2007, 19h39
  3. [Sécurité] Connexion base de données
    Par jmayeux dans le forum Langage
    Réponses: 6
    Dernier message: 20/06/2007, 18h14
  4. Réponses: 2
    Dernier message: 23/11/2006, 14h17
  5. [Sécurité] Accès Base Distante sécurisée
    Par SansSucre dans le forum Access
    Réponses: 2
    Dernier message: 26/06/2006, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo