新睿云

> DDoS高防云服务器 > 如何通过PHP进行简单的DDoS防御

如何通过PHP进行简单的DDoS防御

作者/来源:新睿云小编 发布时间:2019-08-08

当一个人的网站第一次遇到DDOS时候,其个人确实十分慌张,内心也会引起震动。“居安思危”是十分有必要的,我们需要积累一些相关防御DDoS的知识。

DDoS分布拒绝攻击,简略的来说DDoS主要针对DDoS网络层,IP-TCP-HTTP,DDoS应用层进行攻击。当请求流量远远大于服务器的处理能力,使服务器的负载超过主机的配额资源因此站点就无法进行访问。

如果您的服务器遭遇了DDoS,那我在这里也要为您庆贺一番,这证明您的业务达到了一定的高度。说话说的好:“不遭人妒是庸才。”下面笔者为大家介绍两种类型的DDoS,并且可以通过PHP和JavaScript就能有效处理。

php

机器人进行请求访问

其实我们发现很多站点都加了验证码,其任务是尽可能过滤掉对站点的所有不必要的请求。因为机器人比较愚蠢,它们并不会识别验证码!同时还能保证正常用户能够访问该站点并且不会对DDoS保护机制感到不舒服。

机器人有集中类型,第一种是搜索引擎的蜘蛛,如果我们建站搜索引擎的蜘蛛来爬行肯定是好事。另一种则是有害的机器人,它们爬行您的网站可能是为了弄清您的网站目录,以此来寻找DDoS攻击的机会。在.htaccess中过滤掉无用的机器人,有用的机器人不予拦截。

不允许有害机器人到后端,我们可以减少服务器上的负载。

有害机器人可以分为两种类型:智能机器人(理解cookie和javascript)和非智能机器人。有一种观点认为没有DOS机器人可以理解javascript,但这是针对严重的网络DDoS攻击。在我们的条件下,即使是过度活跃的匿名蜘蛛也会正式成为ddos-bot,必须予以抵消。

我们如何写PHP后端代码给与保护呢?

我们不会给出保护代码,它很简单。在PHP上几十行;比这篇文章更短更简单。我们来描述逻辑,我们将向客户端写一个cookie(检查cookie的方法甚至用于防御强大的DDoS攻击)。使用任何名称和任何内容,您可以使用站点已设置的站点。

为简单起见,我们假设该站点有一个入口点,我们在那里嵌入了ddos-shield。立即检查我们的cookie的查询:如果是 - 我们当然跳到该网站。如果没有,则将对ip和用户代理作为单独的文件写入单独的目录/疑似。该文件名为ip-ua.txt,其中user-agent为dechex(crc32($ _ SERVER [“HTTP_USER_AGENT”]))只是用户代理的简短哈希。

在文件本身我们通过分离查询时间,查询页面,用户代理来编写,你仍然可以使用Sypex Geo或注册maxmind.com,并且可以免费访问他们的geoip数据库五天 - 通过ip他们发布一个地理位置,它也在这个文件中。

如果已存在具有相同名称ip-ua.txt的文件,则将新请求的所有此信息添加到文件末尾。

php2

另一点是我们网站的AJAX请求。如果是,那么它们也必须无条件地跳过,由它们的标签定义。机器人也会碰到它们的可能性很小。

现在是缺失的步骤 - 在我们编写或附加ip-ua.txt之前,我们检查来自此ip的请求已经来了,而且,我们不注意User-Agent:

count(glob(__ DIR __。“/ suspected/$ip-*.txt”))> 0

关键是我们给每个ip一次获取cookie的机会。如果第二次没有它,那么这种不平等就会起作用,我们将客户端重定向到一个单独的页面check-human.php,在那里他将在Google Recyclers的帮助下使用展示和车辆进行图灵测试。如果它没有通过 - 再见(再次回顾),如果通过 - 在另一个特殊目录/白名单中创建文件ip-ua.txt。在开始时,连同验证cookie,我们还检查我们/白名单中ip-ua对的命中 - 当然,这些也是我们跳过的。有了这个策略,我们就可以在网站上为那些在浏览器中禁用了cookie并启用了javascript的人提供机会,反之亦然 - javascript被禁用,但cookie正在运行。

原则上,就是这样。大量机器人被过滤,现在很聪明。对于智能和方法已经是智能的 - 打开目录/疑似,按大小排序文件。在上面,最大的是数十和数百千字节的持续尝试通过我们。我们打开并查看,我们确信这实际上是一个机器人。查询时间,查询周期,查询页面,用户代理更改,通常很容易看到,一切都在你面前眼睛。原则上,您可以选择所有文件,例如10次不成功的尝试,并通过.htaccess将它们发送到禁令。但它并不好,最好将它们发送到验证码,毕竟,有几个人通过一个ip进入互联网。

热门标签
免费领云产品

免费用

立即领取
联系客服
在线客服   
反馈意见
返回顶部
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待