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 :

Session, sécurité et passage de commandes sans user mdp


Sujet :

Langage PHP

  1. #1
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut Session, sécurité et passage de commandes sans user mdp
    Bonjour,
    Je réalise actuellement une saisie de commande, les produits sont stockés sous Mysql,
    il y a des contrôles de formulaire avec JS puis sous PHP et envoi de mails sous PHPMailer ...

    Voilà ce qui m'amène :
    1) J'ai plusieurs PHP dont je ne veux pas qu'on réalise l'appel directement ex :
    MonPhpForm.php appelant MalibrairieFonctions.php, je veux donc empêcher l'appel direct de MalibrairieFonctions.php ...
    Pour celà j'initialise une session avec un $_SESSION[''] fixe que je teste dans les php appelés, si ça ne correspond pas : page blanche

    A la différence de site de e-commerce ou autres, je n'ai pas besoin d'utilisateurs enregistrés avec user/MDP et droits particuliers,
    en clair tout le monde y compris (mal intentionnés) peuvent passer commande, le tri se fera plus tard ...

    Pour être bien clair un exemple de ce que j'ai acuellement:
    MonPhpForm.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session_start();
    $_SESSION['xxxx']= 'yyy'; 
    session_regenerate_id();
    MalibrairieFonctions.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session_start();
    If ( $_SESSION['xxxx']!= 'yyy' )
    exit(1);
    Est ce une bonne idée ou pas ? Si oui quelles sont les alternatives (simples) dans mon cas ?
    j'utilise aussi ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session_regenerate_id();
    Est-ce aussi une bonne idée ou dans mon cas c'est inapproprié ?


    Merci d'avance pour vos réponses !
    Laurent

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Bonjour,

    N'est il pas plus simple de simplement exclure tes script php de la racine web et ainsi de les rendre inaccessible (et donc par conséquent inexécutable).

    Une appli web standard ne laisse accessible qu'un index.php qui fait le bootstrap et de l'application et inclus les bon scripts au bon moment. Tous les autres scripts ne sont pas dans des dossiers accessible au serveur web et donc inaccessible aux utilisateurs.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Merci pour cette réponse Grunk,

    Effectivement ... je testerai cela !
    Par contre pour l'appel d'un fichier php
    en dehors de la racine web ... je vais/dois me renseigner !?
    (Pour l'instant je suis en localhost sous wamp)

    Je serai ensuite probablement en mutualisé,
    donc à voir s'il n'y a pas d'éventuelles restrictions chez l'hébergeur ?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tous les hébergeurs proposent normalement un dossier avant le dossier www qui permet justement de sortir des fichier de la racine web.

    Il faut bien dissocier la partie apache qui n'a accès qu'aux dossiers qu'on veux bien lui donner (www par défaut sous wamp) et la partie PHP qui lui à accès à tous le système de fichier.

    Tu peux donc très bien avoir un index.php dans C:\wamp\www ayant pour contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    require_once('D:/mondossier/monscript.php');
    fonction_de_monscript();
    ainsi monscript.php est inaccessible via une adresse du genre http://localhost/monscript.php mais tout à fait utilisable par PHP.

    En règle général ce que l'on fait c'est un dossier destiné à une application. Par exemple D:\sites\MaSuperApp. Donc complètement en dehors de la racine web (http://localhost/MaSuperApp) ne pointe sur rien.
    Dans ce dossier on défini un dossier comme "public" , par exemple D:\sites\MaSuperApp\pub.
    C'est ce dossier qui va contenir tout ce qui doit être accessible via un navigateur (css, js, index.php, etc ...)

    Puis on créer dans apache un alias ou un virtualhost donnant ainsi le droit à apache d'afficher ce qui se trouve dans ce dossier public.
    On peut ensuite faire autant de dossier et de script que l'on veux (par exemple D:\sites\MaSuperApp\scripts) et il ne seront jamais accessible via un navigateur , mais toujours facile à inclure dans un script php

    Un exemple concret dans wamp est phpmyadmin , qui ne se trouve pas dans le dossier www mais qui est tout de même accessible via un alias.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Impeccable !
    Je teste ça dès que possible !

  6. #6
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Pour interdire l'exécution d'un fichier, il suffit de vérifier l'existence d'une constante (tu trouveras un tel usage dans chaque fichier de Joomla).

    Dans ton "index.php", tu vas écrire quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define('_MonLogiciel', 1);
    et, dans 100% des autres fichiers .php (n'ayant pas pour vocation d'être un point d'entrée), tu vas écrire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    defined('_MonLogiciel') or die('No direct access allowed');
    au tout début du fichier.

    Ce qui veut dire "si la constante _MonLogiciel n'a pas été définie, le script cesse immédiatement".

    Ton index.php va initialiser la constante (=> on force le seul point d'entrée du logiciel) et va faire les require() souhaité.

    Bonne journée.

  7. #7
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    define et defined d'accord ... c'est en fait ce principe que je pensais mettre en oeuvre
    à la base mais en utilisant une variable de session ($_session), bon je vais aussi
    regarder ça, car c'est simplissime à souhait !

    Merci pour cette astuce et rappel "Joomla"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Invite de commande : passage à la ligne sans execution
    Par Madfrix dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 14/10/2011, 14h28
  2. Réponses: 1
    Dernier message: 17/08/2006, 12h40
  3. [Sécurité] Gérer les droits Admin/Simple users/Personnes externes
    Par dessinateurttuyen dans le forum Langage
    Réponses: 5
    Dernier message: 16/08/2006, 09h37
  4. Réponses: 10
    Dernier message: 26/07/2006, 07h52
  5. Passage de commande MSDOS
    Par costaud05 dans le forum Langage
    Réponses: 13
    Dernier message: 10/11/2004, 14h14

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