Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage unique d'une page - Vos conseils

Utilisation de token ou autres

Sujet résolu
    8 juin 2021 à 20:14:45

    Bonjour à tous,

    Amateur et autodidacte en PHP, j'aurais aimé avoir vos conseils concernant un projet spécifique à mettre en place très rapidement.

    Le covid nous obligeant à toujours nous réinventer, l'ASBL dont je suis membre doit normalement présenter un spectacle fin juin pour des centaines / un petit millier de personnes. En temps normal ce spectacle se fait en présentiel mais il est impossible cette année de le réaliser. Le spectacle sera donc tourné à travers différentes séquences et une vidéo unique sera mise à disposition.

    L'accès à cette vidéo se fera fin juin à une heure précise (ou approximative) pour toutes les personnes ayant émis le souhait de la visionner et ayant payé un accès au spectacle. Cette vidéo sera mise en ligne sur notre site internet et l'accès à celle-ci doit être bien sûr protégée.

    Dans l'idéal, il faut :

    • Limiter l'accès aux personnes ayant payées : j'imaginais utiliser une adresse email comme "identifiant unique". Si les personnes souhaitent regarder à plusieurs au sein du même domicile, cela ne pose aucun soucis. Je parle ici en accès unique.
    • Donner l'accès approximativement à l'heure désirée (si on dit 20h, pourquoi ne pas imaginer d'ouvrir l'accès de 19h30 à 20h30)
    • Limiter un accès unique aux personnes : elles ne peuvent plus visionner la vidéo par la suite (elles auront la possibilité de recevoir plus tard un dvd ou autres)

    Je suppose que l'utilisation de token est justifiée, mais je n'en ai jamais utilisé. Comme ça j'imagine créer des tokens uniques pour chaque personne et les insérer en DB avec l'adresse email en question. Quelques heures ou jours avant, j'enverrai l'accès à la page via mail. L'accès à la page contenant la vidéo sera autorisée uniquement si le token existe et si l'heure d'accès est OK. Après l'affichage de la page, je supprimerai le token et il sera donc impossible d'y accéder à nouveau.

    Étant réellement amateur, cela vous semble-t-il correct ou la meilleure solution ?

    Voici quelques cas de figures pour lesquels j'aimerais être attentif :

    • Je n'ai pas encore connaissance du poids de la vidéo : QUID si la vidéo plante et que l'utilisateur recharge sa page ? Reproposer la génération d'un token en fonction de l'email permettrait de pouvoir à nouveau accéder à la vidéo par la suite, ce qui créerait une faille à notre système
    • Quid si le mail avec l'accès arrive en SPAM/n'arrive jamais pour X raisons
    • Si j'affiche la vidéo en HTML sur la page en question, comment faire pour que les personnes s'y connaissant un minimum ne puisse pas récupérer l'URL exacte de la vidéo et ainsi y accéder par la suite ?
    • D'autres cas auxquels je n'aurais pas pensé maintenant ?

    Le but n'étant pas de fournir un support non-stop pendant la diffusion, ce qui ne serait pas possible à gérer.

    PS : selon vous, quelle est la meilleure solution actuelle pour diffuser une vidéo (format vidéo, éventuel site, ...) ?

    Merci d'avance pour vos réponses, vos éclaircissements et vos recommandations !

    -
    Edité par D33x 8 juin 2021 à 22:40:59

    • Partager sur Facebook
    • Partager sur Twitter
      9 juin 2021 à 11:57:07

      Coucou !

      Alors je ne suis pas expert dans le domaine, mais un token unique peut sembler compromis si l'utilisation est unique. En revanche, tu peux le créer pour avoir une validité pendant un certain temps plutôt (au lieu d'une utilisation unique, tu le rends utilisable pendant jcp 12h ou 24h à toi de choisir je ne te donne que l'exemple). Cela évitera le problème du plantage du au serveur, et les personnes pourront réutiliser leur token afin de continuer leur visionnage (cependant, tu peux limiter l'accès d'utilisation du token, par exemple en vérifiant que personne d'autre utilise au même moment la même adresse mail et le même token, au quel cas tu pourras signaler que ce token est déjà en cours d'utilisation par exemple, à toi de voir :D).

      Pour le mail, peut-être le préciser lors de la commande de vérifier dans les jours qui précèdent la boîte span, ou alors inviter la personne qui vient de passer commande à rajouter l'adresse comme non-spam (tu leurs donnes une fois la commande passée).

      Alors du coup, tu vas faire un affichage en html (pck le rendu final sera du html), mais pour le coté serveur, tu vas utiliser du php. Du coup, tu peux essayer de faire un controller qui va afficher la vidéo sur ton modèle (ta page html), ainsi la vidéo sera prise à partir de ton serveur, mais ne pourra pas être récupérée. Tu peux peut-être te servir d'un framework pour simplifier la tâche comme laravel ou symfony (pour le modèle MVC), mais dans tout les cas, tu peux le faire du coté serveur ^^

      Voilà, j'espère vraiment avoir été assez clair :)

      Matt

      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2021 à 20:16:43

        Bonjour,

        Merci pour la réponse !

        Je n'ai jamais utilisé de token, une piste ? L'idée de vérifier si le token n'est pas en cours d'utilisation est une excellente piste (à laquelle je n'avais pas pensé) mais en pratique comment puis-je faire ?

        Il y aura effectivement un affichage HTML et du PHP côté serveur. Je n'en suis pas encore à l'utilisation de framework et le modèle MVC, c'est dans ma to do list des cours à suivre :D Je vais essayer de me renseigner pour prendre la vidéo directement de mon serveur sans afficher son URL alors. Une piste éventuelle ?

        En tout cas merci pour l'éclaircissement !

        • Partager sur Facebook
        • Partager sur Twitter
          11 juin 2021 à 11:53:35

          Alors pour l'utilisation de token, tu vas créer une classe Token, dans lequel tu mettras des attributs.

          Tu peux par exemple y mettre une code unique que seul la personne aura, son mail aussi. Ensuite, tu peux mettre une date de début de validité (qui sera un datetime), et lors de la connexion, tu verifieras que cette date + 12h n'est pas dépassé (tu prends la date time et tu lui rajoutes 12h en gros si tu veux que le ticket soit valable pendant 12h à partir de la première connexion, et pour ça, tu vas utiliser un objet qui s'appelle un DateInterval, je te laisse voir sur internet d'abord comment ça marche et si tu n'y arrives pas tu peux me demander :D).

          Donc dans l'idée, à partir du moment où tu as crée le token dans ta base, lorsque le gars va se connecter pour la première fois, tu vas instancier la datetime de la première connexion pour faire la validité.

          Ensuite, pour savoir si le token est en cours d'utilisation, tu vas créer un booléen $is_used par exemple, qui sera à true lorsque qu'il y aura un session qui utilise ce token, ce qui veut dire que le token est en cours d'utilisation.

          1ere idée :Tu n'utilises pas de cookies pour sauvegarder la session, donc s'il y a un soucis de serveur, alors la connexion sera perdu, donc il n'y aura plus de session en cours étant donné que tu ne fais pas de cookies ou autre pour maintenir la session. Ce qui fait que tu devras remettre le booléen à false. Un peu compliquée je pense surtout si le serveur plante.

          2eme idée, tu fais un cookies qui sauvegarde la session, ce qui fait s'il y a un plantage, le token sera sauvegardé, donc ton booléen sera toujours à true. Et vu que le cookie est gardé sur le navigateur, alors le client pour se reconnecter sans avoir à réutiliser son token parce-qu'il sera toujours en cours d'utilisation (pas besoin de vérifier le token vu que c'est sauvegardé dans la session).

          Et ensuite à la connexion, tu vérifies juste si le token est utilisé ou pas, et s'il est utilisé tu refuses la connexion. Ensuite s'il y quand même un soucis (ça peut arriver sur ce genre de choses, sachant que ce que je t'explique est relativement une manière simple de faire la chose, tu pourrais faire bien plus élaboré, mais avec le temps que tu as, je pense que faire comme ça est déjà bien), tu peux toi-même réinitialiser un token pour remettre le token à false pour qu'il soit réutilisable. Puis lorsque le cookie n'est plus valable, donc généralement ils ont quitté depuis un moment le lien de la vidéo, alors à ce moment tu remets le booléen à false.

          Et pour l'url, je ne me suis pas trop penché sur la question je t'avoue, mais tu dois surement avoir beaucoup de ressources pour afficher ça ^^

          Matthieu

          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2021 à 19:15:14

            Désolé pour la réponse tardive, un grand merci pour toutes ces informations ! Je me lance dans le code dès samedi ;-)
            • Partager sur Facebook
            • Partager sur Twitter

            Affichage unique d'une page - Vos conseils

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown