web-dev-qa-db-fra.com

Comment puis-je vous assurer qu'un lien envoyé par courrier électronique est ouvert uniquement via l'utilisateur clique ici à partir d'un client de messagerie et non de bots?

Dans mon application Web, je génère des liens dans le format suivant:

https://example.com/^token^

Chaque lien selon mes spécifications est envoyé par courrier électronique et ne doit pas permettre aux robots de le gratter. Afin d'éviter les visites via Robot, j'ai placé ce qui suit robots.txt:

User-agent: *
Disallow: /

Et à la page <header></header> tag I placé:

    <meta name="robots" content="noindex">
    <meta name="robots" content="nofollow">

La question est de savoir comment je peux m'assurer qu'un lien n'est ouvert que lorsque l'utilisateur a cliqué dessus et non un bot/araignée aléatoire le gratte? Fait la longueur et le caractère aléatoire du ^token^ Facteur d'URL dans la prévention de la visite de Bot?

Dans mon application, le ^token^ est une valeur cryptographique-aléatoire 5 sur 5 octets qui génère une fois l'élimination hexagonale. Donc, dans mon cas, si la longueur du jeton joue un rôle important sur les non-stars de ce lien, qui est la longueur recommandée du jeton aléatoire?

Mon application est dans Laravel et j'utilise le combo NGinx et PHP-FPM afin de servir le contenu au navigateur.

6
Dimitrios Desyllas

En bref: vous ne pouvez pas.

La réponse dépend de la définition de "robots", mais si un bot peut ramper l'e-mail, le bot peut frapper le lien. Un bot ne respecte pas nécessairement robots.txt ou mentionné les balises de méta html.

__

Toutefois ( un peu en dehors de la portée ):

  • Vous devriez avoir le <jeton> être un format long au hasard comme indiqué sur un commentaire à votre question.

  • Vous pourriez avoir le lien protégé par un CAPTCHA ou tout autre test de turing.

  • Vous pouvez également expliquer ce que vous avez observé pour que nous puissions comprendre ce que vous voudriez éviter.

13
cusco

Avoir une seconde page de suivi qui nécessite le jeton, mais nécessite une interaction avant que le jeton ne soit considéré comme utilisé/invalidé.

Lorsque le lien est utilisé, il apporte l'utilisateur à une page où elles doivent confirmer quelque chose. Expire le jeton lorsqu'ils effectuent cette action plutôt que lorsque le lien est utilisé.

Comme d'autres les ont fournies, si vous fournissez une URL, vous attendez à ce que cela soit activé sans le processus continu.

Faire encore

  • invalider les vieux jetons
  • invalidez les jetons après un nombre plus large d'utilisations (10 au lieu de 1)
1
ti7