php - 限制每秒/分钟发送联系表单电子邮件

标签 php javascript jquery

我最近制作了一个作品集网站并将其放在 000webhost.com 上。今天,当我登录时,该帐户被暂停,因为有人在一分钟内通过我的联系表单发送了超过 70 封电子邮件 - 这是网络托管不允许的。

我正在寻找某种方法来阻止这种情况再次发生。我使用 php 和 javascript/jquery 进行表单验证。

这是我当前的 php 验证代码。

$firstName = $_POST["firstName"];
$lastName = $_POST["lastName"];
$email = $_POST["email"];
$message = $_POST["message"];
$to = "fox.team001@gmail.com";
$subject = $firstName . " " . $lastName;
$headers = "From: " .$firstName . " " . $lastName . "\r\nReply-To:" . $email;

 if(validateEmail($email)){
     @mail($to , $subject , $message , $headers);

 }

validate($firstName , $lastName , $email , $message);
function validate ($firstName , $lastName , $email , $message){
    if(!empty($firstName) && !empty($lastName)  && !empty($email) && !empty($message)){
        if(validateEmail($email)){
            header("refresh:5; url=http://www.foxteam.net");
        }else{
           header("refresh:0; url=http://www.foxteam.net/contact.php");
        }
    }else{
       header("refresh:0; url=http://www.foxteam.net/contact.php");
    }
}   
function validateEmail($email) {
    $pattern = "^[A-Za-z0-9_\-\.]+\@[A-Za-z0-9_\-]+\.[A-Za-z0-9]+$";
    if(preg_match("/{$pattern}/", $email)) {
        return true;
    }else{
        return false;
    }
}

谁能告诉我如何阻止垃圾邮件发送者发送垃圾邮件?

最佳答案

完全阻止垃圾邮件通过联系表单发送是非常困难的,但是您可以使用多种方法来减少垃圾邮件,其中包括:

  1. 使用蜜 jar - 其背后的想法是在表单上有一个带有通用名称的隐藏字段(例如 answer)(如果该字段中有任何内容) ,那么就不用费心发送电子邮件了(但仍然告诉用户电子邮件已发送) - 这显然是垃圾邮件,因为没有其他方法可以填写该字段。
  2. IP 限制 - 将用户的 IP 地址存储在某处,并限制每个 IP 地址每分钟/小时可以发送的电子邮件数量。
  3. 字词过滤 - 列出字词列表,如果发现任何字词,则不要发送电子邮件(通常是诸如伟哥阴茎 等)。
  4. 验证码,对我来说,这是最后的手段。如果您确实使用一个,请实现 recaptcha ,它是迄今为止最好的一个。但正如我所说,将此作为最后的手段,您可以使用许多其他方法,而不会打扰您网站的用户。

关于php - 限制每秒/分钟发送联系表单电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882968/

相关文章:

javascript - ajax 无法在 codeigniter 中工作,无法在 Controller 中发布或启动该方法

php - 将表单请求文件与 Controller 分开时,如何在 laravel api 中显示验证错误

javascript - 文字溢出

javascript - URL 使得正则表达式测试卡住

php - Laravel 在 leftjoin 处分页

php - 根据提交的 ID 显示多个项目?

javascript - 如何将INPUT的值保存在变量中?

javascript - 从 ES6 中的函数表达式访问类作用域

javascript - 动态地将 div 的宽度设为 4 列表中表的前 3 列?

javascript - 使用 JQuery 或 Javascript,如何绑定(bind)点击函数来控制元素/div 的滚动?