2016-09-14 65 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出來,避免欺騙
  • 檢查電子郵件的發送者是真實的,沒有任何垃圾郵件

做的第一件,我看到,我可以用req.connection.remoteAddress節點上拿到的起源,然後我試圖做一個反向查找上IP,看它是否來自Mailgun,但反向查找什麼也沒有發現。

爲了驗證我看到了,我可以用收到標題上的電子郵件的電子郵件的起源,然後我想到了一個DNS查詢檢查,看看他們是否MX記錄相匹配。

我對這個真的很陌生,我的問題是,有沒有更簡單的方法來驗證這兩個步驟,它是否安全?

回答

0

有一個「入站垃圾郵件過濾器」複選框,您可以在Mailgun儀表板中設置域時啓用該複選框。

請參閱Mailgun文檔的「保護Webhooks」部分以避免欺騙。

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

要驗證網絡掛接從Mailgun始發您需要:

  • 串聯時間戳和標記值。
  • 使用HMAC算法對生成的字符串進行編碼(使用您的API密鑰作爲密鑰和SHA256摘要模式)。
  • 將得到的十六進制與簽名進行比較。
  • (可選)您可以在本地緩存令牌值,並且不會使用相同的令牌來兌現任何後續請求。這將防止重放攻擊。
  • (可選)您可以檢查時間戳是否與當前時間不太距離。