Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2011, 22h20   #1
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Par défaut Protéger l'accès à un répertoire

Bonjour,

Sur un site marchand importance moyenne, un répertoire contient les factures des clients.

Le nom d'une facture est composé du n° et de la date d'émission.

2154658-20111117.pdf

Cela est non-sécurisé et en se donnant un peu de mal il est possible d'accéder à chaque facture.

La solution la plus simple semble être de coder le nom de la facture.

Quelle fonction PHP utiliseriez-vous pour le codage ?

Merci d'avance.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 07h55   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 811
Points : 1 530
Points : 1 530
Le plus simple resterai de mettre une règle au niveau du serveur pour interdire l'accès à tous sauf au serveur.
Avec un .htaccess c'est faisable.

Car PHP ne t'aidera pas à grand chose pour protéger un accès ne transitant pas par un script PHP. (cas de taper l'url directement dans le navigateur)
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 11h42   #3
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Bonjour,

Merci de ta réponse mais il faut que le titulaire de la facture puisse accéder à sa facture.

L'accès au répertoire en direct est déjà interdit par le serveur.

url/factures/
INTERDIT

url/factures/numéro.pdf
Permis

Quand tu as compris ça, tu peux (en théorie) piquer les factures qui ne sont pas les tiennes en changeant les numéros.

Mon idée est simplement de coder le numéro avec une fonction PHP.

Il existe plusieurs fonction de codage, quelle est la mieux appropriée ?

Merci d'avance.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 12h01   #4
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 811
Points : 1 530
Points : 1 530
Hum j'aurais du détailler.
Le but est d'interdire l'accès à tout fichier du répertoire par une autre IP que celle du serveur.
Ensuite tu mets un script d'accès (PHP : readfile et un header) vers le fichier du client, ce dernier est censé se logguer je suppose non ? Donc le script a ses informations et a la liste des factures associées et peut faire la vérification d'accès.

Sinon si tu souhaites rester sur de l'encodage, on peut voir du côté des hash (md5, sha) ou bien plutôt du cryptage pour éviter les similitudes (pour le md5 on peut avoir le même hash pour deux valeurs différentes théoriquement, par contre je ne sais pas pour la sha).
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 12h01   #5
Membre éclairé
 
Avatar de themadmax
 
Inscription : juillet 2005
Messages : 424
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 424
Points : 383
Points : 383
Déplace c fichier en dehors d'un acces web.
Et en PHP tu fait un accès en écrivant le header pdf.
Mais tout cela suppose que tu es un système de protection login de tes utilisateurs.
__________________
________________________________________________
http://bliquid.fr : Blog sur Android et l'Acer Liquid
themadmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 12h24   #6
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Merci de vos réponses mais je ne comprends pas bien.

Il est vrai que je ne connais pas les techniques serveur.

Citation:
Et en PHP tu fait un accès en écrivant le header pdf.
L'utilsateur va bien connaître le chemin d'accès au répertoire, non ?

Je suppose que transgohan propose la même chose.

Autrement, l'accès au lien pour obtenir la facture est effectivement en zone protégée par mot de passe.

J'ai constaté que la plupart des factures reçus par Internet sont codées, d'où l'idée du code...
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 13h22   #7
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Dans la solution que te propose transgohan le client n'as pas à connaitre l'endroit où est logé le fichier sur ton serveur. Seul l'adresse du script PHP lui suffiras.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 13h27   #8
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 811
Points : 1 530
Points : 1 530
Citation:
Envoyé par boteha Voir le message
Merci de vos réponses mais je ne comprends pas bien.

Il est vrai que je ne connais pas les techniques serveur.



L'utilsateur va bien connaître le chemin d'accès au répertoire, non ?

Je suppose que transgohan propose la même chose.

Autrement, l'accès au lien pour obtenir la facture est effectivement en zone protégée par mot de passe.

J'ai constaté que la plupart des factures reçus par Internet sont codées, d'où l'idée du code...
Même s'il connait le lien, vu qu'il n'est pas connecté en tant que Mr ou Mme X le lien le renverra vers une erreur. A savoir qu'avec une configuration .htaccess (ou bien en mettant le fichier hors espace web comme proposé plus haut par themadmax) on ne peut avoir un accès direct, seul un script sur le serveur peut accéder au fichier. Or ce fichier n'accède qu'aux factures de l'utilisateur connecté.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 14h18   #9
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
D'accord, je crois comprendre assez pour faire un essai.

Je vous tiens au courant.

Merci.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 19h34   #10
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Bonjour,

J'ai crée un dossier "factures" dans le dossier hdocs parent de www.

Est-ce bien ce que vous appelez un espace hors Web inaccessible depuis un navigateur ?

Je mets dans ce dossier une facture.pdf.

J'arrive à vérifier l'existence du fichier avec file_exists (../factures/facture.pdf).

