Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
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']."\n MIME-Version: 1.0");

Merci.

3 réponses

Avatar
Olivier Miakinen
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 :

<http://svn.php.net/viewvc/php/php-src/branches/PHP_5_2/ext/standard/mail.c?view=markup&gt;

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

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

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
Avatar
Olivier Masson
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 :)
Avatar
Olivier Miakinen
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 :
<http://fr.php.net/manual/en/function.mail.php#94000&gt;, néanmoins je ne
vois aucun code supprimant les doubles rn dans les headers, même dans
la version courante (PHP 6 trunk) :
<http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/mail.c?view=markup&gt;.

Simplement, sans cordialité excessive,
--
Olivier Miakinen