2016-09-14 6 views
0

メッセージングシステムを備えたプラットフォームを構築しています。リクエストの発信元を確認し、電子メールの送信者を検証する - Node.js

私は電子メールからメッセージを投稿したいと思います。そのために私のAPIに電子メールをリダイレクトするMailgunのルートを作成しました。

この部分は機能していますが、実際にメッセージを自分のプラットフォームに投稿する前に、リクエストを検証する必要があります。送信者の電子メールを見て、自分のデータベース上でメッセージの作成者を探し、電子メールのターゲットがメッセージを受け取るプロファイルのグループを選択するようにします。だから、

、例: 私は電子メール

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

を受信した場合、私は私のデータベースに「[email protected]」をチェックしますと、彼は「グループ」に投稿し、私ならばことができるかどうかを確認メッセージを投稿します。

問題は、私は二つのことを検証する必要があり、次のとおりです。私のAPIのリクエストが実際に電子メールの送信者が真正である場合になりすまし

  • チェックを回避するために、Mailgunから来た場合は

    • を、最初に私は、原点を取得するノード上req.connection.remoteAddressを使用することができることを見て、その後、私は逆引き参照を実行しようとしましたをしない任意のスパム

    IPとそれがMailgunからあったかどうかを確認しますが、逆引き参照は何も見つかりませんでした。

    は私がメールに受信ヘッダを使用することができることを見た電子メールの発信元を検証するには、その後、私は、DNSルックアップでそれらをチェックして、MXレコードが一致したかどうか確認について考えました。

    私は本当にこれに新しいです、そして、私の質問は、この2つのステップを検証する簡単な方法があり、それはまったく安全ですか?

  • 答えて

    0

    Mailgun Dashboardでドメインを設定するときに有効にできる[受信スパムフィルタ]チェックボックスがあります。

    スプーフィングを避けるため、Mailgunのドキュメントの「Webhooksのセキュリティ保護」を参照してください。

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

    ウェブフックが必要にMailgunから発信されていることを確認するには、次の

    • を連結タイムスタンプとトークン値。
    • HMACアルゴリズムで結果の文字列をエンコードします(APIキーをキーとして使用し、SHA256ダイジェストモードを使用)。
    • 結果の16進数を署名と比較してください。
    • オプションで、トークン値をローカルにキャッシュすることができ、同じトークンを持つ後続の要求を尊重することはできません。これにより、リプレイ攻撃が防止されます。
    • オプションで、タイムスタンプが現在の時刻からあまり離れていないかどうかを確認できます。
    関連する問題