Envoyer un mail sécurisé

Eléphant du PHP | 363 Messages

30 sept. 2015, 09:55

Bonjour,

Je cherche le moyen d'envoyer un mail au format HTML via PHP mais de façon sécurisée.

J'entends par là de sécuriser ce qui est envoyé, vérifier les données etc... je ne sais pas quelle genre de menaces ou script on peut envoyer dans un formulaire de contact.

Si vous avez des informations et une solution je suis preneuse :)
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

30 sept. 2015, 12:44

Bonjour,

Il faut que tu filtres les données que tu reçois de ton formulaire pour être sûr de ne mettre dans le mail que ce que tu es en droit d'attendre.
PHP a une fonction dédiée à cela qui s'appelle filter_var()

Tu peux faire un test que l'adresse e-mail indiqué soit correct avec le filtre de validation FILTER_VALIDATE_EMAIL :
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) die("Adresse e-mail incorrecte");
Et tu peux nettoyer le texte à ajouter en message avec le filtre de nettoyage FILTER_SANITIZE_STRING :
$message = filter_var($_POST['message'], FILTER_SANITIZE_STRING);
Quand tout le reste a échoué, lisez le mode d'emploi...

ynx
Mammouth du PHP | 586 Messages

30 sept. 2015, 14:12

Salut,

En complément de la réponse précédente, si ton mail est au format html, ne pas oublier d'utiliser la fonction htmlspecialchars (ou htmlentities) pour éviter les failles XSS.

Bonne journée

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

30 sept. 2015, 16:03

En complément de la réponse précédente, si ton mail est au format html, ne pas oublier d'utiliser la fonction htmlspecialchars (ou htmlentities) pour éviter les failles XSS.
En fait, le filtre FILTER_SANITIZE_STRING que je proposais supprime déjà toutes les balises et encode les caractères spéciaux donc devrait être suffisant.

Si les utilisateurs peuvent poster des balises, il existe le filtre FILTER_SANITIZE_SPECIAL_CHARS qui correspond effectivement à un htmlspecialchars() en encore + puissant
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 363 Messages

01 oct. 2015, 09:54

Kikoo,

Si je comprends bien dans mon traitement je dois vérifier que l'adresse email est bonne puis si c'est le cas j'applique les filtres sur chaque champ posté ?

Mais comment vérifie t-on en amont et avec les filtres que de l'info a bien été saisie ?

Merci de votre aide.
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

01 oct. 2015, 10:15

Mais comment vérifie t-on en amont et avec les filtres que de l'info a bien été saisie ?
Avec la fonction empty()
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 363 Messages

01 oct. 2015, 11:03

Ok @rthur, je pensais utiliser isset.

Donc la bonne logique c'est de faire

Si l'email est valide
Que les champs nom, prénom, profession sont renseignés

J'applique les filtres et j'envoie, c'est bien ça ?

Peux-tu me donner un exemple d'injection ou de script qui peut être fait pour voir si ce que je mets en place est protégé ou non.

MERCI
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

Mammouth du PHP | 2703 Messages

01 oct. 2015, 21:34

http://www.phpsecure.info/v2/article/Ma ... Inject.php
pas lu mais cela doit répondre à la question

Eléphant du PHP | 363 Messages

02 oct. 2015, 10:27

Merci beaucoup les garçons.
Donc la bonne logique c'est bien de vérifier si l'email est valide, que les champs nom, prénom, profession sont renseignés et après d'appliquer les filtres, c'est bien ça ?
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?