2010-08-21 3 views
1

A fait un petit formulaire de contact sur php, il obtient $_POST variables et mails à moi.PHP sécurisé variables de messagerie

<form action="/myscript.php" method="post"> 

petit morceau de code:

$subject = trim($_POST['subject']); 
$comment = trim($_POST['comment']); 
mail($email, $subject, $comment, $headers); 

$email est l'adresse mail à moi, $headers sont d'habitude.

Il n'y a pas de filtrage pour le sujet et les commentaires. Peut-il être un trou de sécurité potentiel sur mon site?

Mon courrier est placé sur gmail.com. Le courrier non filtré de mon site peut-il me blesser, quand j'ouvre l'interface de gmail dans le navigateur?

Comment devrais-je filtrer toutes les variables? Peut-être que je souhaite echo certains d'entre eux sur mon site, après l'envoi d'un e-mail. (comme 'Merci,% nom%!')

Répondre

1

Non, ce n'est pas si dangereux. Gmail ne fait pas confiance aux e-mails que vous recevez, sinon chaque spammeur pourrait vous compromettre.

Cependant, il est recommandé de vérifier au moins si les variables existent et si leur longueur ne dépasse pas le maximum.

EDIT Il est possible que les anciennes versions de PHP étaient vulnérables aux attaques par injection de courrier électronique, comme décrit here. Cela ne compromettrait pas votre site et votre client de messagerie devrait être capable de gérer les courriels malveillants en toute sécurité, mais pourrait vous transformer en un relais de spam.

Les nouvelles versions ne présentent pas cette vulnérabilité, car tous les caractères de contrôle (ceux inférieurs à 0x20) sont sanitized. Vous pouvez faire le même assainissement comme ceci:

$subject = filter_input(INPUT_POST, "subject", FILTER_UNSAFE_RAW, 
    FILTER_FLAG_STRIP_LOW); 
if ($subject === false) { /* subject not given/not scalar; handle it */ } 
+0

vrai pour les deux questions? – James

+0

@Work Oui, pour les deux. – Artefacto

+0

quelle est la longueur maximale pour les champs de courrier? – James

1

Oui, il est dangereux, vulnérable aux attaques appelées injection de courrier.
Bien que cela ne puisse pas nuire à votre site mais peut être utilisé par les spammeurs.

$subject = "Site feedback"; 
$comment = trim($_POST['subject'])."\n\n".trim($_POST['comment']); 
mail($email, $subject, $comment); 

celui-ci serait sans danger.

+0

Pourquoi «trim» vous aiderait-il ici? – Artefacto

+0

@Artefacto trim ne pas aider avec injecions lol –

+0

Désolé, -1. Cela ne vous aidera pas du tout. – Artefacto

1

probablement vous pouvez vérifier http://swiftmailer.org/ une bibliothèque de composants php mailer afin de comparer votre solution avec elle. Swiftmailer est la solution mailer pour les frameworks tels que symfony-project.org.

Le texte en clair n'est pas un problème pour un site Web, les pièces jointes le sont, mais le commentaire et l'objet ne créeraient aucun problème sur votre serveur. En ce qui concerne gmail, il a sa propre vérification par email, il serait donc difficile pour un email avec virus ou similaire de réussir son analyse. rgds.