8722 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je dois mettre en place un petit système de téléchargement d'un fichier payant. Ce fichier ne pourrait être téléchargé uniquement si un paiement par PayPal à bien été effectué en amont, et s'il est valide.

De ce côté là, pas trop de souci, j'ai bien lu la doc de PayPal et j'ai fait des tests, on peut aisément récupérer des infos du paiement en POST avec PHP, et donc afficher ou non un lien de téléchargement une fois le paiement effectué.

Il y a cependant un truc que j'ai encore du mal à imaginer : c'est comment puis-je cacher le lien du fichier à télécharger ?

Si j'affiche juste un <a href="MonFichier" download>Télécharger</a> après paiement, n'importe quel utilisateur qui aura déjà effectué l'achat pourrait alors enregistrer le lien de la source, et la partager par la suite.

Du coup, je me tortille la tête pour essayer d'imaginer un système sécurisé avec PHP, mais j'ai du mal à le penser et à le mettre sur papier d'abord.

La seule idée qui m'est venue, c'est la suivante :
1. Après l'achat, on redirige le client sur une page, qui vérifie le statut du paiement.
2. S'il est valide, on stocke la date/heure de l'achat + l'ID de transaction PayPal dans une BDD.
3. On affiche au client un <form> qui contient les précédentes infos, cachées, avec un bouton télécharger, qui le dirigera vers upload.php
4. upload.php checke les infos passées en POST avec celles dans la BDD, et si elles existent, alors c'est bon, on lance le téléchargement par header

Et enfin, je créé une tâche Cron qui, toutes les 24h, supprime les enregistrements de la BDD dont la date/heure actuelle est supérieure d'au moins 24h par rapport à la date/heure enregistrée.

Du coup, est-ce que ça tient la route ?
Est-ce que le téléchargement par header permet de masquer l'adresse du fichier ?

S'il y a une/des méthodes plus efficaces (et il y en a sûrement), je suis preneur de quelques explications pour mieux comprendre le principe.

Merci d'avance pour votre aide Smiley smile

Loraga
En attendant d'avoir des réponses sûres, je continue mes recherches
Je me demande si la solution ne tiendrai pas dans cet exemple de la doc de PHP, à propos de la fonction readfile().

Je n'ai cependant toujours pas la certitude que la source soit véritablement masquée.
Je vais faire quelques tests en attendant Smiley smile
Bon, d'après mes tests, après avoir téléchargé le fichier avec header() et readfile() comme indiqué ci-dessus, il me semble alors impossible de trouver la source originale du fichier.

Depuis les propriétés du fichier fraichement téléchargé, il provient de "monsite.com/download.php" donc c'est parfait, puisque download.php est le script qui vérifie que le téléchargement est possible ou non.

Je ne sais pas quoi faire de plus pour m'assurer que le chemin d'accès du fichier est bien introuvable, mais ça me semble ok de cette façon... Si je me trompe, prévenez moi Smiley smile