PHP短信接口防刷防轰炸多重解决方案三(可正式使用)

短信接口盗刷轰炸:指的是黑客利用非法手段获取短信接口的访问权限,然后使用该接口发送大量垃圾短信给目标用户

短信验证码轰炸解决方案一(验证码类解决)-CSDN博客

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

PHP短信接口防刷防轰炸多重解决方案如下:

下面用到检查ip方法key可以需要去地图官网获取

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

这段代码是一个名为SecurityCheck的类,用于进行安全检查。该类包含了多个私有属性和方法,用于对用户的手机号和IP地址进行检查。

该类的主要方法是checkAll(),它接收一个手机号作为参数,并依次调用其他的私有方法来进行不同的检查。checkAll()方法返回一个JSON格式的结果,包含了每个检查的状态和消息,以及整体的状态。

具体的检查步骤如下:

  • 1. 防止Linux服务器访问:检查User-Agent头部,如果包含"Linux"字样,表示是Linux服务器访问,视为非法访问。
  • 2. 手机与IP黑名单:检查手机号和IP地址是否在黑名单中,如果在黑名单中,则视为非法访问。
  • 3. 手机与IP限制次数:检查手机号和IP地址的访问次数是否超过设定的限制次数,如果超过限制次数,则视为访问太频繁。
  • 4. 防止国外IP:检查IP地址是否为国内IP,如果不是国内IP,则视为非法访问。
  • 5.做好错误日志记录
  • 6、补充短信服务商后台限制每天发送次数

