【问题标题】:How does SMTP escape an RSET command after a DATA command?SMTP 如何在 DATA 命令后转义 RSET 命令?
【发布时间】:2018-12-19 02:38:20
【问题描述】:

RFC 821 中,它表示可以在DATA 命令和一些邮件数据已发送之后发送重置(RSET)命令:

但是,邮件客户端在DATA 之后发送RSET 命令与在一行中单独包含单词“RSET”的邮件有什么区别?

我也检查了RFC 5321,我看不到任何可以减轻或逃避这种情况的东西。它确实谈到了转义以“。”开头的邮件行,而不是“RSET”。

客户端不能自行终止邮件数据传输,否则服务器将发送部分邮件。

我想我在 RFC 中遗漏了一些东西,否则我不禁想到在许多实现中存在 SMTP 命令注入攻击向量,或者没有人可以发送带有“RSET”的邮件线本身(我想人们会注意到)。

【问题讨论】:

    标签: email smtp rfc


    【解决方案1】:

    我相信这里的关键字是之后DATA 命令一直在执行,直到它在一行中出现一个单独的 .

    【讨论】:

    • 正确。一旦你启动了DATA 命令,除了断开连接之外,你不能中止它。
    • 很公平,只是 RFC 为 RSET 声明“必须丢弃任何存储的发件人、收件人和邮件数据”。如果RSET不能在DATA.之间使用,而.将结束邮件事务并发送邮件,在什么情况下RSET会有邮件数据要丢弃?
    • 可能这就是为什么这段话从 5321 中删除的原因。你会注意到 5321 间接取代了 821(通过 2821)。
    • @tripleee – RFC 5321 § 4.1.1.5 (RSET) 声明“必须丢弃任何存储的发件人、收件人和邮件数据”,因此它至少可以在那里存活。另请参阅my answer
    【解决方案2】:

    RFC 5321 § 4.1.1.5 (RSET) 声明“必须丢弃任何存储的发件人、收件人和邮件数据。”这指的是MAIL FROMRCPT TO,大概还有DATA 命令。

    但是,在收到DATA 之后的. 后,“必须”传递消息(这可能导致失败但不是部分失败,请参阅§ 4.1.1.4)。这会清除所有 RSET 应该做的事情的缓冲区。

    这意味着RSET 仅从接收服务器引发250 OK 响应(保持活动状态,很像NOOP)并向发件人确认确实没有已保存的发件人或收件人排队等待下一条消息.

    我不知道如何中断DATA 命令以发出RSET。我所知道的唯一方法是终止连接并建立一个新连接——而且,为了安全起见,在某些奇怪的恢复能力的情况下,我会在 EHLOHELO(规范说是NOOP)。如果有这样的方法,它应该在 RFC 5321 § 4.1.1.4§ 4.1.1.5 和/或§ 3.3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2013-04-05
      • 2022-10-06
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      相关资源
      最近更新 更多