首页 > 解决方案 > 想要阻止用户在表单中输入无效的电子邮件地址

问题描述

我希望能够运行一个 php 验证脚本来阻止用户输入乱码作为他们的电子邮件地址。我知道我们可以将表单输入类型设置为电子邮件,但这很容易在开发人员工具中被绕过,并且数据库完整性受损。

我的插入页面如下所示:

$email = $conn->real_escape_string($_POST['emailpost']);
        $password = $conn->real_escape_string($_POST['passpost']);
        $firstname = $conn->real_escape_string($_POST['firstnamepost']);
        $lastname = $conn->real_escape_string($_POST['lastnamepost']);
        $phonenumber = $conn->real_escape_string($_POST['phonenumberpost']);
        $education = $conn->real_escape_string($_POST['institutionpost']);
        $facebook = $conn->real_escape_string($_POST['facebookpost']);
        $twitter = $conn->real_escape_string($_POST['twitterpost']);
        $instagram = $conn->real_escape_string($_POST['instagrampost']);

        $filename = $_FILES['uploadprofileimg']['name'];
        $filename = $ran.$filename;
        $filetmp = $_FILES['uploadprofileimg']['tmp_name'];
        $filetype = $_FILES['uploadprofileimg']['type'];
        move_uploaded_file($filetmp, "../userimages/".$filename);

    $insertuser = "INSERT INTO elmtree_users (user, email, pw, firstName, lastName, profileimg, learninginstitute, phone, facebook, twitter, instagram) VALUES
    ('$username', '$email', '$password', '$firstname', '$lastname', '$filename', '$education', '$phonenumber', '$facebook', '$twitter', '$instagram')";



        $resultinsert = $conn -> query($insertuser);

        if(!$resultinsert){

        echo $conn->error;
        }else{

        echo "<h2> Account successfully registered!</h2> 
                <h4>Please <a href='login.php'> <font class='text-success'><strong>login.</strong></font></a></h4><br><br><br><br>";

标签: phphtmlmysql

解决方案


就像每个人都指出的那样

制作自己的日志系统很棘手。它要求您执行其他步骤以确保内容安全。不仅对黑客,而且您作为数据库的管理员不应该有权查看您的客户密码PlainText大多数用户将在您的网站上使用与他们在您的网站上注册的电子邮件密码相同的密码。

更建议创建像 laravel 这样的登录工具,或者只是研究如何构建一个安全的登录系统,因为我们在您的代码中看到的内容很糟糕,不是在语法上,而是从安全的角度来看。

我知道您存储这样的密码,我不会在您的网站上注册。

无论如何,不​​仅如此,但你真的应该看看mysqli binding Or even,我更喜欢的是PDO_Mysql 你的代码不仅会更清晰易读,而且会将值直接绑定到 mysql 中的 aa 字段(无需使用real_escape_stringno更多的 )

现在来实际回答你的问题。

您可能应该直接在表单字段上制作某种javascript实时验证器。

REGXP然后在 PHP 方面,你可以用and做一个简单的条件preg_match()

看看https://regex101.com/r/SOgUIV/1这是一个验证 EMAIL 的正则表达式。有了这个链接,你应该对它进行一些实验,它不仅有文档,还有可能的量词等。

if(preg_match("/^((?!\.)[\w-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/i",trim($_POST['Email']))){
//What ever is in here will get process when $_POST['emailpost'] is valid.
}

已编辑----

正如一些用户在评论中指出的那样。你可能会更好地使用

if(filter_var($_POST['emailpost'],FILTER_VALIDATE_EMAIL){
  //What ever is in here will get process when $_POST['emailpost'] is valid
}

此外,如果您想确保用户有权访问电子邮件地址帐户,您还可以在users表格中添加两列isConfirmedConfirmationCode

当用户注册时,您创建一个unique代码并将其放入ConfirmationCode然后向用户发送一封电子邮件,其中包含“请单击以下链接以激活帐户 www.yourWebSite.com/confirmationPage.php?Code=$TheActualCodeYouCreatedForThatUser” 然后一次用户进入该页面,将字段更改isConfirmed为“1”或 true。

一旦出现在您的网站上,您将能够假设只有电子邮件isConfirmed才是真正的用户。


推荐阅读