代码之家  ›  专栏  ›  技术社区  ›  Trevor

SMTP如何在数据命令之后转义rset命令?

  •  1
  • Trevor  · 技术社区  · 7 年前

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

    但是,邮件客户端发送 资源集 之后的命令 数据 ,以及一封单独在一行中包含“rset”一词的邮件?

    我查过了 RFC 5321 我也看不到任何东西能减轻或逃避这一切。它确实讨论了如何转义以“.”开头的邮件行,但不是“rset”。

    客户端无法在一行上用句点终止邮件数据传输,否则服务器将发送给定的部分邮件。

    我想在rfc中我漏掉了一些东西,否则我会忍不住想到,在许多实现中要么存在smtp命令注入攻击向量,要么没有人可以单独发送一行带有“rset”的邮件(我想人们会注意到的)。

    2 回复  |  直到 7 年前
        1
  •  3
  •   tripleee    7 年前

    这里的关键字是 之后 我相信。这个 DATA 命令正在进行,直到用一个 . 在一条线上。

        2
  •  0
  •   Adam Katz Huang    7 年前

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

    但是,在收到 . 下列的 数据 ,则必须传递消息“must”(这可能导致失败,但不是部分失败,请参见 § 4.1.1.4 )中。这就清除了所有东西的缓冲区 RSET 是应该的。

    这意味着 资源集 只是引出一个 250 OK 接收服务器的响应(keep alive,很像 NOOP )并向发件人确认确实没有保存的发件人或收件人排队等待下一封邮件。

    我不知道怎么打断 数据 发出命令 资源集 是的。我所知道的唯一方法是终止连接并建立一个新的连接,为了在某些奇怪的恢复能力的情况下安全起见,我将发布一个 资源集 就在 EHLO 或 HELO (说明书上说 Noop公司 )中。如果有这种方法,应该在RFC 5321中 § 4.1.1.4 我是说, § 4.1.1.5 ,和/或 § 3.3 是的。

    推荐文章