Недавнее обновление 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>