邮件头注入
概述
在Web应用程序中,有些具有向特定电子邮件地址发送用户输入的商品申请和调查等内容的功能。通常,此电子邮件地址是固定的,除了Web应用程序管理员外,其他人无法更改,但是根据实现方式,外部用户可以自由指定此电子邮件地址。这种导致此类问题的漏洞称为“邮件头注入”,并将利用它的攻击称为“邮件头注入攻击”。
可能发生的威胁
如果进行了邮件头注入攻击,则可能发生以下威胁。
- 第三方中继邮件会被利用发送垃圾邮件
需要注意的网站特征
实现将用户输入的内容以电子邮件发送给管理员的网站将受到“第三方中继邮件”的影响。相关功能包括“联系我们”页面和“调查”等。
根本解决办法
- 固定邮件头,将所有外部输入输出到电子邮件正文中。
如果电子邮件头的内容取决于外部输入或邮件发送程序的输出处理存在问题,则将外部输入直接输出会将由外部提供的换行符插入为额外的换行符。这将导致任意电子邮件标题的插入、电子邮件正文的更改和发送到任意收件人的电子邮件。建议不要将外部输入输出到电子邮件头中。
- 如果无法固定邮件头,请使用Web应用程序的执行环境或语言中提供的电子邮件发送API。
例如,当您想更改电子邮件的主题时,无法将电子邮件头固定。如果在电子邮件头中输出外部输入,则建议使用Web应用程序的执行环境或语言中提供的电子邮件发送API。但是,有些API可能处理不当换行符,或者具有可以插入多个电子邮件标题的规范。在这种情况下,请使用修复了漏洞的版本或通过在换行后插入空格或水平制表符等方法将其作为连续行处理,删除换行符后面的字符,如果包含换行符,则停止生成Web页面的处理等适当的处理方法。
- 不要在HTML中指定收件人。
这可以说是“无法接受”的实现,但是由于曾经有过将收件人直接指定为隐藏参数等的情况,因此将其介绍为应避免的实现。将收件人直接指定为传递给Web应用程序的参数的实现可能会导致参数值被更改,从而导致第三方中继邮件系统。
保险措施
- 删除所有外部输入的换行符。
删除所有外部输入的换行符。或者,您甚至可以删除所有控制字符。但是,如果Web应用程序针对所有输入执行处理,包括可能包含换行符的字符串数据输出到电子邮件正 文等,则需要注意,该Web应用程序将无法正确运行。