如何防止使用php自动多次点击网站?

Posted

技术标签:

【中文标题】如何防止使用php自动多次点击网站?【英文标题】:How to prevent automated multiple hits to website with php? 【发布时间】:2013-12-07 08:28:58 【问题描述】:

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

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

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

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

【问题讨论】:

不,不能使用验证码 可能检查一下每次提交的邮箱地址? 电子邮件来自我的数据库 我猜在php端你可以保存IP地址。然后,每当调用该页面时,请检查它是否出现过 次。然后每天清除日志。这样,您可以每天(或您选择的任何时间段)仅允许从同一 IP 发送 封电子邮件。不是特别优雅,但如果你不能使用 CAPTCHA,应该可以工作。 【参考方案1】:

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

在客户端,首先创建一个标志来检查表单是否通过 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,则使其为真

使用此过程可以防止出现问题。

希望对你有帮助

【讨论】:

以上是关于如何防止使用php自动多次点击网站?的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax如何防止多次提交

Android 如何判断多次点击

Android如何防止快速点击造成多次事件

php如何防止网站内容被采集

防止多次执行 JavaScript 函数

如何防止多次快速点击 UITableView 的编辑按钮导致应用程序崩溃?