Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP对联系人表单POST进行服务器端验证,当密码应为true时,返回false_Php_Html_Validation_Md5_Contact Form 7 - Fatal编程技术网

使用PHP对联系人表单POST进行服务器端验证,当密码应为true时,返回false

使用PHP对联系人表单POST进行服务器端验证,当密码应为true时,返回false,php,html,validation,md5,contact-form-7,Php,Html,Validation,Md5,Contact Form 7,因此,基本上我有一个使用mail()函数发送的联系人表单,我实现了一些验证,如reCaptcha和patterns、蜜罐等。它工作得很好,但并不完美,而且客户挑剔,想要更少的垃圾邮件。现在,我正在尝试使用一个秘密哈希添加服务器端验证,如图所示 我想坚持一个事实,即没有添加verifyFormToken('form1')的条件,一切都可以完美地工作。我已经检查过了,当我删除第一个条件和最后一个条件时,函数返回true,因此这与服务器上的令牌有关。我正试图摆脱最后几封垃圾邮件,我认为这些垃圾邮件完全

因此,基本上我有一个使用mail()函数发送的联系人表单,我实现了一些验证,如reCaptcha和patterns、蜜罐等。它工作得很好,但并不完美,而且客户挑剔,想要更少的垃圾邮件。现在,我正在尝试使用一个秘密哈希添加服务器端验证,如图所示

我想坚持一个事实,即没有添加
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可能正是我的问题。我将确认并标记为已接受,如果有效,如果您想删除该问题,则可以取消接受答案并删除