2017-05-09 1 views
0

Je crée un formulaire de contact et là j'ai un champ de saisie, tapez e-mail. À l'avenir, je prévois de sauvegarder ce courriel et toutes les autres données dans la base de données. Par conséquent, j'ai une question sur la façon de valider correctement cet email en PHP?Comment valider un e-mail (internationalement) pour une sauvegarde sécurisée dans la base de données

-Il doit accepter l'utf-8 et tous les caractères internationaux individuels que cet e-mail peut contenir.

Pour l'instant, j'ai fait deux validations d'email différentes.

La première est faite en utilisant filter_var() mais celle-ci n'autorise pas l'utilisation de caractères internationaux. (Par conséquent je l'ai enlevé.)

Deuxièmement, j'ai utilisé regex '/ ^[^\[email protected]][email protected][^\[email protected]]+.[^\[email protected]]+$/ui' et celui-ci permet l'utilisation de caractères internationaux mais il permet également d'utiliser '/ * et d'autres caractères qui sont une menace pour une éventuelle injection SQL. Je sais aussi qu'il existe une possibilité d'envoyer un courriel à un utilisateur pour vérifier ce courriel mais je me demande s'il existe une méthode de vérification que je peux utiliser pour valider le courrier électronique à l'échelle internationale et empêcher l'injection SQL?

Peut-être crypter/décrypter le courrier électronique? Peut-être que PDO devrait être suffisant?

+1

Prévention de l'injection SQL d Cela ne se produit pas en vous assurant que vous avez une adresse e-mail valide, cela arrive en utilisant [** déclarations préparées **] (https://secure.php.net/manual/fr/pdo.prepare.php) avec [** paramètres liés **] (https://secure.php.net/manual/fr/pdostatement.bindparam.php). –

+1

ce sont deux problèmes différents ... la validation d'email est en fait assez compliquée si vous voulez soutenir tous les email valides par specs (voir [cette question] (https://stackoverflow.com/questions/201323/using-a-regular- expression-à-valider-une-adresse-email)). Pour la prévention de l'injection SQL, vous devez utiliser des requêtes paramétrées et des instructions préparées ([cette question] (https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)) – JCOC611

+0

signifie que PDO devrait le sécuriser, non? –

Répondre

0

Comme recommandé par brasofilo et que je n'ai pas de code de votre projet pour travailler avec:

<?php 
iconv_set_encoding("internal_encoding", "UTF-8"); 

$subject = "Testmail — Special Characters"; 
$msg = "Hi there,\n\nthis isn’t something easy.\n\nI haven’t thought that it’s that complicated!"; 

mail(utf8_decode($to), utf8_decode($subject), utf8_decode($msg), utf8_decode($from)."\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n");?> 

php mail special characters utf8

+0

Je l'ai déjà essayé et cela ne fonctionne pas bien pour les caractères internationaux. Aussi, j'ai étudié cela sur google et il semble que les développeurs sont 50/50 sur l'utilisation de cela. C'est bien parce que vous pouvez le mettre à jour avec PHP et pas comme regex dont vous avez besoin pour le mettre à jour s'il y a un bug. –

+0

Je n'ai pas de problème avec le contenu des emails n'acceptant pas les caractères utf-8, je ne fais que valider la valeur du champ de saisie du formulaire html. Le type du champ de saisie est email. –