Php 如何阻止联系人表单上的垃圾邮件-Silverstripe

Php 如何阻止联系人表单上的垃圾邮件-Silverstripe,php,recaptcha,silverstripe,spam-prevention,recaptcha-v3,Php,Recaptcha,Silverstripe,Spam Prevention,Recaptcha V3,我的网站上有一个联系表单,它使用reCAPTCHA版本2来帮助防止垃圾邮件。然而,还是有不少人通过了!我怎样才能阻止这些?任何帮助都将不胜感激 以下是ContactForm.php文件的内容: class ContactForm extends Form { public function __construct(Controller $controller, $name) { $emails = array( 'e-mail addr

我的网站上有一个联系表单,它使用
reCAPTCHA版本2
来帮助防止垃圾邮件。然而,还是有不少人通过了!我怎样才能阻止这些?任何帮助都将不胜感激

以下是ContactForm.php文件的内容:


class ContactForm extends Form {

    public function __construct(Controller $controller, $name)
    {
        $emails = array(
            'e-mail address here'=>'General',
            'e-mail address here'=>'Sales',
            'e-mail address here'=>'Technical Support',
        );

        $fields = FieldList::create(
            TextField::create('Name')->setAttribute('placeholder', 'Name'),
            EmailField::create('Email')->setAttribute('placeholder', 'Email'),
            DropdownField::create('Destination', 'Enquiry', $emails)->setEmptyString("(Department)"),
            TextareaField::create('Message')
                ->setAttribute('placeholder', 'Message')
                ->setAttribute('rows', 9)
                ->setAttribute('cols', 25),
            LiteralField::create('Captcha', '<div class="g-recaptcha" data-sitekey="MY KEY GOES HERE"></div>')
        );

        $actions = new FieldList(
            FormAction::create('Contact', 'Send')->setAttribute('disabled',true)
        );

        $validator = new RequiredFields('Name', 'Email', 'Message', 'Destination');
        //return Form::create($controller, $name, $fields, $actions, $validator);
        parent::__construct($controller, $name, $fields, $actions, $validator);
    }

    public function Contact($data)
    {
        $email = new Email();
        $email->setFrom($data['Email']);
        $email->setSubject("Website Enquiry");
        $email->setTo($data['Destination']);
        $messageBody = "<p><strong>Name:</strong> {$data['Name']}</p><p><strong>Message:</strong> {$data['Subject']}</p><p><strong>Message:</strong> {$data['Message']}</p>";
        $email->setBody($messageBody);
        $email->send();

        Controller::curr()->redirectBack();
    }

}
<?php

class ContactPage_Controller extends Page_Controller {

    public static $allowed_actions = array(
        'ContactForm'
    );

    public function ContactForm(){
        return ContactForm::create($this, 'ContactForm');
    }
}
<?php

class ContactPage extends Page
{

    private static $db = array();

    private static $has_one = array();

    private static $has_many = array();

    private static $summary_fields = array();

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();

        return $fields;
    }
}

类ContactForm扩展了表单{
公共函数构造(控制器$Controller,$name)
{
$emails=数组(
'此处的电子邮件地址'=>'常规',
'此处的电子邮件地址'=>'销售',
“此处的电子邮件地址”=>“技术支持”,
);
$fields=FieldList::create(
TextField::create('Name')->setAttribute('placeholder','Name'),
EmailField::create('Email')->setAttribute('placeholder','Email'),
DropdownField::create('Destination','inquiry',$emails)->setEmptyString('Department'),
TextareaField::创建('消息')
->setAttribute('占位符','消息')
->setAttribute('行',9)
->setAttribute('cols',25),
LiteralField::create('Captcha','')
);
$actions=新字段列表(
FormAction::create('Contact','Send')->setAttribute('disabled',true)
);
$validator=新的必填字段('Name'、'Email'、'Message'、'Destination');
//返回表单::创建($controller、$name、$fields、$actions、$validator);
父项::_构造($controller、$name、$fields、$actions、$validator);
}
公共职能联系人($data)
{
$email=新电子邮件();
$email->setFrom($data['email']);
$email->setSubject(“网站查询”);
$email->setTo($data['Destination']);
$messageBody=“名称:{$data['Name']}

消息:{$data['Subject']}

消息:{$data['Message']}

; $email->setBody($messageBody); $email->send(); 控制器::curr()->redirectBack(); } }
这是代码ContactPage_Controller.php文件:


class ContactForm extends Form {

    public function __construct(Controller $controller, $name)
    {
        $emails = array(
            'e-mail address here'=>'General',
            'e-mail address here'=>'Sales',
            'e-mail address here'=>'Technical Support',
        );

        $fields = FieldList::create(
            TextField::create('Name')->setAttribute('placeholder', 'Name'),
            EmailField::create('Email')->setAttribute('placeholder', 'Email'),
            DropdownField::create('Destination', 'Enquiry', $emails)->setEmptyString("(Department)"),
            TextareaField::create('Message')
                ->setAttribute('placeholder', 'Message')
                ->setAttribute('rows', 9)
                ->setAttribute('cols', 25),
            LiteralField::create('Captcha', '<div class="g-recaptcha" data-sitekey="MY KEY GOES HERE"></div>')
        );

        $actions = new FieldList(
            FormAction::create('Contact', 'Send')->setAttribute('disabled',true)
        );

        $validator = new RequiredFields('Name', 'Email', 'Message', 'Destination');
        //return Form::create($controller, $name, $fields, $actions, $validator);
        parent::__construct($controller, $name, $fields, $actions, $validator);
    }

    public function Contact($data)
    {
        $email = new Email();
        $email->setFrom($data['Email']);
        $email->setSubject("Website Enquiry");
        $email->setTo($data['Destination']);
        $messageBody = "<p><strong>Name:</strong> {$data['Name']}</p><p><strong>Message:</strong> {$data['Subject']}</p><p><strong>Message:</strong> {$data['Message']}</p>";
        $email->setBody($messageBody);
        $email->send();

        Controller::curr()->redirectBack();
    }

}
<?php

class ContactPage_Controller extends Page_Controller {

    public static $allowed_actions = array(
        'ContactForm'
    );

    public function ContactForm(){
        return ContactForm::create($this, 'ContactForm');
    }
}
<?php

class ContactPage extends Page
{

    private static $db = array();

    private static $has_one = array();

    private static $has_many = array();

    private static $summary_fields = array();

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();

        return $fields;
    }
}

我没有看到任何验证reCAPTCHA的代码。在我看来,这段代码所要做的就是添加reCAPTCHA表单字段。实际上,您必须阻止未通过reCAPTCHA测试的消息。哦,我看到您在按钮上设置了disabled,我想reCAPTCHA稍后将从输入中删除disabled标记。但这只是客户端。没有任何东西可以阻止用户手动打开开发工具和删除禁用的工具。或者是一个懒汉忽略了这一点。嗨@Zauberfisch。谢谢你的帮助。关于你的第一条信息,我实际上正在开发一个现有的网站,所以我不确定他们实现了什么。如果检查了reCAPTCHA消息,您知道在哪里可以找到代码吗?另外,关于“提交”按钮被禁用,您有一个很好的观点。。。你知道我怎样才能改变这一点,使spambots(或其他人)无法绕过这一点吗?许多情况下,您需要验证服务器端(php)是否正确填写了reCAPTCHA。因此,在您的情况下,在函数“Contact”中,或者更好的方法是一个自定义FormField类,它带有一个validate方法,然后由RequiredFields调用。但首先请更新您的问题,并提供更多详细信息:这是完整的ContactPage.php文件吗?你能包括任何相关的模板文件吗?谢谢@Zauberfisch。是的,你是对的,似乎没有包括“验证”代码?我不是PHP代码专家,所以我真的不知道需要包括什么?你能告诉我需要什么代码,或者在哪里检查代码是否已经存在吗?我现在将更新我的问题,以包含尽可能多的细节/代码!我没有看到任何验证reCAPTCHA的代码。在我看来,这段代码所要做的就是添加reCAPTCHA表单字段。实际上,您必须阻止未通过reCAPTCHA测试的消息。哦,我看到您在按钮上设置了disabled,我想reCAPTCHA稍后将从输入中删除disabled标记。但这只是客户端。没有任何东西可以阻止用户手动打开开发工具和删除禁用的工具。或者是一个懒汉忽略了这一点。嗨@Zauberfisch。谢谢你的帮助。关于你的第一条信息,我实际上正在开发一个现有的网站,所以我不确定他们实现了什么。如果检查了reCAPTCHA消息,您知道在哪里可以找到代码吗?另外,关于“提交”按钮被禁用,您有一个很好的观点。。。你知道我怎样才能改变这一点,使spambots(或其他人)无法绕过这一点吗?许多情况下,您需要验证服务器端(php)是否正确填写了reCAPTCHA。因此,在您的情况下,在函数“Contact”中,或者更好的方法是一个自定义FormField类,它带有一个validate方法,然后由RequiredFields调用。但首先请更新您的问题,并提供更多详细信息:这是完整的ContactPage.php文件吗?你能包括任何相关的模板文件吗?谢谢@Zauberfisch。是的,你是对的,似乎没有包括“验证”代码?我不是PHP代码专家,所以我真的不知道需要包括什么?你能告诉我需要什么代码,或者在哪里检查代码是否已经存在吗?我现在将更新我的问题,以包含尽可能多的细节/代码!