2016-09-14 3 views
0

Я создаю платформу с системой обмена сообщениями.Проверить запрос происхождения и подтвердить отправку отправителя электронной почты - Node.js

Я бы хотел опубликовать сообщения из электронной почты, и для этого я создал маршрут в Mailgun, который перенаправляет электронные письма на мой API.

Эта часть работает, но мне нужно проверить запрос, прежде чем отправлять сообщение на мою платформу. Я увижу письмо отправителя в моей базе данных для автора сообщения и адреса электронной почты, чтобы выбрать группу профилей, которые будут получать сообщение.

Итак, пример: если я получаю электронную почту

from: [email protected] 
to: [email protected] 
message: Lorem ipsum dolor sit amet, consectetur adipiscing elit... 

Я бы проверить на «[email protected]» на моей базе данных и посмотреть, если он может опубликовать в «группу», и если да, я опубликует сообщение.

Проблема заключается в том, мне нужно проверить две вещи:

  • Если запрос на моем API действительно пришел из Mailgun, чтобы избежать Spoofing
  • Проверьте, если отправитель сообщения электронной почты является подлинным, не любой спам

чтобы сделать первый я увидел, что я мог бы использовать req.connection.remoteAddress на узле, чтобы получить происхождение, а затем я попытался сделать обратный поиск по IP и посмотреть, было ли это из Mailgun, но обратный поиск не нашел ничего.

Для проверки электронной почты происхождения, я увидел, что я мог бы использовать Received заголовки на электронную почту, а потом я подумал о проверке их с DNS-поиска и посмотреть, если запись MX совпадают.

Я действительно новичок в этом, и мой вопрос в том, есть ли более простой способ проверить эти два шага и безопасно ли вообще?

ответ

0

Установите флажок «Входящий спам-фильтр», который вы можете включить при настройке своего домена в панели управления Mailgun.

См. Раздел «Защита веб-записок» в документах Mailgun, чтобы избежать подмены.

https://documentation.mailgun.com/user_manual.html#webhooks

Чтобы проверить webhook является происходящий из Mailgun вам нужно:

  • Concatenate временных меток и маркеров значения.
  • Кодировать полученную строку с помощью алгоритма HMAC (используя ключ API в качестве ключа и режим дайджест SHA256).
  • Сравните полученный шестиугольник с подписью.
  • Необязательно, вы можете кэшировать значение токена локально и не соблюдать любой последующий запрос с тем же токеном. Это предотвратит повторные атаки.
  • При необходимости вы можете проверить, не находится ли метка времени слишком далеко от текущего времени.