|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 811 ![]() |
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)
__________________
|
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 811 ![]() |
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).
__________________
|
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 424 ![]() |
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.
__________________
________________________________________________ |
|
00
|
|
|
#6 | |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
Merci de vos réponses mais je ne comprends pas bien.
Il est vrai que je ne connais pas les techniques serveur. Citation:
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... |
|
|
|
00
|
|
|
#7 |
![]() ![]() Développeur Web Inscription : décembre 2006 Messages : 2 335 ![]() |
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 |
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 811 ![]() |
Citation:
__________________
|
|
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
D'accord, je crois comprendre assez pour faire un essai.
Je vous tiens au courant. Merci. |
|
|
00
|
|
|
#10 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
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. |
|
|
00
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
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. |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 811 ![]() |
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.
__________________
|
|
|
00
|
|
|
#13 | |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
Merci de ta réponse.
Citation:
J'ai lu la doc de readfile sur php.net, il y a un exemple pour les PDF. |
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 811 ![]() |
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.
__________________
|
|
|
00
|
|
|
#15 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
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. |
|
|
00
|
|
|
#16 | |||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 424 ![]() |
Citation:
Sinon un code copier de http://php.net/manual/fr/function.header.php Code :
__________________
________________________________________________ |
|||
|
00
|
|
|
#17 | ||
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
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 :
header('Content-Disposition: attachment; filename="sample.pdf"'); Mais a priori je suis parti pour essayer cela, sauf contre-indication de votre part. |
||
|
|
00
|
|
|
#18 | |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 811 ![]() |
Citation:
On peut donc considérer cela comme un fichier temporaire. sample.pdf sert donc juste à lui générer un nom.
__________________
|
|
|
|
00
|
|
|
#19 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
D'accord, merci.
|
|
|
00
|
|
|
#20 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com