PHP Seguridad de correo electrónico
En un e-mail de PHP en el guión, hay un vacío legal.
PHP E-mail de inyección
En primer lugar, mirar el último capítulo del código PHP:
<html> <head> <meta charset="utf-8"> <title>本教程(w3big.com)</title> </head> <body> <?php if (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件 // 发送邮件 $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("[email protected]", $subject, $message, "From:" . $email); echo "邮件发送成功"; } else { // 如果没有邮箱参数则显示表单 echo "<form method='post' action='mailform.php'> 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>
Código problemas anteriores es que los usuarios no autorizados pueden insertar datos en el encabezado del mensaje por el formulario de entrada.
Si el usuario en la forma de la caja de entrada añadiendo el siguiente texto en un correo electrónico, lo que va a pasar?
[email protected]%0ACc:[email protected] %0ABcc:[email protected],[email protected], [email protected],[email protected] %0ABTo:[email protected]
Dado que la función de costumbre, el correo () para el texto anterior en el encabezado del mensaje, por lo que ahora la cabeza con extra de CC :, CCO: y A: campos. Cuando el usuario hace clic en el botón de enviar, a este correo electrónico será enviado a todas las direcciones de arriba!
inyección de PHP para evitar E-mail
La mejor manera de prevenir la inyección de correo electrónico es para validar la entrada.
El siguiente código es similar al último capítulo, pero aquí hemos aumentado la detección de campo de correo electrónico programa de validación de formulario de entrada:
<html> <head> <meta charset="utf-8"> <title>本教程(w3big.com)</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("[email protected]", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else { // 如果没有邮箱参数则显示表单 echo "<form method='post' action='mailform.php'> 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>
En el código anterior, se utiliza el filtro de PHP para verificar la entrada:
- Filtro FILTER_SANITIZE_EMAIL borrar el correo electrónico de una cadena de caracteres no válidos
- Filtro FILTER_VALIDATE_EMAIL verificar el valor de la dirección de correo electrónico
Puede en nuestro filtro PHP Más información acerca de los filtros de conocimiento.