先说背景:机器不断的发送请求或者恶意提交,会给服务器造成很大压力;针对这种攻击
最优的策略是判断提交次数,产生动态验证码
,即判断ip规定时间内重复发送达到N次弹出验证码
。下面是小拽在实践过程中一个简单的识别ip,利用session记录和防御的过程。
识别和校验ip
过程如下;
识别ip
ip属于白名单直接通过[白名单策略:内网ip+指定ip表]
利用session存储ip的请求时间戳
校验规定时间内ip的请求次数
采取相应的措施
<code>/** * 获取和校验ip;同时防止短时间内多次提交 * * @notice :弹出验证码,需要替换掉echo $echo_str 即可。 * @return string :返回校验成功的ip */ protected function getAndCheckIP() { // 获取环境ip if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; // check 环境ip if (!$this->isWhiteList($ip)) { $echo_str = "提交过于频繁,请稍后再试!"; // 构建ip的时间栈数据 if (!is_array($_SESSION[$ip])) { $_SESSION[$ip] = array(); } if (isset($_SESSION[$ip][0])) { $_SESSION[$ip][] = time(); // session 保存时间为6小时。清理session $post_interval_first = time() - $_SESSION[$ip][0]; if ($post_interval_first > 21600) { $_SESSION[$ip] = array(); } // 两次提交小于1s,禁止提交 $post_interval_pre = time() - $_SESSION[$ip][count($_SESSION[$ip]) - 3]; if ($post_interval_pre </code>
白名单策略
白名单策略采用:内网ip放行和特定ip放行
<code>/** * 检验是否存在于白名单中 * * @param $ip :校验的ip * @return bool :校验结果 */ function isWhiteList($ip){ /** * 内网ip默认全部存在于白名单中 */ if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)){ return true; } // 是否在写死的whitelist 里面 return in_array($ip,$this->_WHTTE_LIST); } </code>
防攻击策略
小拽采用的比较简单的策略,如上面代码,实际过程中可以结合业务需求。
1s内禁止重复提交
5s内提交上限3次
60s内提交上限5次
6小时内提交上限10次
【转载请注明:机器多次恶意提交攻击简单防范 | 靠谱崔小拽 】
以上就介绍了机器多次恶意提交攻击简单防范,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

PHP在现代编程中仍然是一个强大且广泛使用的工具,尤其在web开发领域。1)PHP易用且与数据库集成无缝,是许多开发者的首选。2)它支持动态内容生成和面向对象编程,适合快速创建和维护网站。3)PHP的性能可以通过缓存和优化数据库查询来提升,其广泛的社区和丰富生态系统使其在当今技术栈中仍具重要地位。

在PHP中,弱引用是通过WeakReference类实现的,不会阻止垃圾回收器回收对象。弱引用适用于缓存系统和事件监听器等场景,需注意其不能保证对象存活,且垃圾回收可能延迟。

\_\_invoke方法允许对象像函数一样被调用。1.定义\_\_invoke方法使对象可被调用。2.使用$obj(...)语法时,PHP会执行\_\_invoke方法。3.适用于日志记录和计算器等场景,提高代码灵活性和可读性。

Fibers在PHP8.1中引入,提升了并发处理能力。1)Fibers是一种轻量级的并发模型,类似于协程。2)它们允许开发者手动控制任务的执行流,适合处理I/O密集型任务。3)使用Fibers可以编写更高效、响应性更强的代码。

PHP社区提供了丰富的资源和支持,帮助开发者成长。1)资源包括官方文档、教程、博客和开源项目如Laravel和Symfony。2)支持可以通过StackOverflow、Reddit和Slack频道获得。3)开发动态可以通过关注RFC了解。4)融入社区可以通过积极参与、贡献代码和学习分享来实现。

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具