电子邮件正文中是否存在注射漏洞?

时间:2011-03-17 16:07:18

标签: php code-injection

AFAIK在使用正确的用户数据时,电子邮件的HEADERS中只有一个漏洞?

我正在使用以下功能来清理我的数据,但是我在页面上有一些textarea字段&因此,这些可能包含换行符..所以想知道这个用户数据是否只会被放入电子邮件正文中,除了当然剥离HTML之外,它是否可以免除被消毒?

这是功能:

function is_injected($str) {

    $injections = array('(\n+)',
    '(\r+)',
    '(\t+)',
    '(%0A+)',
    '(%0D+)',
    '(%08+)',
    '(%09+)'
    );

    $inject = join('|', $injections);
    $inject = "/$inject/i";

    if (preg_match($inject,$str)) {
        return true;
    } else {
        return false;
    }

}

作为附注,惊讶的是目前没有邮件注入/电子邮件注入的标签。

4 个答案:

答案 0 :(得分:11)

如果您正在向邮件服务器说出本机SMTP,则可能会在正文中注入。

单个.本身会终止SMTP中的当前正文,因此理论上 您可以使用这样的用户提供的输入:

some body text
.
MAIL FROM: <...>
RCPT TO: <...>
DATA
Subject: here's some spam

here's a new body

并且SMTP服务器可能允许第二条消息通过。

某些SMTP服务器可以配置为通过不允许SMTP命令进行流水线操作来防止这种情况(即要求客户端在允许下一个命令之前读取响应)。

答案 1 :(得分:4)

如果电子邮件是HTML邮件,特别是如果收件人将在基于网络的电子邮件(Hotmail,Gmail,Yahoo等)或支持HTML视图的电子邮件客户端中查看,则注入身体绝对是一个问题 - XSS可以在任何地方发生。

答案 2 :(得分:3)

可能还会发生动态MIME更改。 当我们发送邮件时,我们通常在脚本中定义Content-type,例如:

Content-type: text/html;charset=UTF-8

捕获是 - “Content-Type”标题可以重新定义为multipart / mixed(或multipart / alternative或multipart / related),即使它已被普遍定义。

示例 - 假设某人在您的联系页面上将其键入电子邮件正文字段:

haxor@attack.com%0AContent-Type:multipart/mixed;%20boundary=frog;%0A--frog%0AContent-Type:text/html%0A%0AMy%20Message.%0A--frog--

这将做什么 - 当用户收到此消息时,他将只看到垃圾邮件发送者的消息(由“--frog”分隔的消息),根据mime multipart / mixed规范。开发人员可能硬编码的原始“联系”消息也将在电子邮件内部,但不会显示给收件人。

这样垃圾邮件发送者就可以从其他人的域发送垃圾邮件。 特别是如果它是某种形式:“发送给你的朋友。”形式。

另外 - 在过滤邮件标题时,我使用(我猜的比你在那里的要短一点):

preg_replace( '/\s+/', "", $text )

答案 3 :(得分:0)

如果边界未随机化,您还可以将MIME边界注入多部分消息。这样你可以注入任意内容(例如附带恶意软件的附件)。

示例(不直接与电子邮件相关但仍然):https://bugzilla.mozilla.org/show_bug.cgi?id=600464