【问题标题】:How to verify sender of incoming email address in Google App Engine?如何在 Google App Engine 中验证传入电子邮件地址的发件人?
【发布时间】:2010-12-22 21:19:44
【问题描述】:

我正在尝试在 Google App Engine 的 Python SDK 中编写一个基于电子邮件的应用程序。我注意到谷歌allows you to receive email via its API,它很容易让你访问标准字段,如发件人、收件人、正文等。但是,如果我试图验证一个电子邮件地址是否来自它所说的来自谁从(有点像Posterous为你做的那样),我怎么能?我无权访问任何电子邮件标头,因此我无法检查发送服务器 IP 地址的 MX 记录或任何类似的东西。

有什么想法吗?

【问题讨论】:

    标签: python google-app-engine email verification


    【解决方案1】:

    实际上,虽然没有很好的记录,但here 的来源表明,您从中获得的方便对象被塑造的原始 mime 消息可作为方便对象的.original 属性使用——这是@987654322 的一个实例@,所以您应该能够从那里获取电子邮件标题。不过,我不确定这会让您在寻求验证方面走得更远。

    【讨论】:

    • 有趣,很好的搜索源代码。
    • @daveslab, tx -- 我很喜欢 GAE SDK 是开源的,所以我可以对有时稀缺的文档进行一些补偿(至少对于在应用程序级别发生的情况,这很多——RPC调用背后的内容[[在生产运行中,而不是使用开源模拟机制的SDK运行]]最好记录好;-)。
    • 说实话,我不知道它是开源的。对于像我这样的 Python 爱好者来说应该是一个很好的风格指南。
    • 你甚至不需要使用 webapp 的邮件处理程序;实际发布到您的电子邮件 URL 的是原始消息,您可以随意处理它。
    【解决方案2】:

    电子邮件通常不是可验证的媒介,除非您使用 PGP 或 S/MIME 对其进行签名。如果您没有标头,则说明您没有任何需要验证的内容。

    您唯一能做的就是通过电子邮件发送地址并要求此人确认他们确实发送了消息。这对于欺诈性电子邮件发件人来说更难伪造(但并非不可能)。

    或者您可以要求用户在每条消息中输入密码。

    【讨论】:

    • 是的,没错@rjmunro。感谢您的输入,我在 cmets 中考虑了上述问题,但由于上述原因没有这样做。
    【解决方案3】:

    Alex 关于访问标头是正确的,但这不允许您验证电子邮件的实际发件人:任何人都可以使用他们希望的任何“发件人”地址发送电子邮件,因此不要依赖发件人地址作为发送者的权威证明。

    【讨论】:

      【解决方案4】:

      如果这是注册过程或类似过程的一部分,那么您为什么不向(假设为) 发起人?这样您就可以验证电子邮件地址是否不是伪造的。

      “大佬”(例如 Google)经常使用这个过程,一定是有原因的。

      如果不适合您的用例,请忽略我的建议。


      更新:您可以让电子邮件在到达您的 GAE 应用程序之前通过另一个 Web 服务(待定)传输吗?这样,您仍然可以利用 GAE,同时在其他地方完成电子邮件验证等处理开销较低的工作?

      【讨论】:

      • 谢谢@jldupont,这确实有道理。但是,问题在于它不仅用于注册,还用于继续使用。例如,Posterous 允许您通过电子邮件发布博客文章,每次您向他们发送电子邮件时,它都必须以某种方式 验证它实际上是您,而不是一些操纵标题。这就是我要解决的问题。
      • @daveslab:我明白了。您不能要求您系统的用户在每封电子邮件中附加一个唯一的令牌(某处)吗?当然,您可能会遇到中间人攻击,但这可能是一种方式,不是吗?
      • @jldupont 是的,绝对是,但从可用性的角度来看,这绝对是烂透了。即使我给他们一个相对容易记住的短语,比如“Money Cape”,并要求它必须放在电子邮件的某个位置,这个人仍然需要费力地记住它。任何对用户来说价值并没有立即显现出来的安全措施都会在他们的脑海中显得不必要。
      • @daveslab:我读得很清楚。然后我可以更新我原来的答案。
      【解决方案5】:

      您只能使用 DKIM 验证发件人。 GAE 会自动使用 DKIM 对 google 帐户电子邮件进行签名,但您需要外部服务(应通过 http/https 访问)来查询 DNS 并为您提供 txt DNS 字段。

      【讨论】:

        猜你喜欢
        • 2011-03-21
        • 2011-04-14
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多