2015-11-11 2 views
2

J'ai une règle de pare-feu qui, avec les annotations, permet uniquement l'accès aux actions en tant qu'utilisateur spécifique.Symfony 2 Sécurisation de la connexion avec IP

De plus, j'aimerais bloquer toute connexion si elle ne vient pas d'un certain réseau. Recherche d'une solution Je suis tombé sur des règles supplémentaires access_control suite à cette guide.

Le problème est là, si je restreins ma page de connexion via les règles IP. Je reçois toujours une erreur ERR_TOO_MANY_REDIRECTS si quelqu'un essaie de l'atteindre. Je préférerais avoir un message "Page non trouvée" pour ne pas même faire savoir à quelqu'un de l'extérieur qu'il pourrait y avoir une connexion. Comment puis-je faire cela avec Symfony?

security.yml:

security: 
    ... 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     default: 
      form_login: 
       provider: fos_userbundle 
       login_path: /login 
       use_forward: false 
      logout:  true 
      anonymous: true 

    access_control: 
     - { path: ^/logout$, role: ROLE_ADMIN } 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, ips: [127.0.0.1, fe80::1, ::1]} 
     - { path: ^/login$, roles: ROLE_NO_ACCESS } 
     - { path: ^/admin, role: ROLE_ADMIN, requires_channel: https} 
+0

que s'est-il passé dans apache error.log? –

+0

Rien, juste 'Child: Starting 150 worker threads.', qui est le message de redémarrage. Vous pouvez seulement voir quelque chose dans le access.log où 31 fois '127.0.0.1 - - [11/Nov/2015: 17: 20: 47 +0100]" GET/login HTTP/1.1 "302 344's est écrit – lony

+0

quand vous enlever 'requires_channel: https' boucle infinie existe toujours? –

Répondre

1

Si je ne me trompe pas, ce que symfony ici, est essayer de faire correspondre le rôle de l'utilisateur à ce qui est nécessaire pour le chemin. S'il ne correspond pas à l'un de ces rôles, il envoie l'utilisateur à la page de connexion.

Le problème est que la page de connexion est d'où vient l'utilisateur. Ainsi, l'utilisateur entre dans une boucle infinie car leur condition ne peut jamais être satisfaite. Je suggère de mettre la page de connexion elle-même en dehors du pare-feu et de simplement mettre la vérification IP dans le code de la page LOGIN et si elle n'est pas remplie, vider ailleurs, qui ne se trouve pas dans le pare-feu.

+0

Comment est-ce que je peux présenter ceci en présentant seulement un code d'état 404? – lony

+0

Cela a un bon exemple pour vous: http://symfony.com/doc/2.3/book/controller.html#managing-errors-and-404-pages – Adi

+0

Merci, et comment puis-je obtenir Symfony pour rediriger vers mon 404 page si l'adresse IP donnée ne correspond pas? – lony