recherche
  • Se connecter
  • S'inscrire
Réinitialisation du mot de passe réussie

Suivez les projets qui vous intéressent et découvrez les dernières actualités les concernant.

boîte aux lettres sécurisée

Boîte aux lettres de sécurité PHP

Dans le script PHP E-Mail de la section précédente, il y a une faille

· Filter_sanitize_email filter Supprimer caractères illégaux de l'e-mail à partir de la chaîne

· Le filtre FILTER_VALIDATE_EMAIL valide la valeur de l'adresse e-mail

Injection d'e-mail PHP

Tout d'abord, prenez un aperçu du code PHP du chapitre précédent :

<html>
 <head>
 <meta charset="utf-8">
 <title>php中文网(php.cn)</title>
 </head>
 <body>
 
 <?php
 if (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件
 // 发送邮件
 $email = $_REQUEST['email'] ;
 $subject = $_REQUEST['subject'] ;
 $message = $_REQUEST['message'] ;
 mail("someone@example.com", $subject,
 $message, "From:". $email);
 echo "邮件发送成功";
 } else { // 如果没有邮箱参数则显示表单
 echo "<form method='post' action=''>
    Email: <input name='email' type='text'><br>
    Subject: <input name='subject' type='text'><br>
    Message:<br>
 <textarea name='message' rows='15' cols='40'>
 </textarea><br>
 <input type='submit'>
 </form>";
 }
 ?>
 
 </body>
 </html>

Le problème avec le code ci-dessus est que des utilisateurs non autorisés peuvent insérer des données dans l'en-tête de l'e-mail via le formulaire de saisie.

Que se passera-t-il si l'utilisateur ajoute le texte suivant à l'e-mail dans la zone de saisie du formulaire ?


someone@example.com%0ACc:person2@example.com
%0ABcc:person3@example.com,person3@example.com,
anotherperson4@example.com,person5@example. com
%0ABTo:person6@example.com

Comme d'habitude, la fonction mail() place le texte ci-dessus dans l'en-tête de l'e-mail, donc maintenant l'en-tête a des Cc :, Bcc : et Vers : champs. Lorsque l'utilisateur clique sur le bouton Soumettre, cet e-mail sera envoyé à toutes les adresses ci-dessus !

PHP Empêcher l'injection d'e-mails

La meilleure façon d'empêcher l'injection d'e-mails est de valider l'entrée.

Le code suivant est similaire à celui du chapitre précédent, mais ici nous avons ajouté un validateur d'entrée pour détecter le champ email dans le formulaire :

Dans le code ci-dessus, nous utilisons PHP filtrage Filtre pour valider la saisie : La valeur de

nouveau fichier
<html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <?php function spamcheck($field) { // filter_var() 过滤 e-mail // 使用 FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() 过滤 e-mail // 使用 FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件 // 判断邮箱是否合法 $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "非法输入"; } else { // 发送邮件 $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else { // 如果没有邮箱参数则显示表单 echo "<form method='post' action=''> Email: <input name='email' type='text'><br> Subject: <input name='subject' type='text'><br> Message:<br> <textarea name='message' rows='15' cols='40'> </textarea><br> <input type='submit'> </form>"; } ?> </body> </html>
Réinitialiser le code
Opération automatique
soumettre
Aperçu Clear
  • Recommandations de cours
  • Téléchargement du didacticiel