Je viens juste de commencer à travailler aujourd'hui avec la bibliothèque IMAP de PHP, et pendant que imap_fetchbody ou imap_body sont appelés, il déclenche mon antivirus Kaspersky. Les virus sont Trojan.Win32.Agent.dmyq et Trojan.Win32.FraudPack.aoda. Je cours ceci une machine de développement local avec XAMPP et Kaspersky AV.Utilisation des déclencheurs de la bibliothèque IMAP de PHP Antivirus de Kaspersky
Maintenant, je suis sûr qu'il y a des virus là-bas car il y a du spam dans la boîte (qui n'a pas besoin d'un peu de viagra ou de vicodin ces jours-ci?). Et je sais que puisque le corps brut inclut des attachements et différents types de mime, de mauvaises choses peuvent être dans le corps. Donc, ma question est la suivante: y a-t-il des risques à utiliser ces librairies?
Je suppose que les fonctions IMAP récupèrent le corps, en le mettant en mémoire cache sur le disque/la mémoire et l'analyse antivirus voit les données.
Est-ce correct? Y a-t-il des problèmes de sécurité connus en utilisant cette bibliothèque (je n'en ai trouvé aucun)? Nettoie-t-il parfaitement les parties de message en cache ou les fichiers viraux peuvent-ils être placés quelque part?
Existe-t-il un meilleur moyen d'obtenir du texte en dehors de ce corps? En ce moment je suis en utilisant le code suivant (crédit à 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");
}
Le nettoyage de virus n'est certainement pas quelque chose que les fonctions PHP imap font. File_get_contents() ou cURL ne le sont pas non plus. Les tâches de ces fonctions sont simplement d'aller chercher des données; ce n'est pas leur affaire si ces données peuvent contenir du code exécutable indésirable. –
Les antivirus signalent souvent des programmes «obscurs» qui envoient des courriels en tant que virus. Dites-leur que PHP va bien. – zneak
Frank - Je ne lui demande pas de nettoyer les données. Je demande que puisque la fonction imap_body télécharge clairement un virus (puisqu'une AV locale l'attrape) - où et comment la bibliothèque gère-t-elle ces données? Y a-t-il des soucis pour attraper le corps brut? – TMG