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

Langage PHP Discussion :

Que pensez vous de la sécurité de mon espace membre?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 17
    Par défaut Que pensez vous de la sécurité de mon espace membre?
    Bonjour, je code un CMS perso, ca m'évite d'utiliser une usine a gaz et c'est bon pour l'apprentissage , tout est au poil et là je viens de finir la partie relative à la sécurité j'aimerai avoir votre avis.
    J'ai lu tout un tas de tutos sur le sujet et ai essayé de synthétiser le tout pour faire quelque chose de pas trop dégueulasse, mais n'étant qu'un débutant je ne peux etre sur de la fiabilité de tout ca......

    Comme du code sera plus simple à lire qu'une explication de ma part voici toutes les fonctions utilisées:
    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
     
    /* shaPassword
     * chiffre le mot de passe utilisateur ou toute autre donnée
     */
    function shaPassword($pass){
        $context = hash_init('sha256');
        hash_update($context, $pass);
        return hash_final($context);
    }
     
    /* sessionLogin
     * initialise les variables de session lors du login réussi d'un utilisateur
     */
    function sessionLogin($login, $time){
        session_regenerate_id(TRUE);
        $_SESSION['user'] = dbSafe($login);
        $_SESSION['time'] = time();
        $_SESSION['id'] = (string)randNumber();
        $_SESSION['nav'] = shaPassword($_SERVER['HTTP_USER_AGENT']);
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        return 0;
    }
     
     
    /* sessionEnd
     * termine la session
     */
    function sessionEnd(){
        session_start();
        session_unset();
        session_destroy();
        return 0;
    }
     
    function addCookie($name, $value){
        setCookie($name, $value, $_SESSION['time']+3600, '/admin/');
        return 0;
    }
     
    function delCookie(){
        setcookie('auth', '');
        setcookie('nav', '');
        return 0;
    }
    voilà la partie de code utilisée lors d'un login réussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if($dbPass[0][0] == $passEncrypted){
                        // si tout va bien (login et mot de passe OK on redirige vers
                        // l'espace utilisateur.
                        sessionLogin($name);
                        addCookie('auth', $_SESSION['id']);
                        addCookie('nav', shaPassword($_SERVER['HTTP_USER_AGENT']));
                        redirect('dashboard');
                    }
    et enfin le code situé dans l'entête de chaque page de la zone membre:
    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
     
    if(!isset($_SESSION))
            session_start();
        $exploded = explode('/', $_SERVER['REQUEST_URI']);
        $requestedPage = $exploded[count($exploded) - 1];
     
        include_once($_SERVER["DOCUMENT_ROOT"] . '/config.php');
        if(!empty($_COOKIE['auth']) && !empty($_COOKIE['nav'])){
            if($_COOKIE['auth'] != $_SESSION['id'] || $_COOKIE['nav'] != $_SESSION['nav']){
                addCookie('auth', '');
                addCookie('nav', '');
                sessionEnd();
                redirect('piege');
            }
            elseif($requestedPage == 'login.php'){
            redirect('dashboard');
            }
        }
        elseif(empty($_COOKIE['auth']) && empty($_COOKIE['nav']) && $requestedPage != 'login.php'){
            sessionEnd();
            redirect('piege');
        }
        elseif(($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) && $requestedPage != 'login.php'){
            sessionEnd();
            redirect('piege');
        }
    la fonction redirect() redirige l'utilisateur frauduleux vers un autre site, et le bon utilisateur vers le tableau de bord.

    Je pense également ajouter un peu de sel a ces 2 variables $_SESSION['id'] et $_SESSION['nav'] ca ne peux pas faire de mal a condition que la gestion de tout cela soit correcte.

    Merci pour vos avis et conseils.

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Pour commencer il y a plusieurs points que je ne comprends pas dans ton code:
    - pourquoi toutes tes fonction renvoient 0 ?
    - pourquoi tu définis une sécurité par cookies ? d'une part c'est pas plus sécurisé que le comportement normal des sessions et d'autre par qu'est ce qui va se passer si le client à désactivé les cookies ?
    - ton code fait implicitement plusieurs session_start (par exemple la fonction session_end en fait un à nouveau)
    - tu peux vérifier qu'une session existe en utilisant session_id

  3. #3
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Salut,

    Déjà bravo pour ce que tu as déjà fait, Qu'est ce qui arrive quand un utilisateur oublie son mot de passe de passe ? ou à une ip dynamique ? A priori il va se faire lapider dans le piège

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    ... Qu'est ce qui arrive quand un utilisateur oublie son mot de passe de passe ?
    Un mot de passe ne suffit pas ?
    Il faut aussi un mot de passe de passe ?
    Ouah ! drôlement sécurisé !

    Plus sérieusement (?!),
    ca me fait penser à une porte super-sécurisée, avec 50 verrous, 10 barres de force, 150 cadenas, 3 digicodes, ....
    .... alors que la fenêtre est restée ouverte ! ...

    Plus sérieusement (pour de vrai cette fois), "trop de sécurité tue la sécurité".
    - hashage des données sensibles = OK
    - mais ... session + cookies ... ? cookies = "stocké sur l'ordi client" = en dehors de "ta" protection ...
    Dernière modification par Invité ; 05/08/2011 à 17h09.

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Pourquoi tu ne travaille pas avec un framework?

  6. #6
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par m4riachi Voir le message
    Pourquoi tu ne travaille pas avec un framework?
    Bonjour, je code un CMS perso, ca m'évite d'utiliser une usine a gaz et c'est bon pour l'apprentissage , tout est au poil et là je viens de finir la partie relative à la sécurité j'aimerai avoir votre avis.
    Il est pourtant clair, non ?

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/09/2006, 15h54
  2. [SGBD/MLD]Que pensez vous de mon MLD?
    Par Bils dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 29/03/2006, 16h50
  3. [VB] Que pensez-vous de la solution à mon projet ?
    Par soad029 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 16/12/2005, 16h01
  4. que pensez vous de mon code source ecrit en c++(je debute)
    Par superspike23 dans le forum Débuter
    Réponses: 6
    Dernier message: 06/10/2005, 18h26

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