php - 想要阻止用户在表单中输入无效的电子邮件地址
问题描述
我希望能够运行一个 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>";
解决方案
就像每个人都指出的那样
制作自己的日志系统很棘手。它要求您执行其他步骤以确保内容安全。不仅对黑客,而且您作为数据库的管理员不应该有权查看您的客户密码PlainText
大多数用户将在您的网站上使用与他们在您的网站上注册的电子邮件密码相同的密码。
更建议创建像 laravel 这样的登录工具,或者只是研究如何构建一个安全的登录系统,因为我们在您的代码中看到的内容很糟糕,不是在语法上,而是从安全的角度来看。
我知道您存储这样的密码,我不会在您的网站上注册。
无论如何,不仅如此,但你真的应该看看mysqli
binding
Or even,我更喜欢的是PDO_Mysql
你的代码不仅会更清晰易读,而且会将值直接绑定到 mysql 中的 aa 字段(无需使用real_escape_string
no更多的 )
现在来实际回答你的问题。
您可能应该直接在表单字段上制作某种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
表格中添加两列isConfirmed
,ConfirmationCode
当用户注册时,您创建一个unique
代码并将其放入ConfirmationCode
然后向用户发送一封电子邮件,其中包含“请单击以下链接以激活帐户 www.yourWebSite.com/confirmationPage.php?Code=$TheActualCodeYouCreatedForThatUser” 然后一次用户进入该页面,将字段更改isConfirmed
为“1”或 true。
一旦出现在您的网站上,您将能够假设只有电子邮件isConfirmed
才是真正的用户。
推荐阅读
- dart - Flutter Http Request:响应状态码无效
- c# - “UnityEngine.RuntimePlatform.OSXDashboardPlayer”已过时
- java - ListView / SimpleAdapter 不刷新 - Android
- java - 管理 JPA 实体的 Spring 状态机
- java - 在 AWS lambda 中使用 Dagger 并定期刷新模块
- scala - Spark-Scala build.sbt libraryDependencies UnresolvedDependency
- json - JSON 对象解析但忽略集合中的第一项
- c++ - 如何在构建 clang 插件时绕过依赖构建?
- reactjs - 反应输入光标位置移动到最后?
- javascript - 根据某些字母显示字符串