我的某些“朋友”通过按住刷新键在我的网站上乱搞。这使得他们的内容的网页浏览量不切实际地增加,并且还增加了服务器负载到PHP停止运行的点。
我希望有没有办法防止这种强烈的刷新(其中一个在1 1/2小时内得到3万个请求)使用PHP或JavaScript?
答案 0 :(得分:3)
您可以始终计算用户从某个IP地址发出的请求数量,并在达到某个限制后停止返回除“未授权”之外的所有请求。
这是一个非常简单的解决方案,但可能会完成这项工作。您可以按请求/时间间隔或两分钟内不超过100页的请求将其剪切掉。然后,您可以禁止IP,或者在指定的时间内返回错误代码。指定的时间可能是5小时的硬编码,或者你可以等待他们的请求/时间间隔有机地下降。
function isIpBlocked($ip)
{
//do mysql query to check if column is true
}
function shouldIpBeBlocked($ip)
{
//do mysql query to check if number of request over a certain interval is too high
}
if(isIpBlocked($ip))
{
header('HTTP/1.0 401 Unauthorized');
}
else
{
if(shouldUserBeBlocked($ip))
{
//do sql update/insert to indicate user is blocked in ip_block table or something
header('HTTP/1.0 401 Unauthorized');
}
else
{
//update number of requests from this ip address INSERT INTO ip_history (ip, ...) VALUE (:ip, ....);
//do your web site code
//maybe do a mysql query to clean out ip_history table for requests that happened a long time ago and check to see if you should unban people
}
}
您将该代码放在网站的每个页面上,这将确保用户没有违反您的预定安全规则。
答案 1 :(得分:1)
为此使用fail2ban之类的工具。
您可以创建一个规则来阻止请求者的IP地址,例如他们在给定时间内向同一个URL发出过多请求。您可以配置阻止它们的时间跨度。
优点是这种阻塞方式已经在网络级别发生,从而降低了服务器负载。
答案 2 :(得分:1)