Emacs 可以显示来自许多外部来源的文本,例如邮件与网页。 攻击者可能会使用经过混淆的 URL 或邮件地址迷惑阅读文本的用户, 诱骗用户访问非预期的网页,或将邮件发送至错误地址。
这类行为通常会使用外观与 ASCII 字符极为相似的字符(即同形字符), 同时也存在其他技术手段,例如使用双向文本控制符,或是 HTML 链接显示文字与实际指向的 URL 不一致。
为帮助识别这类 可疑文本字符串(suspicious text strings),Emacs 提供了一个库用于对文本执行多项检查。 (相关检查的设计依据与更多细节参见 UTS #39: Unicode 安全机制。) 展示可能存在风险数据的扩展包应使用该库,在显示时对可疑文本进行标记。
该函数是扩展包应使用的高级接口函数。它会遵循用户选项 textsec-check,
该选项允许用户关闭相关检查。
该函数检查 object(其数据类型由 type 决定)在被解释为 type 类型内容时是否可疑。 可用类型及对应 object 数据类型如下:
domain检查域名(例如 ‘www.gnu.org’)是否可疑。object 应为字符串,即域名。
url检查 URL(例如 ‘http://gnu.org/foo/bar’)是否可疑。 object 应为字符串,即待检查的 URL。
link检查 HTML 链接(例如 ‘<a href='http://gnu.org'>fsf.org</a>’)是否可疑。
此时 object 应为一个 cons 单元,其中 car 为 URL 字符串,
cdr 为链接显示文本。若链接文本中包含的域名与 URL 指向目标不一致,则判定为可疑。
email-address检查邮件地址(例如 ‘[email protected]’)是否可疑。object 应为字符串。
local-address检查邮件地址的本地部分(‘@’ 符号前的内容)是否可疑。object 应为字符串。
name检查(邮件地址头中使用的)名称是否可疑。object 应为字符串。
email-address-header检查完整的 RFC2822 邮件地址头(例如 ‘=?utf-8?Q?=C3=81?= <[email protected]>’)是否可疑。 object 应为字符串。
若 object 可疑,该函数返回一个字符串说明可疑原因。若 object 无可疑之处,函数返回 nil。
若文本可疑,应用应使用 textsec-suspicious 面相标记该可疑文本,
并以某种方式(例如工具提示)向用户展示 textsec-suspicious-p 返回的可疑原因。
应用在对可疑字符串执行操作前(例如向可疑邮件地址发送邮件),也可提示用户进行确认。