Разработка писем и безопасность

Аутентификация запросов в AMP-письмах

XHR-запросы не содержат cookie, поэтому следует идентифицировать пользователя с помощью токенов доступа.

Токен нужен для гарантии, что только тот, кто имеет доступ к AMP-письму, может выполнять содержащиеся в нем запросы. Токены доступа должны быть криптографически защищены и ограничены по времени и объему. Они включены в URL запроса.

Этот пример демонстрирует использование <amp-list> для отображения аутентифицированных данных:

<amp-list src="https://example.com/endpoint?token=REPLACE_WITH_YOUR_ACCESS_TOKEN"
height="300">

<template type="amp-mustache">

...

</template>

</amp-list>

При использовании <amp-form> поместите токен доступа в action-xhr URL:

<form action-xhr="https://example.com/endpoint?token=REPLACE_WITH_YOUR_ACCESS_TOKEN" method="post">

<input type="text" name="data">

<input type="submit" value="Send">

</form>

Проверка прокси-сервером

Все XHRs, поступающие из APM-письма, проходят проверку прокси-сервером Mail.ru, чтобы защитить данные пользователя.

Ниже описано, какие заголовки ожидаются в запросе и ответе сервера.

  • Новая схема проверки
  • Старая схема проверки

Запрос

Когда письмо обращается за данными через amp-form, amp-list или любой другой компонент, который подлежит проверке CORS, запросы на ваш сервер содержат заголовок AMP-Email-Sender с адресом отправителя письма.

Например:

AMP-Email-Sender: sender@example.com

Ответ

В ответе ваш сервер может подтвердить, что AMP-Email-Sender — это отправитель, которому можно доверять. Если это не так, сервер может ответить 403 Forbidden и запрос будет отклонен.

Если запрос подтвержден, сервер должен включить в ответ заголовок AMP-Email-Allow-Sender. Значение заголовка может быть:

  • адресом отправителя, письмам от которого разрешено отправлять запросы на ваш сервер. В этом случае заголовок ответа повторяет значение заголовка запроса AMP-Email-Sender;
  • символом *, если вы хотите разрешить делать запросы на ваш сервер из любых писем. Это значение рекомендуется только для тестовых целей.

Например:

AMP-Email-Allow-Sender: sender@example.com

Сервер должен соответствующим образом ответить на запрос предварительной проверки (OPTIONS), который содержит заголовок Access-Control-Request-Headers: AMP-Email-Sender. Тем не менее, почтовый клиент не гарантирует выдачу предварительных запросов.

Работа писем вне почтовых клиентов

Обратите внимание, что вышеуказанные требования относятся к отображению писем внутри почтовых клиентов и песочницы Mail.ru. Если вы хотите, чтобы ваши письма также работали и вне почтовых клиентов, вам нужно реализовать стандартный механизм CORS.

При возможности пользуейтесь новой схемой проверки. Скоро мы перестанем поддерживать эту схему проверки прокси-сервисом.

Запросы

Запросы, поступающие от прокси-серверов Mail.ru, содержат следующий заголовок:

Origin: https://e.mail.ru

Также они могут содержать следующий query-параметр:

__amp_source_origin=<sender email address>

Например, XHR-запрос от amp-list к https://example.com/data.json, который исходит из письма с адреса sender@example.com, выглядит так:

Request URL: https://example.com/data.json?__amp_source_origin=sender@example.com
Request Method: GET
Origin: https://e.mail.ru

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

Ответы

Все ответы должны содержать три заголовка:

Access-Control-Allow-Origin: https://e.mail.ru
AMP-Access-Control-Allow-Source-Origin: <ваш адрес, с которого ведутся рассылки>
Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin

Например, если письмо отправлено с адреса sender@example.com, заголовки должны включать следующее:

Access-Control-Allow-Origin: https://e.mail.ru
AMP-Access-Control-Allow-Source-Origin: sender@example.com
Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin

Если ответ не содержит эти заголовки, прокси-сервер Mail.ru отклонит ответ и пользователь не увидит динамический контент в письме.

Ограничения

XHR URL не должны использовать HTTP-редиректы. Запросы, которые возвращают статус кодов редиректов (например, 302 Found или 308 Permanent Redirect), вызывают ошибку и предупреждение в консоли браузера.

Создание AMP-писем

Чтобы создавать AMP-письма, используйте документацию формата.

Также вы можете использовать наш HTML-редактор для написания AMP-писем. Редактор показывает готовое решение и выделяет ошибки, которые можно исправить там же. Готовый результат вы сразу же сможете отправить себе в почту.

image

Support

We will help solve the problem