使用PHP对联系人表单POST进行服务器端验证,当密码应为true时,返回false
因此,基本上我有一个使用mail()函数发送的联系人表单,我实现了一些验证,如reCaptcha和patterns、蜜罐等。它工作得很好,但并不完美,而且客户挑剔,想要更少的垃圾邮件。现在,我正在尝试使用一个秘密哈希添加服务器端验证,如图所示 我想坚持一个事实,即没有添加使用PHP对联系人表单POST进行服务器端验证,当密码应为true时,返回false,php,html,validation,md5,contact-form-7,Php,Html,Validation,Md5,Contact Form 7,因此,基本上我有一个使用mail()函数发送的联系人表单,我实现了一些验证,如reCaptcha和patterns、蜜罐等。它工作得很好,但并不完美,而且客户挑剔,想要更少的垃圾邮件。现在,我正在尝试使用一个秘密哈希添加服务器端验证,如图所示 我想坚持一个事实,即没有添加verifyFormToken('form1')的条件,一切都可以完美地工作。我已经检查过了,当我删除第一个条件和最后一个条件时,函数返回true,因此这与服务器上的令牌有关。我正试图摆脱最后几封垃圾邮件,我认为这些垃圾邮件完全
verifyFormToken('form1')
的条件,一切都可以完美地工作。我已经检查过了,当我删除第一个条件和最后一个条件时,函数返回true,因此这与服务器上的令牌有关。我正试图摆脱最后几封垃圾邮件,我认为这些垃圾邮件完全是绕过我的表单/JS发送的,并且是直接发布的。我还检查了一些现有的问题,包括这个问题
需要_once'/php/recaptcha/src/autoload.php';
$siteKey='xxxxx';
$secret='xxxxxxxxx';
$name=$_POST['name'];
$email=$_POST['email'];
$telephone=$_POST['telephone'];
$company=$_POST['company'];
$message=$_POST['message'];
$recipient=”sales@xxxx.com";
$formcontent=“From:$name\n Phone:$telephone\n Company:$Company\n Message:$Message”;
$subject=“联系方式-报价申请-英语”;
$mailheader=“From:$email\r\n”;
$recaptcha=new\recaptcha\recaptcha($secret);
$gRecaptchaResponse=$_POST['g-recaptcha-response']//谷歌验证码发布数据
$remoteIp=$\u服务器['REMOTE\u ADDR']//获取用户的ip地址
$resp=$recaptcha->verify($gRecaptchaResponse,$remoteIp)//验证验证码的方法
会话_start();
函数generateFormToken($form){
$\会话[$form.''令牌']=md5(uniqid(microtime(),true));
返回$\u会话[$form.''u令牌'];
}
函数verifyFormToken($form){
if(!isset($_SESSION[$form.''u token']){return false;}
如果(!isset($_POST['token']){return false;}
if($\u SESSION[$form.''u token']!=$\u POST['token']){return false;}
返回true;
}
如果(isset($\u POST['submit\u client'])){
$newToken=generateFormToken('form1');
$recaptcha=new\recaptcha\recaptcha($secret);
$gRecaptchaResponse=$\u POST['g-recaptcha-response'];//谷歌验证码POST数据
$remoteIp=$\u服务器['REMOTE\u ADDR'];//获取用户的ip
$resp=$recaptcha->verify($gRecaptchaResponse,$remoteIp);//验证验证码的方法
如果($resp->issucess())&(!empty($name))&($preg\u match(“/^[a-zA-Z]*$/”,$name))&($empty($telephone))&(&($preg\u match(“/^[0-9-+\s()]*$/”,$telephone))&(!empty($email))&(preg\u match(/^[a-z0-9\+-u\+-9\+-u\+-])([a-z0-z0-9+-9]+-6]),[a-z0+-]{
如果(verifyFormToken('form1')){
邮件($recipient,$subject,$formcontent,$mailheader)或死亡(“Error!”);
echo'提醒(“谢谢,我们很快就会联系的!”);
}}
否则{
死(“错误!”);
}
}
报价请求
有两个错误:
第一个错误是您需要一个提交按钮来发送POST变量“submit\u client”
因为你正在检查它
第二个错误是,您必须在验证之后生成令牌,以便在发送每篇文章之前不会对其进行修改
需要_once'/php/recaptcha/src/autoload.php';
$siteKey='xxxxx';
$secret='xxxxxxxxx';
$name=$_POST['name'];
$email=$_POST['email'];
$telephone=$_POST['telephone'];
$company=$_POST['company'];
$message=$_POST['message'];
$recipient=”sales@oxoinnovation.com";
$formcontent=“From:$name\n Phone:$telephone\n Company:$Company\n Message:$Message”;
$subject=“联系方式-报价申请-英语”;
$mailheader=“From:$email\r\n”;
$recaptcha=new\recaptcha\recaptcha($secret);
$gRecaptchaResponse=$_POST['g-recaptcha-response']//谷歌验证码发布数据
$remoteIp=$\u服务器['REMOTE\u ADDR']//获取用户的ip地址
$resp=$recaptcha->verify($gRecaptchaResponse,$remoteIp)//验证验证码的方法
会话_start();
函数generateFormToken($form){
$\会话[$form.''令牌']=md5(uniqid(microtime(),true));
返回$\u会话[$form.''u令牌'];
}
函数verifyFormToken($form){
if(!isset($_SESSION[$form.''u token']){return false;}
如果(!isset($_POST['token']){return false;}
if($\u SESSION[$form.''u token']!=$\u POST['token']){return false;}
返回true;
}
如果(isset($\u POST['submit\u client'])){
/*
把这个拿出来
*/
//$newToken=generateFormToken('form1');
$recaptcha=new\recaptcha\recaptcha($secret);
$gRecaptchaResponse=$\u POST['g-recaptcha-response'];//谷歌验证码POST数据
$remoteIp=$\u服务器['REMOTE\u ADDR'];//获取用户的ip
$resp=$recaptcha->verify($gRecaptchaResponse,$remoteIp);//验证验证码的方法
如果($resp->issucess())&(!empty($name))&($preg\u match(“/^[a-zA-Z]*$/”,$name))&($empty($telephone))&(&($preg\u match(“/^[0-9-+\s()]*$/”,$telephone))&(!empty($email))&(preg\u match(/^[a-z0-9\+-u\+-9\+-u\+-])([a-z0-z0-9+-9]+-6]),[a-z0+-]{
如果(verifyFormToken('form1')){
邮件($recipient,$subject,$formcontent,$mailheader)或死亡(“Error!”);
echo'提醒(“谢谢,我们很快就会联系的!”);
}}
否则{
死(“错误!”);
}
}
/*
把它放在这里
*/
$newToken=generateFormToken('form1');
您需要一个发送按钮;-)当然了,哈哈,我在演示时脱光了它。对不起,我不清楚。但你的#2可能正是我的问题。我将确认并标记为已接受,如果有效,如果您想删除该问题,则可以取消接受答案并删除