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' => '发送成功'];
}

相关文章:
PHP短信接口防刷防轰炸多重解决方案三(可正式使用)
短信接口盗刷轰炸:指的是黑客利用非法手段获取短信接口的访问权限,然后使用该接口发送大量垃圾短信给目标用户 短信验证码轰炸解决方案一(验证码类解决)-CSDN博客 短信验证码轰炸解决方案二(防止海外ip、限制ip、限制手机号次数解决)-CSDN博客 PHP短信…...
C#大型LIS检验信息系统项目源码
LIS系统,一套医院检验科信息系统。它是以数据库为核心,将实验仪器与电脑连接成网,基础功能包括病人样本登录、实验数据存取、报告审核、打印分发等。除基础功能外,实验数据统计分析、质量控制管理、人员权限管理、试剂出入库等功能…...
【C语言】数据在内存中的存储
目录 练笔 整型数据的存储: char 型数据——最简单的整型 整型提升: 推广到其他整形: 大小端: 浮点型数据的存储: 存储格式: 本篇详细介绍 整型数据,浮点型数据 在计算机中是如何储存的。…...
Java聊天程序(一对一)简单版
我们首先要完成服务端,不然出错,运行也要先运行服务端,如果不先连接服务端,就不监听,那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…...
Linux下超轻量级Rust开发环境搭建:一、安装Rust
Rust语言在国内逐步开始流行,但开发环境的不成熟依然困扰不少小伙伴。 结合我个人的使用体验,推荐一种超轻量级的开发环境:Rust Helix Editor。运行环境需求很低,可以直接在Linux终端里进行代码开发。对于工程不是太过庞大的Rus…...
定义一个学生类,其中有3个私有数据成员学号、姓名、成绩,以及若于成员。 函数实现对学生数据的赋值和输出。
#include <stdio.h> // 定义学生类 typedef struct Student { int stuNum; // 学号 char name[20]; // 姓名,假设最长为20个字符 float score; // 成绩 } Student; // 初始化学生信息 void initializeStudent(Student *student, int num, const…...
1.2 C语言简介
一、为什么要讲C语言 C语言是编程界的长青藤,可以查看语言排名发现,虽然现在语言很多,但是C语言一直占有一定地址 来源网站:https://www.tiobe.com/tiobe-index/ 在系统、嵌入式、底层驱动等领域存在一定的唯一性(C语…...
小白学Java之数组问题——第三关黄金挑战
内容1.数组中出现次数超过一般的数字2.数组中出现一次的数字3.颜色分类问题 1.数组中出现次数超过一半的数字 这是剑指offer中的一道题目,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如:输入如下所示的一个长度为9…...
各大期刊网址
1.NeurIPS,全称Annual Conference on Neural Information Processing Systems, 是机器学习领域的顶级会议,与ICML,ICLR并称为机器学习领域难度最大,水平最高,影响力最强的会议! NeurIPS是CCF 推…...
使用autodl服务器,在A40显卡上运行, Yi-34B-Chat-int4模型,并使用vllm优化加速,显存占用42G,速度18 words/s
1,演示视频 https://www.bilibili.com/video/BV1gu4y1c7KL/ 使用autodl服务器,在A40显卡上运行, Yi-34B-Chat-int4模型,并使用vllm优化加速,显存占用42G,速度18 words/s 2,关于A40显卡…...
unity 2d 入门 飞翔小鸟 下坠功能且碰到地面要停止 刚体 胶囊碰撞器 (四)
1、实现对象要受重力 在对应的图层添加刚体 改成持续 2、设置胶囊碰撞器并设置水平方向 3、地面添加盒状碰撞器 运行则能看到小鸟下坠并落到地面上...
速达软件任意文件上传漏洞复现
简介 速达软件专注中小企业管理软件,产品涵盖进销存软件,财务软件,ERP软件,CRM系统,项目管理软件,OA系统,仓库管理软件等,是中小企业管理市场的佼佼者,提供产品、技术、服务等信息,百万企业共同选择。速达软件全系产品存在任意文件上传漏洞,未经身份认证得攻击者可以通过此漏…...
Name or service not knownstname
Name or service not knownstname Hadoop 或 Spark 集群启动时 报错 Name or service not knownstname 原因时因为 workers 文件在windows 使用图形化工具打开过 操作系统类型不对引发的 在Linux系统上删除 workers 文件 使用 vim 重新编辑后分发即可...
[Geek Challenge 2023] web题解
文章目录 EzHttpunsignn00b_Uploadeasy_phpEzRceezpythonezrfi EzHttp 按照提示POST传参 发现密码错误 F12找到hint,提示./robots.txt 访问一下,得到密码 然后就是http请求的基础知识 抓包修改 最后就是 我们直接添加请求头O2TAKUXX: GiveMeFlag 得到…...
【recrutment / Hiring / Job / Application】
Interviewee I), objected/targeted job/position1.1) Azure 平台运维工程师(comms&social)1.1.1), comms communication and social, for talk, content1.1.2) Cloud computing1.1.3) 拥有ITI/MCSE/RHCE相关认证或Azure认证(如Az204/Az304 have/own…...
二极管:ESD静电保护二极管
一、什么是ESD二极管 ESD二极管与 TVS二极管原理是一样的,也是为了保护电,但ESD二极管的主要功能是防止静电。 静电防护的前提条件就要求其电容值要足够地低,一般在1PF-3.5PF之间最好,主要应用于板级保护。 二、什么是静电 静…...
【根据数组元素生成随机颜色函数】
const colorOptions ["#f50","#2db7f5","#87d068","#108ee9",];const getRandomColor () > {const randomIndex Math.floor(Math.random() * colorOptions.length);return colorOptions[randomIndex];}; 时小记,终有…...
鸿蒙一出,android开发处境再受重创
华为宣布其自研操作系统鸿蒙HarmonyOSNEXT开发者预览版将不再兼容安卓系统,这一消息引起了广泛关注和热议。这一决策标志着华为正式告别安卓,摆脱了外部的制约,开始着手打造一个全新的生态系统。 鸿蒙系统4发布一个月,截至目前&a…...
ruoyi+Hadoop+hbase实现大数据存储查询
前言 有个现实的需求,数据量可能在100亿条左右。现有的数据库是SQL Server,随着采集的数据不断的填充,查询的效率越来越慢(现有的SQL Server查询已经需要数十秒钟的时间),看看有没有优化的方案。 考虑过S…...
Word 在页眉或页脚中设置背景颜色
目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 如何在word的页眉页脚中设置背景色? 二、解决方案 打开 Word 文档并进入页眉或页脚视图。在 Word 2016 及更高版本中,你可以通过在“插入”选项卡中单击“页眉”或“页脚”按钮来进入或者…...
国产多模态大模型崛起:技术、场景与未来挑战全解析
国产多模态大模型崛起:技术、场景与未来挑战全解析 引言 在人工智能浪潮席卷全球的背景下,多模态大模型已成为技术竞争的新高地。以GPT-4V、Gemini为代表的国际巨头展现了强大的图文理解与生成能力,而国产模型正凭借对中文场景的深度优化、独…...
嵌入式通信系统抗干扰设计:从硬件防护到协议容错的实战指南
1. 项目概述:当通信遇上“嘈杂”的现实世界干了十几年嵌入式,从工业控制到智能家居,从车载网络到物联网终端,我踩过最多的坑,往往不是算法有多复杂,代码有多难写,而是通信链路在各种现实环境下的…...
从ok-skills项目解析技能树:设计理念、技术实现与工程实践
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“ok-skills”。光看这个名字,可能有点摸不着头脑,但点进去一看,发现这是一个关于“技能树”或“知识图谱”的开源项目。简单来说,它试图用一种结构化的…...
智能识别整理会议内容,让开会后怎么列待办更清晰更省事
作为经常跑客户、开会议的销售,此前我常被整理沟通内容、梳理待办的工作困扰,不仅耗时久,还容易漏记客户需求、搞错时间节点。结合大半年的实测体验,整理出一套AI整理方法,能快速清晰梳理待办,节省大量时间…...
告别卡顿与隐私担忧:用Docker Compose在1核1G VPS上部署高性能RustDesk私有服务器
在1核1G VPS上构建高性能RustDesk私有化服务的完整指南 远程协作已成为现代工作流中不可或缺的一环,而数据隐私和连接稳定性则是技术爱好者最关注的核心问题。开源远程桌面解决方案RustDesk以其轻量级架构和自托管能力,为追求完全控制权的用户提供了理想…...
别再只仿真了!聊聊12V电源设计中Matlab参数计算与Multisim电路验证的那些事儿
从理论到实践:12V电源设计的Matlab参数计算与Multisim协同验证方法论 在电子工程领域,12V直流稳压电源的设计看似基础,却蕴含着从理论计算到仿真验证的完整知识体系。许多工程师在使用Matlab和Multisim这类工具时,往往陷入"仿…...
5分钟快速上手Figma中文界面:设计师必备的终极汉化插件指南
5分钟快速上手Figma中文界面:设计师必备的终极汉化插件指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma全英文界面而苦恼吗?FigmaCN中文插件是你…...
别只装AlexNet了!手把手教你在MATLAB里玩转更多预训练模型(VGG, ResNet, MobileNet安装指南)
别只装AlexNet了!手把手教你在MATLAB里玩转更多预训练模型(VGG, ResNet, MobileNet安装指南) 当你第一次在MATLAB中调用alexnet函数时,那种"开箱即用"的体验确实令人惊艳。但就像一位米其林大厨不会只满足于使用基础厨具…...
H5移动端拍照功能实战:从权限获取到图片上传的完整链路解析
1. 移动端H5拍照功能的核心实现逻辑 在移动端H5页面中实现拍照功能,本质上是通过浏览器API与设备硬件交互的过程。这个功能在在线身份验证、表单提交等场景中非常实用。我做过十几个类似的项目,发现最关键的环节集中在四个步骤:权限获取、视频…...
AI超级计算机架构演进与性能优化解析
1. AI超级计算机的技术架构演进AI超级计算机的核心架构在过去六年发生了显著变化。2019年主流系统如Summit主要采用NVIDIA V100 GPU,而到2025年,xAI的Colossus已升级到H100/H200混合架构。这种演进主要体现在三个维度:1.1 计算单元设计原理现…...
