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 :

Sécurité site web


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 019
    Par défaut Sécurité site web
    Bonjour,

    Je me suis aperçu d'un problème de sécurité sur mon site web.
    Je vous explique, j'ai crée un espace privé avec à l'interieur un document en pdf que l'on peut télécharger pour chaque administrateur. J'ai remarqué qu'il suffisait de copier / coller le chemin d'un document concernant par exemple l'administrateur 1. Et de remplacer l'administrateur1 par le nom de l'administrateur 2 dans le chemin et on accede à son document.
    Comment puis je gérer ce problème? Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Une solution serait de mettre tes pdf dans des dossiers distincts et tu attribues la possibilité d'accéder à tel ou tel dossier en fonction du login administrateur que tu as enregistré dans une variable de session lors de l'authentification.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    chaque "administrateur" est censé s'être connecté.
    Donc, il devrait exister un variable de SESSION qui permet de l'identifier formellement.

    On doit donc pouvoir interdire ou autoriser l'accès à un dossier grâce à cette variable de SESSION.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 019
    Par défaut Probleme de sécurité site web
    Oui tous les administrateurs se sont connectes et il y a une variable de SESSION mais le bug c'est que tous les documents sont dans le même dossier....

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Dans ce cas il faut autoriser le téléchargement en fonction du login et du nom du fichier. Lors de l'enregistrement du fichier tu peux implémenter un select multiple qui te permettras de sélectionner quels sont les administrateurs qui peuvent lire ce fichier et enregistrer le résultat dans une table de bdd avec deux colonnes 'login' et 'nom_fichier'. Lors du téléchargement tu consultes cette table pour voir si le login enregistré en session est associé à ce nom de fichier.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 019
    Par défaut Sécurité site web
    En fait le login c'est prenom.nom de l'administrateur et le nom du fichier .pdf c'est le nom avec la première lettre du prenom. Je vais creuser dans vos idées pour trouver une solution. Merci en tout cas pour votre aide.

  7. #7
    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 : 42
    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
    Ce qu'il faut surtout c'est que les fichiers ne soit pas accessible depuis le web directement , c'est à dire que une adresse du type : http://monsite.com/monfichier.pdf ne retourne rien.

    Le téléchargement doit passer par PHP uniquement , tu auras donc une url du type http://monsite.com/download.php?file=myfile
    Et coté PHP tu peux alors vérifier que l'utilisateur qui tente de télécharger à bien le droit d'accéder au fichier , puis déclencher ensuite le téléchargement , toujours via PHP (via readfile par exemple)

    @jreaux62 ca ou rien c'est pareil , caché n'est pas sure. Il vaut mieux se donner la peine de sécurisé comme il faut plutôt que perdre sont temps dans un bricolage qui toute manière ne fonctionnera pas.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    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

    Si tu utilises nom.prénom pour nommer tes fichiers, tu auras un petit souci le jour où un nom serait composé de l'un ou l'autre caractère interdit/dangereux. Exemple "Jöcye l'alain" (n'importe quoi comme nom mais présence d'un tréma et d'une apostrophe).

    Je rejoins plusieurs idées mentionnées plus haut :

    * un nom de fichier ne peut pas être basé sur un login / nom-prénom car trop facile à deviner
    * idéalement l'accès à l'URL doit être interdit (pas question de faire un http: ... tonfichier.pdf) quelque soit le nom du fichier; il faudrait que le fichier soit inaccessible par URL et mieux, dans un dossier situé au-dessus de ta racine.
    * réutiliser le nom de l'utilisateur depuis la variable $_SESSION p.ex. est une bonne chose; ainsi tu confirmes que l'utilisateur qui demande le fichier a le droit de le faire.

    Une idée : en .htaccess, il est possible de rediriger toutes les requêtes d'un dossier vers un script et donc; l'idée serait p.ex. de mettre un tel .htaccess dans un dossier tel que "/espace" et si tu tapes /espace/xxx.pdf, même si xxx.pdf existe, il doit y avoir redirection vers un script qui vérifie si c'est OK et force alors le download du fichier autorisé. Du coup, on se fout du xxx.pdf; c'est le script .php qui prend tout en main.

    Bonne journée

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Pour compléter la remarque de Celira, dans l'absolu on pourrait aussi trouver des personnes qui ont exactement les mêmes nom et prénom. Tu devrais respecter les règles habituelles: un login doit être unique donc indépendant des nom et prénom.

    En fait il y deux choses distinctes à prendre en considération:
    1/ Interdire l'accès au répertoire par une URL directe.
    C'est ce que grunk a rappelé et qui peut être réalisé, soit en plaçant le répertoire en dehors du www, soit en mettant un fichier .htaccess avec la mention deny from all dans le répertoire. Il faudra donc utiliser par exemple la méthode readfile de php pour lire le fichier.

    2/
    Le contrôle: administrateur->fichier autorisé.
    Là c'est moins générique et dépend de ton cas de figure. Par exemple si tu construis le nom de ton fichier avec 'login-nomfichier' cela suppose qu'aucun fichier ne pourra être partagé par plusieurs personnes. Si cela devait pouvoir être le cas, il faudrait plutôt construire le nom du fichier avec un uniqid genre 'nomfichier-uniqid' et faire une table de correspondance entre les login et les fichiers autorisés au téléchargement. Sinon tu peux te contenter de vérifier que le fichier commence bien par le login qui est enregistré dans la variable de session d'authentification.


    Citation Envoyé par cavo789 Voir le message
    Une idée : en .htaccess, il est possible de rediriger toutes les requêtes d'un dossier vers un script et donc; l'idée serait p.ex. de mettre un tel .htaccess dans un dossier tel que "/espace" et si tu tapes /espace/xxx.pdf, même si xxx.pdf existe, il doit y avoir redirection vers un script qui vérifie si c'est OK et force alors le download du fichier autorisé. Du coup, on se fout du xxx.pdf; c'est le script .php qui prend tout en main.
    Oui mais qu'est-ce que tu gagnes par rapport au basique .htaccess avec la mention "deny from all" ?

  10. #10
    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
    Bonsoir

    Mon idée partait du postulat que le fichier pdf était accessible par URL. Et que l'utilisateur puisse voir que l'URL est p.ex. http lesite/dossier/fichier.pdf. Si ce postulat est accepté; mettre un .htaccess dans /dossier avec; non pas un deny from all mais un redirect download.php permet alors de rediriger tous les accès au dossier "/dossier" et, depuis download.php, de faire les contrôles requis. Au final, cela revient au readfile dont tu parles.

    Un des points intéressants de cette idée, je pense, c'est de garantir à 100% qu'il soit impossible d'accéder à un PDF depuis "/dossier" sans qu'un contrôle en PHP est réalisé.

    Il y a un truc qui m'échappe ?

    Bonne soirée à tous.

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par Marc31 Voir le message
    En fait le login c'est prenom.nom de l'administrateur et le nom du fichier .pdf c'est le nom avec la première lettre du prenom.
    Dommage pour Pierre Martin et Paul Martin, ils vont devoir partager un fichier
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,
    Citation Envoyé par jreaux62 Voir le message
    Il N'y a PAS DEUX FOIS la même chaine de caractères !
    C'est le principe même d'un fonction de hashage !!
    Tu te trompes, une fonction de hash renvoie toujours le même résultat.
    La fonction password_hash() possède une spécificité que tu ne peux généraliser aux fonctions de hashage : elle génère automatiquement un salt à chaque appel, c'est la raison pour laquelle tu n'as pas deux fois le même résultat.

    D'ailleurs la doc indique :
    salt - pour fournir manuellement un salt à utiliser lors du hachage du mot de passe. Notez que cette option empêchera la génération automatique.

    Si omis, un salt aléatoire sera généré par la fonction password_hash() pour chaque mot de passe haché. C'est le mode de fonctionnement prévu.

    Avertissement : L'option Salt a été désapprouvée à partir de PHP 7.0.0. Il est maintenant préférable d'utiliser simplement le sel qui est généré par défaut.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Nom : 6-ou-9.jpg
Affichages : 416
Taille : 26,6 Ko

    Si j'ai supprimé mes messages, c'est qu'ils n'apportaient que de la confusion... et des réactions "à coté de la plaque".
    Je t'invite à faire de même.

    Cela dit, tu as raison. J'aurais dû écrire :
    C'est le principe même de CETTE fonction de hashage !!
    Et ton explication (salt,...) est parfaitement juste.

    Mais.... on s'en fout : ce n'est PAS DU TOUT le sujet de CETTE discussion....
    Dernière modification par Invité ; 21/12/2019 à 14h39.

Discussions similaires

  1. Failles de sécurité site web
    Par Jey_dc3 dans le forum Sécurité
    Réponses: 4
    Dernier message: 29/04/2012, 00h48
  2. Réponses: 3
    Dernier message: 03/08/2011, 15h06
  3. Sécurité site web php/phpmyadmin
    Par maloy dans le forum Langage
    Réponses: 7
    Dernier message: 29/07/2011, 23h18
  4. Sécurité site web - SSL
    Par Emilie012 dans le forum Sécurité
    Réponses: 1
    Dernier message: 24/02/2009, 08h15
  5. [Sécurité] site web php easyphp
    Par Go_Ahead dans le forum Langage
    Réponses: 1
    Dernier message: 16/01/2007, 09h47

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