Назад | Перейти на главную страницу

Является ли почта отклоненной элементом ACL eximʻa! Verify = header_syntax с заголовками From / To в кодировке RFC 2047, законна?

Недавнее обновление Exim добавило это по умолчанию acl_smtp_data ACL:

.ifndef NO_CHECK_DATA_VERIFY_HEADER_SYNTAX
deny
  !acl = acl_local_deny_exceptions
  !verify = header_syntax
  message = header syntax
  log_message = header syntax ($acl_verify_message)
.endif

Это приводит к отклонению некоторых сообщений. Например, следующий заголовок из спам-сообщения:

2020-03-02 09:22:48 1j8hHk-0000gS-3Y H=(static-181-143-69-27.une.net.co) [181.143.69.27] F=<Danika@une.net.co> rejected after DATA: header syntax (unqualified address not permitted: failing address in "From:" header is: =?utf-8?B?IkRhbmlrYSIgPERhbmlrYUB1bmUubmV0LmNvPg==?=): unqualified address not permitted: failing address in "From:" header is: =?utf-8?B?IkRhbmlrYSIgPERhbmlrYUB1bmUubmV0LmNvPg==?=

Расшифровывая оскорбительный заголовок, получаем:

00000000  22 58 69 6d 65 6e 61 22  20 3c 58 69 6d 65 6e 61  |"Ximena" <Ximena|
00000010  40 76 69 6c 2e 63 6f 6d  2e 75 61 3e              |@vil.com.ua>|
0000001c

Что кажется прекрасным значением для From заголовок мне.

Рискую ли я отклонять законную почту, используя verify = header_syntax, или заголовки, подобные приведенному выше, недействительны и их можно отклонить?

Углубляемся в RFC 2047:

5. Use of encoded-words in message headers

An 'encoded-word' may appear in a message header or body part header
   according to the following rules:

[...]

(3) As a replacement for a 'word' entity within a 'phrase', for example,
    one that precedes an address in a From, To, or Cc header.  The ABNF
    definition for 'phrase' from RFC 822 thus becomes:

    phrase = 1*( encoded-word / word )

    [...]

   These are the ONLY locations where an 'encoded-word' may appear.  In
   particular:

   + An 'encoded-word' MUST NOT appear in any portion of an 'addr-spec'.

Похоже, что encoded-word может использоваться для текста, предшествующего адресу в заголовке, но не для самого адреса. Так что безопасно использовать verify = header_syntaxдо тех пор, пока мы предполагаем, что легальная почта не будет содержать заголовков, нарушающих RFC 2047, путем скрытия адресов в закодированной части заголовков.

С другой стороны ... как насчет RFC 6854? Это позволяет использовать такие заголовки, как:

From: Automated System:;

честно говоря, в RFC также говорится, что этот синтаксис «предназначен только для ограниченного использования» («подходит для использования только в ограниченных или уникальных обстоятельствах», например, для экспериментов, на RFC 2026). Так что я не потеряю из-за этого много сна!

RFC2047 был применен неправильно

Раздел 5 допускает три различных способа использования закодированных слов, что не соответствует ни одному из них.

Максимум, что может охватить закодированное слово, - это «фраза» или «атом».

  "Ximena" <Ximena@vil.com.ua>
  "phrase" <atom@atom.atom.atom>