session_start();
class SecurityCheck {private $backTel=['18888888888'];//黑名单手机号列表private $backIp=['127.0.0.0'];//黑名单ip列表private $sysMsg=[];       //异常信息,系统内部日志private $logPath='log/';  //日志目录private $limitIP = 10;     //限制ip次数private $limitTel = 10;   //限制手机号次数public function checkAll($tel) {$this->sysMsg[]='校验手机:'.$tel.' ip:'.$this->getIp();$result = [];//1、防止linux服务器访问$result['checkUserAgent'] = $this->checkUserAgent();//2、手机与ip黑名单$result['checkBlacklist'] = $this->checkBlacklist($tel);//3、手机与ip限制次数$result['checkLimit'] = $this->checkLimit();//4、防止国外ip$result['checkOverseasIP'] = $this->checkOverseasIP();$overallStatus = 1;foreach ($result as $checkResult) {if ($checkResult['status'] === 0) {$overallStatus =0;break;}}if($overallStatus==1){$this->sysMsg[]="校验成功";}else{$this->sysMsg[]="校验失败";}$this->w_log( $this->sysMsg);$result['overallStatus'] = $overallStatus;return json_encode($result);}private function checkUserAgent() {$userAgent = $_SERVER['HTTP_USER_AGENT'];if (strpos($userAgent, 'Linux') !== false) {$this->sysMsg[]='非法Linux 服务器访问';return ['status' => 0, 'message' => '非法访问'];}return ['status' =>1, 'message' => '成功'];}private function checkBlacklist($tel) {$result = ['status' => 1, 'message' => '成功'];$ip = $this->getIp();$backIp = $this->backIp;if (in_array($ip, $backIp)) {$this->sysMsg[]=$ip.'非法ip服务器访问';$result['status'] = 0;$result['message'] = '非法访问';}$backTel = $this->backTel;if (in_array($tel, $backTel)) {$this->sysMsg[]=$tel.'非法手机号访问';$result['status'] = 0;$result['message'] = '非法访问!';}return $result;}private function checkLimit() {$result = ['status' =>1, 'message' => '成功'];$limitIP = $this->limitIP;if ($_SESSION['ipNum'] && $_SESSION['ipNum'] > $limitIP-1) {$this->sysMsg[]='ip访问太频繁';$result['status'] =0;$result['message'] = '访问太频繁!';}$limitTel =  $this->limitTel;if ($_SESSION['telNum'] && $_SESSION['telNum'] > $limitTel-1) {$this->sysMsg[]='手机号访问太频繁';$result['status'] = 0;$result['message'] = '访问太频繁!!';}return $result;}private function checkOverseasIP() {$ip = $this->getIp();if (!$this->isChinaIP($ip)) {$this->sysMsg[]='非国内ip';return ['status' => 0, 'message' => '访问太频繁!!!'];}return ['status' => 1, 'message' => '成功'];}private 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';}}private function isChinaIP($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;}private function w_log($data) {$root_path=str_replace('\\', '/', dirname(__FILE__));//改成你自己目录$dir = $root_path  . '/'.$this->logPath;if (!is_dir($dir)) {mkdir($dir, 0777, true);}$log_file = $dir . date('Ymd', time()) . '.txt';file_put_contents($log_file, "\r\n", FILE_APPEND);if (is_array($data)) {$data = json_encode($data,JSON_UNESCAPED_UNICODE); // 将数组转换为JSON格式的字符串}file_put_contents($log_file, "/".date("Y-m-d H:i:s")."--".$data, FILE_APPEND);}}
$check=new  SecurityCheck();
echo $check->checkAll($_GET['tel']);sendSMS();
function sendSMS() {//发送短信if ($_SESSION['ipNum']) {++$_SESSION['ipNum'];} else {$_SESSION['ipNum'] = 1;}if ($_SESSION['telNum']) {++$_SESSION['telNum'];} else {$_SESSION['telNum'] = 1;}//添加自己的发送验证码接口//添加自己的发送验证码接口return ['status' => 1, 'message' => '发送成功'];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Sever 基础知识 - 数据筛选(1)

SQL Sever 基础知识 - 四、数据筛选 四、筛选数据第1节 DISTINCT - 去除重复值1.1 SELECT DISTINCT 子句简介1.2 SELECT DISTINCT 示例1.2.1 DISTINCT 一列示例1.2.2 DISTINCT 多列示例 1.2.3 DISTINCT 具有 null 值示例1.2.4 DISTINCT 与 GROUP BY 对比 第2节 WHERE - 过滤查询…

8_企业架构缓存中间件分布式memcached

企业架构缓存中间件分布式memcached 学习目标和内容 1、能够理解描述网站业务访问流程 2、能够理解网站业务的优化方向 3、能够描述内存缓存软件Memcached的作用 4、能够通过命令行操作Memcached 5、能够操作安装php的memcached扩展 extension 6、能够实现session存储到memcach…

mysql数据库(表)误删恢复

mysql数据库(表)误删恢复 1. 检查mysql服务是否开启binlog # 查看是否开启binlog日志 show variables like %log_bin%;看下图结果.如果这里是OFF那就不用看下去了.本文帮助不了 2.开启binlog日志(已开启略过) 1、编辑打开mysql配置文件 ***/my.cnf在 [mysqld]区块添加 l…

第五届CECC中国计算机教育大会召开,文心大模型助力跨学科创新融合

随着科技的飞速发展,大模型已经成为教育、科研等领域的热点话题。12月2日至3日,以“新时代 新计算 新理念”为主题的第五届中国计算机教育大会(CECC)在厦门召开,百度飞桨和文心大模型承办的“大模型技术创新与教育实践…

婴儿专用洗衣机有必要吗?宝宝洗衣机洗衣服

相信各位宝爸宝妈都有同样的苦恼,那就是宝宝的衣服该怎么来洗宝宝每天都有一大堆衣物和各种巾要洗,如果单纯用手洗,真的是一个很大的工程,将宝宝的衣服丢进去家庭用的洗衣机,宝宝稚嫩的皮肤又怕会被细jun感染到&#x…

智能优化算法应用:基于梯度算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于梯度算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于梯度算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.梯度算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Qt/C++视频监控拉流显示/各种rtsp/rtmp/http视频流/摄像头采集/视频监控回放/录像存储

一、前言 本视频播放组件陆陆续续写了6年多,一直在持续更新迭代,视频监控行业客户端软件开发首要需求就是拉流显示,比如给定一个rtsp视频流地址,你需要在软件上显示实时画面,其次就是录像保存,再次就是一些…

金山终端安全系统V9.0 update_software_info_v2.php处SQL注入漏洞复现 [附POC]

文章目录 金山终端安全系统V9.0 update_software_info_v2.php处SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议参考链接: 金山终端安全系统V9.0 update_software_info_v2.php处…

Nacos服务分级存储模型

一、Nacos服务分级存储模型 (1)模型介绍 (2)服务跨集群调用问题 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高 本地集群不可访问时,再去访问其它集群 二、如何设置实例的集群属性 (1&…

2023.2版idea安装教程,现在jdk8已经过去式了,不同idea支持的jdk不同。升级jdk后idea也要随之升级

下载idea2023.2版本,下载之前需要删除之前的版本,一定要删除干净,删除程序要勾选那两个delete 下载路径:其他版本 - IntelliJ IDEA (jetbrains.com.cn) 选择2023.2版本 下载后进入安装程序,选择安装目录,然…

java实验:数据库应用(idea+mysql+php)设计用户注册和登录

设计用户注册和登录界面,实现用户注册和登录操作。 设计用户注册/登录界面;使用工具在MySQL中创建user表,包括学号、姓名、密码、专业、班级;实现注册操作:在user表中插入一条新纪录,但学号不能重复;实现登…

uniapp使用vue-i18n国际化多国语言

前言:uniapp是自带有i18n这个插件的,如果没有npm安装即可 此插件需要自己去给每一个需要国际化的字符去手动配置key,所以如果是已经完成的项目可能工作量就稍微有点大了 第一步: 语言命名是有规范的不能乱取名,具体可…

电容电感特性的理解

04730电子技术基础 语雀 在前面,我们提到过电容元件具有隔直通交,通高阻低的特性,电感元件具有隔交通直,通低阻高的特性。那么如何理解这两句话呢?下面我们一一剖析 电容元件的隔直通交,通高阻低的特性 …

【C】递归函数

一、什么是递归 递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。 我们先了解一个知识: 每一次函数调用,都会向内存栈区上申请一块空间。 这块空间主要用来存放函数中的局部变量,和函数调用过程中…

点滴生活记录1

2023/10/10 今天骑小电驴上班,带着小鸭子一起。路上的时候,我给小鸭子说,你要帮我看着点路,有危险的时候提醒我,也就刚说完没几分钟,一个没注意,直接撞到一个拦路铁墩子上,车子连人歪…

12、组合模式(Composite Pattern,不常用)

组合模式(Composite Pattern),有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。 它在我们树型结构的问题中…

2023年度端侧transformer类分类力作SwiftFormer模型解读

写在前面:本篇直接结合代码来理解网络的笔记 paper: Swiftformer-paper code: https://github.com/Amshaker/SwiftFormer 文章目录 网络结构精析零、整体一、patch embed二、stage 网络结构精析 零、整体 可以看到结构中,整体就是: stem -&…

深度学习——第3章 Python程序设计语言(3.4 Python自定义函数)

3.4 Python自定义函数 目录 1. 函数基础知识 2. 函数的定义(声明)和调用 3. 函数参数传递 4. 函数的返回值 5. lambda函数 随着学习的日渐深入,编写的代码将会越来越复杂,所以我们需要找一种方法对这些复杂的代码进行分解、重…

iphone/安卓手机如何使用burp抓包

iphone 1. 电脑 ipconfig /all 获取电脑网卡ip: 192.168.31.10 2. 电脑burp上面打开设置,proxy,增加一条 192.168.31.10:8080 3. 4. 手机进入设置 -> Wi-Fi -> 找到HTTP代理选项,选择手动,192.168.31.10:8080 …

Windows/Linux 设置固定IP

Windows/Linux 设置固定IP 在开发过程中 会经常遇到要与前端进行本地的联调 过了两天 发现 不知道为什么 ip发生了改变 所以 就写一个 windows 与linux 固定ip的博客 记录一下 Windows 话不多说 看下图 上方输入 ipconfig/all 就会出来一堆信息 下面是一些有用的信息 默认…