33.27 Подозрительный текст

Emacs может отображать текст из множества внешних источников, таких как электронная почта и веб-сайты. Злоумышленники могут попытаться запутать пользователя, читающего этот текст, используя обфусцированные URL или адреса электронной почты, и заставить пользователя посетить веб-страницу, которую он не собирался посещать, или отправить электронное письмо на неверный адрес.

Обычно это включает использование символов из скриптов, которые визуально похожи на символы ASCII (то есть являются гомоглифами), но используются и другие методы, например, использование переопределений двунаправленности или наличие текста ссылки HTML, который говорит одно, в то время как базовый URL указывает куда-то еще.

Чтобы помочь в выявлении этих подозрительных текстовых строк, Emacs предоставляет библиотеку для выполнения ряда проверок текста. (См. UTS #39: Механизмы безопасности Unicode для обоснования доступных проверок и получения более подробной информации.) Пакеты, представляющие данные, которые могут быть подозрительными, должны использовать эту библиотеку для пометки подозрительного текста при отображении.

Функция: textsec-suspicious-p тип объекта

Эта функция является высокоуровневым интерфейсом, который должны использовать пакеты. Она уважает опцию пользователя textsec-check, которая позволяет пользователю отключить проверки.

Эта функция проверяет объект (тип данных которого зависит от тип), чтобы определить, выглядит ли он подозрительно при интерпретации как объект типа тип. Доступные типы и соответствующие типы данных объекта следующие:

domain

Проверяет, выглядит ли домен (например, 'www.gnu.org') подозрительно. Объект должен быть строкой — именем домена.

url

Проверяет, выглядит ли URL (например, 'http://gnu.org/foo/bar') подозрительно. Объект должен быть строкой — URL для проверки.

link

Проверяет, выглядит ли ссылка HTML (например, '<a href='http://gnu.org'>fsf.org</a>') подозрительно. В этом случае объект должен быть ячейкой cons, где car — это строка URL, а cdr — это текст ссылки. Считается, что ссылка подозрительна, если текст ссылки содержит доменное имя, и этот домен указывает не на URL.

email-address

Проверяет, выглядит ли адрес электронной почты (например, 'foo@example.org') подозрительно. Объект должен быть строкой.

local-address

Проверяет, выглядит ли локальная часть адреса электронной почты (часть до знака '@') подозрительно. Объект должен быть строкой.

name

Проверяет, выглядит ли имя (используемое в заголовке электронного письма) подозрительно. Объект должен быть строкой.

email-address-header

Проверяет, выглядит ли полный заголовок адреса электронной почты по RFC2822 (например, '=?utf-8?Q?=C3=81?= <foo@example.com>') подозрительно. Объект должен быть строкой.

Если объект подозрителен, эта функция возвращает строку, объясняющую, почему он подозрителен. Если объект не подозрителен, функция возвращает nil.

Если текст подозрителен, приложение должно пометить подозрительный текст лицом textsec-suspicious и сделать объяснение, возвращаемое textsec-suspicious-p, доступным для пользователя каким-либо образом (например, во всплывающей подсказке). Приложение также может запросить у пользователя подтверждение перед выполнением каких-либо действий в отношении подозрительной строки (например, отправка электронного письма на подозрительный адрес электронной почты).