【问题标题】:How can I create a way to temporarily block IPs from accessing a form too many times?如何创建一种方法来临时阻止 IP 访问表单太多次?
【发布时间】:2012-05-04 00:13:34
【问题描述】:

我正在寻找想法/方法来暂时阻止某个 ip 多次访问我的网站/表单上的网页。

限制应该是这样的,在 1 天内对网页/表单不超过 5 次,否则它应该显示一条简单的短信,例如“来自您的 ip 的请求太多,请稍后再试,如果您觉得这样有错,请联系我们”。

我希望通过 PHP 做一些简单的事情,但我对任何事情都持开放态度。我不太确定如何使用数据库和 cookie,但我确信我可以阅读它。

【问题讨论】:

  • 您使用什么形式的持久性?您将需要在服务器端存储从页面加载到页面加载的一些状态(cookie 并不能真正解决问题 - 清除缓存将使用户重新进入)。
  • 你可以,这很容易解决,不是对每个人都有效,也没有真正取得太大的成就,那么你到底想解决什么问题呢?
  • 啊,我并没有真正使用任何东西。没错,但它可能会阻止简单的机器人?
  • 使用 robots.txt 文件来阻止好机器人,没有可靠的方法来阻止不好的机器人,这是 www 的本质。

标签: php forms access-control


【解决方案1】:

简单快捷的解决方案:

  1. 创建表id, url, user_ip, request_number, date
  2. 通过 url、date、user_ip 和 request_number 签入 db>5 并阻止或不阻止此请求。 如果不使用INSERT ... ON DUPLICATE KEY UPDATE request_number = request_number+1

您也可以在网络服务器端使用阻塞。例如,nginx 允许添加 ips 以进行动态拒绝。

【讨论】:

    【解决方案2】:

    我会设置带有时间戳和提交次数的 cookie,并根据当前时间检查时间戳。

    虽然可以清除 Cookie,因此您可能希望通过在 mysql 数据库中存储 IP 和时间戳来备份它。并在访问时根据当前时间和提交次数检查数据库中的 ip。

    【讨论】:

    • 啊好吧,听起来不错。我将如何去做,设置 cookie 并在 mysql 数据库中输入数据(对不起,我真的很陌生)?我的表单方法是 POST 并且相对简单,如果有帮助的话。
    • 您保护表单不被机器人发布?这是一个不同的问题,添加验证码
    【解决方案3】:

    使用包含 2 列 IPAddress 和 Date 的表

    检查一下

    SELECT COUNT(\*) c FROM table WHERE ipaddress = 'ipaddress' AND ipdate = 'date("Y-m-d")'
    
    if c greater then 4, 
    
    <\? die("your message"); ?>
    
    else
    insert into table VALUES ('ipadress', 'date(Y-m-d)');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 2011-09-23
      • 1970-01-01
      相关资源
      最近更新 更多