1

我在用户填写消息的页面上有一个表单,当单击“发送”按钮时,它通过 ajax 发送到 php 脚本。那里通过 mail() 消息被发送到特定的电子邮件地址。

我想避免恶意用户在短时间内发送 1000 封电子邮件的情况。如果我错了,请告诉我,但这将是一种 DOS 攻击,这可能会由网络服务器本身处理。我在共享主机上,我会假设大型主机提供商会限制这种行为,因此在我的 php 脚本出现之前,对我的页面的多次自动点击会以某种方式被阻止。

如果不是这种情况,那么最好的预防方法是什么?我仍然不能 100% 确定我的主机会做这部分工作,并且想知道我可以从 PHP 本身做些什么来帮助?

编辑:我正在考虑将时间戳存储在 Session 变量中,但是如果有人关闭了 cookie,那么会话将不存在。是否可以检查浏览器中的cookies是否打开,如果不是简单地忽略请求?如果 cookie 处于打开状态,则将时间戳存储在会话中,并与每个请求进行比较,例如在发送电子邮件之前经过 5 秒?

4

1 回答 1

0

您可以从客户端和服务器双方防止这种情况

在客户端,首先创建一个标志来检查表单是否通过 Ajax 调用提交

var flag = false; // name for flag var according to your requirement

//check if for is sent or not

if(!flag){
   $.ajax({
    //set properties 
    .....
    success: function (response){
       // set flag as true
       flag = true;
    }
   });
} 

除非用户刷新页面,否则它将阻止单个用户多次提交

现在假设用户尝试刷新页面并多次提交表单

然后在服务器端在数据库中为用户电子邮件创建一个标志变量

e.g subscription table

    user_email { true , false } default false //for each email id which sent via that form

如果在此表中未找到用户电子邮件 ID,则使其为真

使用此过程可以防止您的问题。

希望对你有帮助

于 2013-11-22T13:03:39.390 回答