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 :

Sécuriser une doctrine route


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut Sécuriser une doctrine route
    Bonsoir à tous !

    J'ai un lien (DoctrineRoute) sur l'action A qui pointe vers son action (B) et qui est immédiatement rediriger vers A.

    Ce lien est présent sur la page que si plusieurs conditions sont satisfaites.
    Pour le moment, il suffit d'entrer l'url et on accède à l'action B...

    B fait un traitement que je souhaite sécuriser.
    Je voudrais éviter que le traitement se fasse si l'utilisateur rentre directement l'url.

    Mais ceci n'est pas suffisant pour sécuriser mon action...
    Il faudrait peut être contrôler la page précédente ?

    Je sais pas trop comment faire ceci ...

    Une idée ?? merci d'avance !

  2. #2
    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
    Pourquoi passer par une route pour une action à sécuriser ?

    Tu peux aussi mettre ton action dans une librairie personnel, et l'appeler depuis ton traitement.

    dans le dossier lib du projet, tu crée un dossier "securise" et dans ce dossier une class avec ton code.

    Inaccessible par un user.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Le code sera sécurisé mais pas son accès...
    Si l'utilisateur connait l'url il pourra accéder à l'action et donc au dossier "securise".

  4. #4
    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
    Si tu mets, comme je le conseille, le code dans une librairie et que l'utilisateur est capable d'y accéder, ton site est alors tellement compromis qu'il ne sert plus à rien de s'inquiéter pour ce bête accès !!!

    Il s'agit simplement de ne pas créer de route, juste un class dans une librairie. Donc à un endroit totalement inaccessible à un utilisateur.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Hum... Je comprends ce que tu veux dire mais je vois pas comment ca peut résoudre le problème !

    Je refais une explication plus précise de ce qui se passe !


    L'utilisateur clique sur un bouton.
    Ce bouton va faire exécuter un script qui, selon le résultat, va faire apparaitre un autre bouton.

    C'est l'action de ce dernier bouton que je souhaite sécuriser ! L'accès à l'action de se bouton doit être permise uniquement si le bouton est présent...
    Je veux que l'action ne soit pas accessible donc par url direct...

    Le fait de placer l'action dans une class externe ne change rien...

    Je comprend que le fait d'agir directement sur class::fonction sera sécurisé mais comment juste en cliquant sur le bouton... (sans passer par l'action qui possède une url)

  6. #6
    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
    Le système existe de base dans symfony.

    Il faut utilisé un lien sécurisé par XCRF. Si tu regardes dans un module généré par le module administration, tu vas voir que le liens pour supprimer un enregistrement est sécurisé de cette manière.

    Dans ton action, tu as une fonction qui vérifie la présence du XCRF et donc que l'accès au lien est valide. Le système créer le code, et un timecode de durée de validité du lien.

    Tous simple.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    ha oki ! Merci.
    Je savais pas qu'on pouvait l'utiliser autre que dans les formulaires...

    Tu veux dire CSRF je suppose ??...

    Je sais pas du tout comment faire, je vais chercher ça...


    --Edit--

    C'est apparemment avec l'option url_for('txt',route,objet, array('csrf'=>true);

    Mais dans le source il genere un <a csrf="1" ...

    Complend po ...

  8. #8
    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
    Oui, CSRF, j'ai du monde à la maison ce soir, et je répond un peu vite.

    Bizarre, as-tu initialisé le CSRF lors de la création du projet ? Si non, on peut mettre la clef par après. Je pense que tu n'as pas de clef tous simplement.

    apps/<monAppli>/config/setting.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    all:
      ...
      .settings:
        # Form security secret (CSRF protection)
        csrf_secret:            MaClefPerso
      ...

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Oui, le CSRF est présent dans le setting.yml

    Mais je vois pas ce que j'en fais après :$
    Il faut que je test si le CSRF est présent dès qu'on rentre dans l'action ?...

    ps: tu aura le code

  10. #10
    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 fonction qui test la validité est :
    $request->checkCSRFProtection()

    A vérifier, mais dans mes souvenirs, elle génère une erreur 404, sans besoins de code suplémentaire si le CSRF n'est pas valide.

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Oki. merci pour la fonction !

    Par contre mon token = 1 toujours...
    Je pense que c'est un problème d'utilisation dans le link_to... qui ne l'autorise pas... donc csrf => true : il place un csrf='1'...

    J'ai trouvé un seul exemple où c'était utilisé; avec un url_for...

    Mais comment mettre en place url_for avec csrf et doctrineroute...

  12. #12
    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
    Je suis un peu embêté.

    Vu que, pour mon compte, cela c'est toujours mis en place sans que je me sois posé la question du pourquoi.

    A priori, il faudrait mettre, dans url_for, une methode delete qui va, automatiquement, générer le csrf.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    link_to('Delete', 'user/delete?id='.$form->getObject()->getId(), array('method' => 'delete') )
    Mais, en général, j'ai ce liens dans un formulaire. (<form>) est-ce que l'avoir en solitaire va donner le même effet ?

    A tester.

  13. #13
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Oué je pense que ça va de paire la sécurité csrf et le formulaire...

    Je testerai mais j'ai pas trop d'espoir de ce côté !

    Je vais contourner la chose en utilisant une variable flash. Si présent =>go sinon l'action sera redirigée...

    T'en pense quoi ?

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Une variable flash ça peut aussi le faire mais...une fois sur l'autre page, qui détecte si un flash a été passé, si l'utilisateur rafraîchit sa page je crois que le flash va disparaître, et donc il va se faire jeter si on peut dire !

    Regardes du côté de la classe myUser (sfUser) avec les sessions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // par exemple pour stocker le test
    $var = 'ok';
    $this->getUser()->setAttribute('test_btn', $var);
     
    // et pour le récupérer
    $verification = $this->getUser()->getAttribute('test_btn');

  15. #15
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Pourrais tu nous donner un peu de code source, qu'on comprenne réellement ce que tu veux faire ?

  16. #16
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2005
    Messages : 277
    Par défaut
    Oui spike !
    J'ai pensé aux variables de session. Ca sera mieux...

    mathieu4480

  17. #17
    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
    Le link_to génère un jeton csrf quant il est appelé avec certaines méthodes.

    Les méthodes put, delete et post ont pour effet de transformer (par javascript) le liens en formulaire et, si l'utilisation du csrf est en cours dans ton application, le formulaire va embarquer un jeton csrf.

Discussions similaires

  1. Sécuriser une base de donnée
    Par Waluigi dans le forum Sécurité
    Réponses: 1
    Dernier message: 30/05/2006, 11h48
  2. Sécuriser une application Access partagé sur réseau
    Par hnb2003 dans le forum Sécurité
    Réponses: 2
    Dernier message: 16/03/2006, 19h10
  3. [VB]sécuriser une base access
    Par t26 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/02/2006, 11h36
  4. sécuriser une table
    Par toome dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 24/10/2005, 11h34
  5. Création de groupes locaux pour sécuriser une ressource
    Par elagarde dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 30/09/2005, 10h15

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