我今天刚开始使用 PHP 的 IMAP 库,当 imap_fetchbody 或 imap_body 被调用时,它触发了我的卡巴斯基防病毒软件。这些病毒是 Trojan.Win32.Agent.dmyq 和 Trojan.Win32.FraudPack.aoda。我正在使用 XAMPP 和 Kaspersky AV 在本地开发机器上运行它。
现在,我确信那里有病毒,因为盒子里有垃圾邮件(这些天谁不需要伟哥或维柯丁?)。而且我知道,由于原始身体包括附件和不同的哑剧类型,所以坏东西可能在身体里。
所以我的问题是:使用这些库有什么风险吗?
我假设 IMAP 函数正在检索正文,将其缓存到磁盘/内存,并且 AV 扫描它会看到数据。
那是对的吗?使用这个库是否有任何已知的安全问题(我找不到)?它是否完美地清理了缓存的消息部分,或者病毒文件可能位于某个地方?
有没有比这更好的从正文中获取纯文本的方法?现在我正在使用以下代码(感谢 Kevin Steffer):
function get_mime_type(&$structure) {
$primary_mime_type = array("TEXT", "MULTIPART","MESSAGE", "APPLICATION", "AUDIO","IMAGE", "VIDEO", "OTHER");
if($structure->subtype) {
return $primary_mime_type[(int) $structure->type] . '/' .$structure->subtype;
}
return "TEXT/PLAIN";
}
function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false) {
if(!$structure) {
$structure = imap_fetchstructure($stream, $msg_number);
}
if($structure) {
if($mime_type == get_mime_type($structure)) {
if(!$part_number) {
$part_number = "1";
}
$text = imap_fetchbody($stream, $msg_number, $part_number);
if($structure->encoding == 3) {
return imap_base64($text);
} else if($structure->encoding == 4) {
return imap_qprint($text);
} else {
return $text;
}
}
if($structure->type == 1) /* multipart */ {
while(list($index, $sub_structure) = each($structure->parts)) {
if($part_number) {
$prefix = $part_number . '.';
}
$data = get_part($stream, $msg_number, $mime_type, $sub_structure,$prefix . ($index + 1));
if($data) {
return $data;
}
} // END OF WHILE
} // END OF MULTIPART
} // END OF STRUTURE
return false;
} // END OF FUNCTION
$connection = imap_open($server, $login, $password);
$count = imap_num_msg($connection);
for($i = 1; $i <= $count; $i++) {
$header = imap_headerinfo($connection, $i);
$from = $header->fromaddress;
$to = $header->toaddress;
$subject = $header->subject;
$date = $header->date;
$body = get_part($connection, $i, "TEXT/PLAIN");
}