短信验证码轰炸解决方案二(防止海外ip、限制ip、限制手机号次数解决)

本文主要是介绍短信验证码轰炸解决方案二(防止海外ip、限制ip、限制手机号次数解决),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 检查IP是否在黑名单中,如果是则终止访问。
2. 检查手机号是否在黑名单中,如果是则终止访问。
3. 对于同一个IP,限制访问次数,如果超过限制则终止访问。
4. 对于同一个手机号,限制访问次数,如果超过限制则终止访问。
5. 检查IP是否为海外IP,如果是则终止访问。
6. 如果通过所有限制条件,调用send函数发送短信。

apis.map.qq.com

 腾讯地图官网

腾讯位置服务 - 立足生态,连接未来

<?php
session_start();// 黑名单IP列表
$blacklistIP = ['127.0.0.1'];// 黑名单手机号列表
$blacklistTel = ['18888888888'];// IP访问限制次数
$limitIP = 10;// 手机号访问限制次数
$limitTel = 10;// 检查IP是否在黑名单中
$ip = getip();
if (in_array($ip, $blacklistIP)) {die('非法访问');
}// 检查手机号是否在黑名单中
$tel = $_GET['tel'];
if (in_array($tel, $blacklistTel)) {die('非法访问!');
}// 检查IP访问次数
if (isset($_SESSION['ipNum']) && $_SESSION['ipNum'] > $limitIP - 1) {die('访问太频繁!');
}// 检查手机号访问次数
if (isset($_SESSION['telNum']) && $_SESSION['telNum'] > $limitTel - 1) {die('访问太频繁!');
}// 检查海外IP
if (!iszgip($ip)) {die('访问太频繁!!!');
}// 发送短信
send();function send()
{if (isset($_SESSION['ipNum'])) {++$_SESSION['ipNum'];} else {$_SESSION['ipNum'] = 1;}if (isset($_SESSION['telNum'])) {++$_SESSION['telNum'];} else {$_SESSION['telNum'] = 1;}echo '发送成功';
}function getip()
{static $ip = '';if (isset($_SERVER['REMOTE_ADDR'])) {$ip = $_SERVER['REMOTE_ADDR'];}if (isset($_SERVER['HTTP_CDN_SRC_IP'])) {$ip = $_SERVER['HTTP_CDN_SRC_IP'];} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {$ip = $_SERVER['HTTP_CLIENT_IP'];} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {foreach ($matches[0] as $xip) {if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {$ip = $xip;break;}}}if (preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $ip)) {return $ip;} else {return '127.0.0.1';}
}function iszgip($ip)
{$key = 'PHYBZ-UOXWV-LUIPZ-DSADSA-SDSDD-ADSADA';$url = "https://apis.map.qq.com/ws/location/v1/ip?ip=" . $ip . "&key=" . $key;$res = file_get_contents($url);if ($res) {$data = json_decode($res, true);if (isset($data['result']['ad_info']['nation']) && $data['result']['ad_info']['nation'] != "中国") {return false;}}return true;
}
?>

这段代码实现了一些简单的访问限制,可以提供一定程度的防护。以下是该代码的优点和缺点:

优点:
1. 黑名单功能:可以将指定的IP地址或手机号添加到黑名单,从而禁止其访问。
2. 访问次数限制:对于同一个IP地址或手机号,可以限制其访问次数,避免频繁访问或滥用。
3. 检查海外IP:通过调用腾讯地图API,可以判断访问者的IP是否属于中国境内,从而禁止海外IP的访问。

缺点:
1. 黑名单功能仅针对预先设置的IP地址和手机号,无法应对新出现的恶意IP或手机号。
2. 访问次数限制使用了基于Session的计数器,这意味着计数器是与用户的Session绑定的。如果用户清除了Session或使用多个不同的会话,该限制将无效。
3. 检查海外IP功能依赖于腾讯地图API的可用性和准确性。如果API出现问题或返回的地理位置信息不准确,可能会导致错误的判断结果。

请注意,这段代码仅提供了一种简单的防护措施,无法完全保护应用程序免受所有攻击。在实际应用中,建议结合其他安全措施,如使用防火墙、Web应用程序防护(WAF)等来增强安全性。此外,及时更新代码和及时监测安全事件也是保护应用程序安全的重要措施。

这篇关于短信验证码轰炸解决方案二(防止海外ip、限制ip、限制手机号次数解决)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/457340

相关文章

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499