電子郵件注入背後的思想是攻擊者在電子郵件標題中注入換行符(LF),因此他會添加儘可能多的標題。剝離這些換行符可以保護您免受這種攻擊。詳細信息檢查http://www.phpsecure.info/v2/article/MailHeadersInject.en.php
最好的做法是依靠一個寫得很好,經常更新和廣泛使用的代碼。爲此,我建議使用PEAR_MAIL或Zend_Mail
如果你不想加載這些模塊,或者你需要保持非常簡單。您可以從這些模塊中提取過濾功能。儘管我建議使用它們並經常更新庫,以便在未來出現新的攻擊時,您只需更新庫(Pear或Zend),即可完成。
這是在梨郵件包消毒頭功能:
function _sanitizeHeaders(&$headers)
{
foreach ($headers as $key => $value) {
$headers[$key] =
preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i',
null, $value);
}
}
的Zend_Mail使用電子郵件,姓名等領域不同的過濾器:
function _filterEmail($email)
{
$rule = array("\r" => '',
"\n" => '',
"\t" => '',
'"' => '',
',' => '',
'<' => '',
'>' => '',
);
return strtr($email, $rule);
}
function _filterName($name)
{
$rule = array("\r" => '',
"\n" => '',
"\t" => '',
'"' => "'",
'<' => '[',
'>' => ']',
);
return trim(strtr($name, $rule));
}
function _filterOther($data)
{
$rule = array("\r" => '',
"\n" => '',
"\t" => '',
);
return strtr($data, $rule);
}
我能想到的XSS攻擊和頭部注射也許; (如果您使用的是MIME類型),並確保沒有人在您的郵件標題中輸入自定義代碼 –
去除任何不可打印的字符,請使用US-ASCII編碼。刪除\ r \ n字符。將製表符轉換爲空格。 – hakre
優秀的問題。我只希望我沒有用盡當天可憐的投票限制。 –