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;
}
}
作为附注,惊讶的是目前没有邮件注入/电子邮件注入的标签。
答案 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