la fonction mail() est-elle filtree et su re ?

Le
Olivier Masson
Bonjour,

J'ai toujours vérifié tout ce que je donnais comme arguments à mail(),
ce qui me parait évident.

Pourtant, en critiquant cette absence de toute forme de
vérification/filtrage, on vient de me répondre qu'il n'y avait aucun
problème avec PHP5.

Est-ce vrai (notamment pour l'injection de headers) ?

Donc ils font, sans rien faire sur $_POST :
mail($maildest,$_POST['subject'],$_POST['message'],"From :
".$_POST['mail']." MIME-Version: 1.0");

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #21137581
Bonjour,

Le 05/02/2010 18:17, Olivier Masson a écrit :

J'ai toujours vérifié tout ce que je donnais comme arguments à mail(),
ce qui me parait évident.

Pourtant, en critiquant cette absence de toute forme de
vérification/filtrage, on vient de me répondre qu'il n'y avait aucun
problème avec PHP5.

Est-ce vrai (notamment pour l'injection de headers) ?



Ça semble vrai pour les paramètres $to et $subject, puisque tous les
caractères de contrôle sont remplacés par des espaces, sauf en ce qui
concerne les « folding white spaces » qui ne posent aucun problème :


141 if (iscntrl((unsigned char) to_r[i])) {
...
148 to_r[i] = ' ';
149 }

164 if (iscntrl((unsigned char) subject_r[i])) {
...
166 subject_r[i] = ' ';
167 }

Mais il est bien évidemment impossible de supprimer les sauts de ligne
dans le paramètre $additional_headers, puisque ce paramètre est déjà
prévu pour recevoir plusieurs entêtes.

Donc ils font, sans rien faire sur $_POST :
mail($maildest,$_POST['subject'],$_POST['message'],"From :
".$_POST['mail']."n MIME-Version: 1.0");



Horreur ! Malheur ! L'injection peut se faire via le paramètre
$_POST['mail']. Qui plus est, ils DOIVENT supprimer l'espace avant
MIME-Version, ils DOIVENT ajouter les entêtes Content-Type et
Content-Transfer-Encoding, et ils DEVRAIENT retirer l'espace après From.

Cordialement,
--
Olivier Miakinen
Olivier Masson
Le #21138621
Le 05/02/2010 18:50, Olivier Miakinen a écrit :

Ça semble vrai pour les paramètres $to et $subject, puisque tous les
caractères de contrôle sont remplacés par des espaces, sauf en ce qui
concerne les « folding white spaces » qui ne posent aucun problème :




Ok, merci.


Horreur ! Malheur ! L'injection peut se faire via le paramètre
$_POST['mail']. Qui plus est, ils DOIVENT supprimer l'espace avant
MIME-Version, ils DOIVENT ajouter les entêtes Content-Type et
Content-Transfer-Encoding, et ils DEVRAIENT retirer l'espace après From.




Donc ça c'est toujours d'actualité.
Je peux toujours balancer un Bcc. Et comme le Content-type n'est pas
précisé, je (le méchant script kiddy) peux le faire moi-même en
indiquant autre chose que du texte brut, etc. ?

Cordialement,



Rooh, tant de politesse n'est pas nécessaire avec moi :)
Olivier Miakinen
Le #21138871
Le 05/02/2010 21:07, Olivier Masson a écrit :

Horreur ! Malheur ! L'injection peut se faire via le paramètre
$_POST['mail']. Qui plus est, ils DOIVENT supprimer l'espace avant
MIME-Version, ils DOIVENT ajouter les entêtes Content-Type et
Content-Transfer-Encoding, et ils DEVRAIENT retirer l'espace après From.




Donc ça c'est toujours d'actualité.



Oui.

Je peux toujours balancer un Bcc.



Voire quelques milliers de Bcc.

Et comme le Content-type n'est pas
précisé, je (le méchant script kiddy) peux le faire moi-même en
indiquant autre chose que du texte brut, etc. ?



Oui. Même s'il était précisé, si c'était au même endroit que le
MIME-Version (donc après l'injection).

Qui plus est, tu peux même rajouter un contenu qui écrasera le vrai
contenu passé dans $_POST['message'].

Un commentaire dans la doc prétend que ça serait protégé en safe_mode :
vois aucun code supprimant les doubles rn dans les headers, même dans
la version courante (PHP 6 trunk) :

Simplement, sans cordialité excessive,
--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme