Как SMTP избегает команды RSET после команды DATA? - PullRequest
0 голосов
/ 18 декабря 2018

В RFC 821 говорится, что команда сброса (RSET) может быть отправлена ​​после команды DATA и отправлены некоторые почтовые данные:

Однако чторазличает почтовый клиент, отправляющий команду RSET после DATA, и почту, которая содержит слово «RSET» в отдельной строке?

Я проверил RFC 5321 и я не вижу ничего, что могло бы смягчить или избежать этого.Он говорит об экранировании почтовой строки, которая начинается с ".", Но не с "RSET".

Клиент не может завершить передачу данных почты с точкой в ​​строке самостоятельно, или сервер отправитчастичная почта была получена.

Я предполагаю, что в RFC я что-то упустил, иначе я не могу не думать, что во многих реализациях есть либо вектор атаки внедрения SMTP, либо никто не можеткогда-нибудь отправлять почту с «RSET» на отдельной строке (думаю, люди бы заметили).

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

RFC 5321 § 4.1.1.5 (RSET) заявляет, что «любые сохраненные данные отправителя, получателей и почты ДОЛЖНЫ быть отброшены».Это относится к командам MAIL FROM, RCPT TO и, предположительно, DATA.

Однако, после получения . после DATA, сообщение "ДОЛЖНО" быть доставлено (что может привести ксбой, но не частичный сбой, см. § 4.1.1.4 ).Это очищает буфер от всего, что RSET должен делать.

Это означает, что RSET просто вызывает ответ 250 OK от принимающего сервера (keep-alive, очень похоже на NOOP) и подтверждаетотправителю, что действительно нет ни одного сохраненного отправителя или получателя, поставленного в очередь для следующего сообщения.

Я не знаю способа прервать команду DATA для выдачи RSET.Единственный известный мне способ сделать это - разорвать соединение и установить новое - и, чтобы быть в безопасности в случае какой-то странной возможности возобновления, я бы выпустил RSET сразу после EHLO илиHELO (что в спецификации написано NOOP).Если бы был такой способ, он должен быть в RFC 5321 § 4.1.1.4 , § 4.1.1.5 и / или § 3.3 .

0 голосов
/ 18 декабря 2018

Ключевое слово здесь после Я полагаю.Команда DATA выполняется до тех пор, пока не завершится с одиночным . в строке.

...