如何创建一种方法来临时阻止 IP 多次访问表单?

发布于 2024-11-30 23:07:27 字数 214 浏览 1 评论 0原文

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

限制应该是这样的,一天内访问网页/表单的次数不得超过 5 次,否则它应该显示一条简单的文本消息,例如“来自您的 IP 的请求太多,请稍后再试,如果您觉得这是错误的,请联系我们”。

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

I'm looking for ideas/ways to temporarily block an ip from accessing a webpage on my site/form many times.

The limit should be something like, no more than 5 times in 1 day to the webpage/form otherwise it should show a simple text message like "Too many request from your ip, please try again later, if you feel like this is wrong, please contact us".

I hope for something simple via PHP but I'm open to anything really. I'm not really sure how to work with databases and cookies but I'm sure I can read up on it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

季末如歌 2024-12-07 23:07:27

简单快捷的解决方案:

  1. 创建表id,url,user_ip,request_number,date
  2. 通过url,date,user_ip和request_number> 5检查数据库并阻止或不阻止该请求。
    如果不使用 INSERT ... ON DUPLICATE KEY UPDATE request_number = request_number+1

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

Simple and quick solution :

  1. Create table id, url, user_ip, request_number, date
  2. Check in db by url,date,user_ip and request_number>5 and block or not this request.
    If not use INSERT ... ON DUPLICATE KEY UPDATE request_number = request_number+1

Also you can use blocking on web-server side. For example, nginx allows to add ips for denying on fly.

木有鱼丸 2024-12-07 23:07:27

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

不过 Cookie 可以被清除,因此您可能需要通过在 mysql 数据库中存储 IP 和时间戳来进行备份。在访问时,根据当前时间和提交次数检查数据库中的 IP。

I'd set cookies with a timestamp and number of submits, and check the timestamp against the current time.

Cookies can be cleared though, so you might want to back it up with storing IP's and timestamps in a mysql db. And on visit, check the ip in the db against current time and number of submits.

木有鱼丸 2024-12-07 23:07:27

使用包含 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)');

Use a table with 2 columns IPAddress and Date

check it like

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)');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文