Как я могу гарантировать, что ссылка, отправленная по электронной почте, открывается только с помощью кликов пользователя из почтового клиента, а не ботов?


В моем веб-приложении я создаю ссылки в следующем формате:

https://example.com/^token^

Каждая ссылка в соответствии с моими спецификациями отправляется по электронной почте и не должна позволять роботам очищать ее. Чтобы избежать посещений с помощью робота, я разместил следующее robots.txt:

User-agent: *
Disallow: /

И на теге страницы <header></header> я разместил:

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

Вопрос в том, как я могу гарантировать, что ссылка открывается только тогда, когда пользователь нажал на нее, а не случайный бот/паук соскребает ее? Зависит ли длина и случайность фактора ^token^ в URL-адресе для предотвращения посещения ботов?

В моем приложении ^token^ - это криптографически случайное 5-байтовое значение, которое однажды генерируется в шестнадцатеричном формате. Итак, в моем случае, если длина токена играет значительную роль в не-скраппинах этой ссылки, какова рекомендуемая длина случайного токена?

Мое приложение находится в Laravel, и я использую комбинацию nginx и php-fpm для предоставления контента браузеру.

Author: Dimitrios Desyllas, 2020-12-08

4 answers

Неправильно используемые мета-теги

Вместо того, чтобы использовать два мета-тега, вы должны поместить оба значения в один тег. С двумя тегами некоторые поисковые системы могут выбрать подчинение только одному из двух.

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

Robots.txt и мета-теги роботов являются взаимоисключающими

Запрещение страниц в robots.txt предотвращает загрузку страницы роботами и просмотр мета-тегов. Существует примерно ноль ботов, которые не подчинялись бы robots.txt но будет подчиняться метатегам. Вы должны выбрать один или другой, но не оба.

Robots.txt не помешает поисковым системам индексировать URL-адреса

Если Google найдет достаточно ссылок на URL-адрес, он может включить этот URL-адрес в свой индекс поиска, даже если этот URL-адрес запрещен в robots.txt. Если вы опасаетесь, что некоторые из этих URL-адресов будут проиндексированы в поисковых системах, вам следует разрешить обход robots.txt, но запретить индексирование с помощью мета-тега.

Мета-теги не помешают ботам попасть по URL-адресам

Если вы опасаетесь, что боты будут испортите свою статистику или вызовите другие нежелательные эффекты, когда боты ударят по ним, тогда вам следует использовать robots.txt. Поисковые системы все еще могут время от времени индексировать URL-адрес, но большинство ботов будут подчиняться robots.txt и даже не запрашивать URL-адреса

Невозможно предотвратить индексацию и бот попадает с robots.txt и мета-теги

Если вы хотите предотвратить индексацию URL-адресов и попадание ботов на URL-адреса, вам не повезло. Невозможно использовать robots.txt и мета-теги для выполнения обоих одновременно время.

Достаточно ли длинны ваши жетоны?

Пятибайтовый токен дает вам 256^5 или 1.1E12 (1,1 триллиона) возможных URL-адресов. Если вы отправите миллион сообщений электронной почты, это оставляет 1 из 1 миллиона шансов получить используемый токен для каждого предположения. Если вы отправите миллиард сообщений электронной почты, шансы получить используемый токен возрастут до 1 из 1 тысячи. Вы, безусловно, захотите увеличить длину своего токена после отправки 1 миллиона электронных писем.

Вы также могли бы получить намного больше безопасность без увеличения длины ваших URL-адресов. Пять байтов шестнадцатеричной кодировки - это 10 символов. Было бы разумнее использовать 10 символов, выбранных случайным образом из:

  • 10 цифр
  • 26 строчных букв
  • 26 прописных букв
  • 4 безопасных символа URL-адреса (-._~)

Если бы вы сделали это, вы могли бы увеличить возможное количество токенов до 66^10 или 1.5E18 (1,5 квинтиллиона). Это даст вам достаточно места для токенов независимо от того, сколько писем вы отправите отправлено.

Другие способы повышения безопасности

Вы также можете использовать любую из следующих тактик, чтобы дополнительно гарантировать, что боты не получат доступ к этому контенту:

  • Используйте конфигурацию на стороне сервера, которая выдает код ошибки, если подозреваемый робот попадает по этим URL-адресам. Вы могли бы обнаружить роботов на основе:
    • Агент пользователя
    • Какие еще вещи запрашивает этот IP-адрес
    • Может ли он передать капчу?
  • Требовать, чтобы пользователи входили в смотрите это содержимое при нажатии на сообщение электронной почты.
  • Срок действия старых токенов истекает: требуется, чтобы клики происходили в течение нескольких часов или дней после отправки электронной почты.
 10
Author: Stephen Ostermiller, 2020-12-09 12:51:11

Короче говоря: вы не можете.

Ответ зависит от определения "ботов", но если бот может сканировать электронную почту, он может перейти по ссылке. Бот не обязательно уважает robots.txt, или упомянутые мета-теги html.

__

Однако ( немного выходит за рамки):

  • У вас должен быть в произвольном формате, как указано в комментарии к вашему вопросу.

  • Вы могли бы защитить ссылку с помощью капча или любой другой тест Тьюринга.

  • Вы также могли бы объяснить, что вы наблюдали, чтобы мы поняли, чего вы хотели бы избежать.

 13
Author: cusco, 2020-12-19 09:44:39

Вы не только не можете этого гарантировать, но весьма вероятно, что ссылка будет получена программами, не находящимися под контролем пользователя. Многие фильтры спама и фишинга предварительно извлекают любые веб-страницы, на которые ссылаются в электронном письме, чтобы проверить их на наличие возможных угроз (у меня было целых пять обращений, не связанных с пользователем, для одной ссылки).

Решение состоит в том, чтобы убедиться, что на странице не отображается ничего конфиденциального, и когда ссылка открыта, на сервере ничего не меняется. Конфиденциальный контент должен быть помещенный за барьером входа в систему или его эквивалентом. Действия, которые вносят изменения (например, сброс пароля), должны требовать от пользователя выполнения действия на странице, например нажатия кнопки "отправить".

 7
Author: Mark, 2020-12-09 01:04:39

Есть вторая, последующая страница, для которой требуется токен, но требуется взаимодействие, прежде чем токен будет считаться использованным/недействительным.

Когда ссылка используется, она приводит пользователя на страницу, где он должен что-то подтвердить. Срок действия токена истекает, когда они выполняют это действие, а не когда используется ссылка.

Как и другие, если вы укажете URL-адрес, ожидайте, что он будет активирован без продолжения процесса.

Продолжайте

  • аннулировать старые токены
  • аннулировать токены после большего количества применений (10 вместо 1)
 1
Author: ti7, 2020-12-10 16:23:14