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

 PHP Discussion :

Sécurité Tentative de connexions


Sujet :

PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2019
    Messages : 33
    Points : 35
    Points
    35
    Par défaut Sécurité Tentative de connexions
    Bonjour,

    dans le cadre de mon stage, il m'est demandé de mettre en place un blocage de connexions au bout de trois tentatives, sur Symfony 4 .

    J'ai regardé différentes solutions mais de probant.

    Pourriez vous me conseiller une approche ? un bundle ? Ou autre.

    Merci d'avance pour votre temps

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 350
    Points : 580
    Points
    580
    Par défaut
    Salut,

    Il y a ce bundle qui semble correspondre à ce que tu dois implémenter : https://github.com/anyx/LoginGateBundle

    Et si le bundle n'est pas suffisant, a priori il est recommandé dans ce cas d'utiliser un Custom User Checker : https://symfony.com/doc/current/secu..._checkers.html

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2019
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    Merci Thomas,

    Le bundle est intéressant, je vais essayer de le mettre en place.

    L'installation est costaud, mais cela m'a permis de découvrir des erreurs que je ne connaissais pas : Undefined Index , et l'autowire.

    Par contre je me retrouve face à une erreur que je ne comprend pas, il me semble que je passe bien un tableau "d'options". Auriez vous une idée ?

    Argument 2 passed to Anyx\LoginGateBundle\Service\BruteForceChecker::__construct() must be of the type array, null given, called in C:\Blog\Axo\var\cache\dev\ContainerOaqO5k9\getAnyx_LoginGate_BruteForceCheckerService.php on line 13
    BruteForceChecker.php :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
     
    namespace Anyx\LoginGateBundle\Service;
     
    use Symfony\Component\HttpFoundation\Request;
    use Anyx\LoginGateBundle\Storage\StorageInterface;
     
    class BruteForceChecker
    {
        /**
         * @var \Anyx\LoginGateBundle\Storage\StorageInterface
         */
        protected $storage;
     
        /**
         * @var array
         */
        private $options = [
            'max_count_attempts' => 3,
            'timeout' => 60
        ];
     
        /**
         * @return \Anyx\LoginGateBundle\Storage\StorageInterface
         */
        public function getStorage()
        {
            return $this->storage;
        }
     
        /**
         * @param \Anyx\LoginGateBundle\Storage\StorageInterface $storage
         * @param array $options
         */
        public function __construct(StorageInterface $storage, array $options)
        {
            $this->storage = $storage;
            $this->options = $options;
        }
     
        /**
         * @param \Symfony\Component\HttpFoundation\Request $request
         * @return boolean
         */
        public function canLogin(Request $request)
        {
            if ($this->getStorage()->getCountAttempts($request) >= $this->options['max_count_attempts']) {
     
                $lastAttemptDate = $this->getStorage()->getLastAttemptDate($request);
                $dateAllowLogin = $lastAttemptDate->modify('+' . $this->options['timeout'] . ' second');
     
                if ($dateAllowLogin->diff(new \DateTime())->invert === 1) {
                    return false;
                }
            }
     
            return true;
        }
    }

    config.yml :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    imports:
        - { resource: security.yml }
     
    framework:
        secret: "Some secret thing"
        router: { resource: "%kernel.root_dir%/config/routing.yml" }
        form: true
        csrf_protection: false
        profiler:
            only_exceptions: false
            collect: false
        session:
            storage_id: session.storage.mock_file
        test: ~
        templating:
            engines: ['php']
     
    # Doctrine Configuration
    doctrine_mongodb:
        connections:
            default:
                server: mongodb://127.0.0.1:27017
                options:
                    connect: true
        default_database: login_gate
        document_managers:
            default:
                auto_mapping: true
     
     
    login_gate:
        storages: ['mongodb', 'session'] # Attempts storages. Available storages: ['orm', 'session', 'mongodb']
        options:
            max_count_attempts: 3
            timeout: 600 #Ban period
            watch_period: 3600 #Only for orm storage. Period of actuality attempts
     
    services:
        app.service.user_provider:
            class: MongoDBAppBundle\Service\UserProvider
            arguments: ['@doctrine_mongodb.odm.document_manager', 'MongoDBAppBundle\Document\User']
        app.brute_force_listener:
            class: MongoDBAppBundle\EventListener\BruteForceAttemptListener
            tags:
                - { name: kernel.event_listener, event: security.brute_force_attempt, method: onBruteForceAttempt }

    LoginGateExtension.php : dans lequel j'ai du ajouté "@" aux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $container->setParameter('anyx.login_gate.brute_force_checker_options', @$config['options']);
            $container->setParameter('anyx.login_gate.watch_period', @$config['options']['watch_period']);
    pour éviter Undefined Index

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    namespace Anyx\LoginGateBundle\DependencyInjection;;
     
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use Symfony\Component\Config\FileLocator;
    use Symfony\Component\HttpKernel\DependencyInjection\Extension;
    use Symfony\Component\DependencyInjection\Loader;
     
    /**
     * This is the class that loads and manages your bundle configuration
     *
     * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
     */
    class LoginGateExtension extends Extension
    {
     
        /**
         * {@inheritDoc}
         */
        public function load(array $configs, ContainerBuilder $container)
        {
            $configuration = new Configuration();
            $config = $this->processConfiguration($configuration, $configs);
     
            $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
            $loader->load('services.yml');
     
            foreach (['orm', 'mongodb'] as $storage) {
                if (in_array($storage, $config['storages'])) {
                    $loader->load('services.' . $storage . '.yml');
                }
            }
     
            $chosenStorages = [];
            foreach ($config['storages'] as $storage) {
                $chosenStorages[] = 'anyx.login_gate.storage.' . $storage;
            }
     
            $container->setParameter('anyx.login_gate.storages', $chosenStorages);
            $container->setParameter('anyx.login_gate.brute_force_checker_options', @$config['options']);
            $container->setParameter('anyx.login_gate.watch_period', @$config['options']['watch_period']);
        }
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 350
    Points : 580
    Points
    580
    Par défaut
    Citation Envoyé par Yvesremort Voir le message
    L'installation est costaud, mais cela m'a permis de découvrir des erreurs que je ne connaissais pas : Undefined Index , et l'autowire.
    En quoi est-elle costaud ? Dans le README il n'y rien de particulier a priori.

    Citation Envoyé par Yvesremort Voir le message
    Par contre je me retrouve face à une erreur que je ne comprend pas, il me semble que je passe bien un tableau "d'options". Auriez vous une idée ?
    As-tu essayé de vider le cache (vu que l'erreur semble venir d'un fichier en cache)
    À quel endroit/moment est instancié le BruteForceChecker ? D'après l'erreur le second argument qui devrait être un tableau d'options vaut null.

    Citation Envoyé par Yvesremort Voir le message
    LoginGateExtension.php : dans lequel j'ai du ajouté "@" aux lignes : [...] pour éviter Undefined Index
    À mon avis il vaudrait mieux supprimer ces "@", comprendre pourquoi ces indexes ne sont pas définis et corriger ce qu'il faut pour qu'ils le soient.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    mai 2008
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 575
    Points : 2 441
    Points
    2 441
    Par défaut
    Remplace la config dans config.yml par ceci pour voir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    anyx:
        login_gate:
            storages: ['orm'] # Attempts storages. Available storages: ['orm', 'session', 'mongodb']
            options:
                max_count_attempts: 3
                timeout: 600 #Ban period
                watch_period: 3600

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2019
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    J'ai procédé au remplacement comme proposé par Tsilefy , vidé le cache, j'ai la même erreur.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 350
    Points : 580
    Points
    580
    Par défaut
    À quel endroit ou quel moment est instancié le BruteForceChecker ? D'après l'erreur le second argument qui devrait être un tableau d'options vaut null.

    Après peut-être que le bundle n'est plus fonctionnel... (peu de changements récents et la doc n'est visiblement pas à jour).

Discussions similaires

  1. [Sécurité] Tracer une connexion
    Par jc_cornic dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2007, 23h03
  2. bloquage d'une tentative de connexion via internet
    Par noussaENSI dans le forum Développement
    Réponses: 12
    Dernier message: 17/07/2006, 13h09
  3. Réponses: 1
    Dernier message: 04/03/2006, 21h56
  4. Réponses: 7
    Dernier message: 12/01/2006, 20h50
  5. Tentative de connexion internet:accès interdit
    Par doctorlove dans le forum Réseau
    Réponses: 16
    Dernier message: 05/12/2005, 21h57

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