Par contre, veuillez excuser le boulet, je n'arrive pas à récupérer le PDF

header ("location:url/../factures/facture.pdf") ne marche pas.

Merci d'avance.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 19h47   #11
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Re-bonjour,

Je crois comprendre qu'il faut utiliser la fonction readfile ().

Mais je suppose que readfile provoque un téléchargement.

Personnellement, je trouve plus convivial d'afficher le PDF directement dans une fenêtre du navigateur.

Y a-t-il une solution ?

Merci d'avance.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 19h59   #12
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 811
Points : 1 530
Points : 1 530
Ce n'est pas readfile() qui va faire ça mais le header() (qui indiquera le type de données affiché).
Cela dit ce n'est pas toi qui va choisir si le fichier doit être téléchargé ou non, au final c'est la configuration du navigateur qui va y être pour beaucoup.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 20h25   #13
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Merci de ta réponse.

Citation:
Ce n'est pas readfile() qui va faire ça mais le header()
D'accord mais je dois bien terminer par readfile (), non ?

J'ai lu la doc de readfile sur php.net, il y a un exemple pour les PDF.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 06h44   #14
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 811
Points : 1 530
Points : 1 530
Oui oui, readfile() va te permettre de récupérer le contenu du fichier.
Mais si tu l'affiches en brut tu auras que des caractères bizarres, c'est là qu'intervient la fonction header() pour préciser le mime du fichier.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 10h44   #15
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Cela m'a l'air bien clair.
Je vous enverrai ma liste de header en fin de semaine, je dois passer à autre chose pour l'isntant.

Merci encore.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 17h29   #16
Membre éclairé
 
Avatar de themadmax
 
Inscription : juillet 2005
Messages : 424
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 424
Points : 383
Points : 383
Citation:
J'ai crée un dossier "factures" dans le dossier hdocs parent de www.
Oui sa doit être bon si le root de ton serveur est www.

Sinon un code copier de http://php.net/manual/fr/function.header.php

Code :
1
2
3
4
5
6
7
8
<?php
// Vous voulez afficher un pdf
header('Content-type: application/pdf');
// Il sera nommé downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// Le source du PDF original.pdf
readfile('../original.pdf');
?>
En gros tu "trompe" le navigateur en face car tu lui dit que c'est pas une page HTML, mais un fichier pdf qui viens de demander. Après le navigateur demande les données du fichier et la tu lit l'intégralité du pdf et tu transmet directement.
__________________
________________________________________________
http://bliquid.fr : Blog sur Android et l'Acer Liquid
themadmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 17h55   #17
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Bonjour,

Merci de ta réponse.

J'espère faire le développement pendant le week-end.

Dans la documentation readfile sur php.net, il y un exemple complet de la suite de header pour un PDF :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<?php
    public function fddAction()
    {
        // get attachment location
        $attachment_location = $_SERVER["DOCUMENT_ROOT"] . "/pdf/fdd/sample.pdf";
 
        if (file_exists($attachment_location)) {
            // attachment exists
 
            // send open/save pdf dialog to user
            header('Cache-Control: public'); // needed for i.e.
            header('Content-Type: application/pdf');
            header('Content-Disposition: attachment; filename="sample.pdf"');
            readfile($attachment_location);
            die(); // stop execution of further script because we are only outputting the pdf
 
        } else {
            die('Error: File not found.');
        }
    }
?>
Je ne vois pas trop à quoi sert :

header('Content-Disposition: attachment; filename="sample.pdf"');

Mais a priori je suis parti pour essayer cela, sauf contre-indication de votre part.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 18h01   #18
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 811
Points : 1 530
Points : 1 530
Citation:
Je ne vois pas trop à quoi sert :

header('Content-Disposition: attachment; filename="sample.pdf"');
Ce que tu envoies au navigateur ce n'est pas le fichier mais son contenu.
On peut donc considérer cela comme un fichier temporaire.
sample.pdf sert donc juste à lui générer un nom.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 18h06   #19
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
D'accord, merci.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2011, 21h41   #20
Membre à l'essai
 
Inscription : mai 2004
Messages : 195
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 195
Points : 20
Points : 20
Bonjour,

J'ai fait la chose et cela marche très bien sur tous navigateurs testés.

Petit détail, la demande de téléchargement d'un client depuis depuis son compte fait l'objet d'une requête sur la BD afin de trouver le mail et le mot de passe correspondant au détenteur du document demandé.

Le mail et le mot de passe sont comparés à ceux du compte ouvert qui sont en variables de SESSION.

En cas d'échec, le compte est réaffiché avec un message expliquant que le document demandé n'est pas disponible.

En cas de succès, on lance les header et readfile ().

Merci de vos bons conseils.
boteha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h52.


 
 
 
 
Partenaires

Hébergement Web