繁体   English   中英

PHP安全电子邮件阻止了虚假电子邮件,但允许注册通过

[英]PHP secure email is blocking the false emails but letting the registration go through

我正在尝试制作一种免受垃圾邮件侵扰的表格,并向注册人发送一封简单的电子邮件。

对于PHP而言,这是很新的问题,面临的问题是,当在电子邮件字段中使用错误的电子邮件地址提交表单时,它会显示错误消息,指出该电子邮件无效,但仍然允许注册将其添加到数据库。

这是代码

function spamcheck($field) {
    // filter_var() sanitizes the e-mail
    // address using FILTER_SANITIZE_EMAIL
    $field = filter_var($field, FILTER_SANITIZE_EMAIL);

    // filter_var() validates the e-mail
    // address using FILTER_VALIDATE_EMAIL
    if(filter_var($field, FILTER_VALIDATE_EMAIL)) {
        return TRUE;
    }
    else {
        return FALSE;
    }
}

if(isset($_REQUEST['email'])) {
    // if "email" is filled out, proceed
    // check if the email address is invalid
    $mailcheck = spamcheck($_REQUEST['email']);
    if ($mailcheck==FALSE) {
        die("<font color='red'>Your email address is invalid, please try again.</font><br/><br/><form><INPUT TYPE='button' VALUE='Back' onClick='history.go(-1);return true;'></form>");
    }
    else {//send email
        $to = "$email";
        $from = "name@mywebsite.com";
        $message = "Just a message";
        $subject = "Subject";

        mail($to, $message, $subject, "From: $from", "-f$from");
    }
}

任何帮助将不胜感激。

首先,打印Mailcheck看看它在说什么。

die('Mail Check:'。$ mailcheck);

如果没有设置,则等于===

if($ mailcheck === false){

}

可能这里的问题是,您的检查功能首先清理了电子邮件地址,然后验证了清理过的电子邮件。 这意味着,检查功能会检查已清理的电子邮件,但是在该功能之外,您仍在使用无效的电子邮件。

因此,要么在检查功能之外进行清理,要么在我看来甚至更好,仅在不进行清理的情况下验证输入(与尝试修复相比,最好让用户知道他键入的内容不正确)。

function checkEmail($input)
{
  return filter_var($input, FILTER_VALIDATE_EMAIL);
}

编辑:

实际上肯定还有另一个问题,因为执行代码die(...Your email address is invalid...)时,页面处理将停止。 我们将需要查看代码部分,该部分将写入数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM