最新SQL注入漏洞修复建议
点击星标,即时接收最新推文

本文选自《web安全攻防渗透测试实战指南(第2版)》
点击图片五折购书

SQL注入漏洞修复建议
常用的SQL注入漏洞的修复方法有两种。
1.过滤危险字符
多数CMS都采用过滤危险字符的方式,例如,用正则表达式匹配union、sleep、load_file等关键字。如果匹配到,则退出程序。例如,80sec的防注入代码如下:
functionCheckSql($db_string,$querytype='select'){global$cfg_cookie_encode;$clean='';$error='';$old_pos= 0;$pos= -1;$log_file= DEDEINC.'/../data/'.md5($cfg_cookie_encode).'_safe.txt';$userIP= GetIP();$getUrl= GetCurUrl();//如果是普通查询语句,则直接过滤一些特殊语法if($querytype=='select'){$notallow1="[^0-9a-z@\._-]{1,}(union|sleep|benchmark|load_file|outfile)[^0-9a-z@\.-]{1,}"; //$notallow2 = "--|/\*";if(preg_match("/".$notallow1."/i",$db_string)){
fputs(fopen($log_file,'a+'),"$userIP||$getUrl||$db_string||SelectBreak\r\n");exit("<font size='5' color='red'>Safe Alert: Request Error step 1 !</font>");}}//完整的SQL检查while(TRUE){$pos=strpos($db_string,'\'',$pos+ 1);if($pos=== FALSE){break;}$clean.=substr($db_string,$old_pos,$pos-$old_pos);while(TRUE){$pos1=strpos($db_string,'\'',$pos+ 1);$pos2=strpos($db_string,'\\',$pos+ 1);if($pos1=== FALSE){break;}elseif($pos2== FALSE ||$pos2>$pos1){$pos=$pos1;break;}$pos=$pos2+ 1;}$clean.='$s$';$old_pos=$pos+ 1;}$clean.=substr($db_string,$old_pos);$clean= trim(strtolower(preg_replace(array('~\s+~s'),array(' '),$clean)));//老版本的MySQL不支持Union,常用的程序里也不使用Union,但是一些黑客使用它,所以要检查它if(strpos($clean,'union') !== FALSE && preg_match('~(^|[^a-z])union($|[^[a-z])~s',$clean) != 0){$fail= TRUE;$error="union detect";}//发布版本的程序可能不包括“--”“#”这样的注释,但是黑客经常使用它们elseif(strpos($clean,'/*') > 2 ||strpos($clean,'--') !== FALSE ||strpos($clean,'#') !== FALSE){$fail= TRUE;$error="comment detect";}//这些函数不会被使用,但是黑客会用它来操作文件elseif(strpos($clean,'sleep') !== FALSE && preg_match('~(^|[^a-z])sleep($|[^[a-z])~s',$clean) != 0){$fail= TRUE;$error="slown down detect";}elseif(strpos($clean,'benchmark') !== FALSE && preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s',$clean) != 0){$fail= TRUE;$error="slown down detect";}elseif(strpos($clean,'load_file') !== FALSE && preg_match('~(^|[^a-z])load_file($|[^[a-z])~s',$clean) != 0){$fail= TRUE;$error="file fun detect";}elseif(strpos($clean,'into outfile') !== FALSE && preg_match('~(^|[^a-z])into\s+outfile($|[^[a-z])~s',$clean) != 0){$fail= TRUE;$error="file fun detect";}//老版本的MySQL不支持子查询,程序里可能也用得少,但是黑客可以使用它查询数据库敏感信息elseif(preg_match('~\([^)]*?select~s',$clean) != 0){$fail= TRUE;$error="sub select detect";}if(!empty($fail)){fputs(fopen($log_file,'a+'),"$userIP||$getUrl||$db_string||$error\r\n");exit("<font size='5' color='red'>Safe Alert: Request Error step 2!</font>");}else{return$db_string;}} 使用过滤的方式,可以在一定程度上防止出现SQL注入漏洞,但仍然存在被绕过的可能。
2.使用预编译语句
使用PDO预编译语句时需要注意的是,不要将变量直接拼接到PDO语句中,而是使用占位符进行数据库中数据的增加、删除、修改、查询。示例代码如下:
<?php
$pdo=new PDO('mysql:host=127.0.0.1;dbname=test','root','root');
$stmt=$pdo->prepare('select * from user where id=:id');
$stmt->bindParam(':id',$_GET['id']);
$stmt->execute();
$result=$stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
?> 
MS08067安全实验室视频号已上线
欢迎各位同学关注转发~
— 实验室旗下直播培训课程 —









和20000+位同学加入MS08067一起学习

相关文章:
最新SQL注入漏洞修复建议
点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 点击图片五折购书 SQL注入漏洞修复建议 常用的SQL注入漏洞的修复方法有两种。 1.过滤危险字符 多数CMS都采用过滤危险字符的方式,例如&…...
新人FPGA验证书籍推荐
1、FPGA之道 推荐理由:FPGA基础知识讲解全面,可以作为参考书时常翻阅; 2、Verilog数字系统设计教程 推荐理由:FPGA语法详细的介绍,案例比较有代表性; 工具类书籍推荐: 3、ModelSim电子系统…...
TypeError: data.reduce is not a function:数据类型不匹配
错误展示: 错误分析: 首先来看看前端代码:我表格绑定的数据模型是tableData,而我tableData定义的是一个数组 其次看看后端给的数据: 传递的是一个对象,而不是一个数组! 这样原因就找出了&…...
出租屋智能视频监控系统方案:全面保卫租客安全
除了我们常见的家庭、社区、园区等智能监控,出租房作为很多人的暂住所也极易发生盗窃等事件,为保障大众租户的财产安全,旭帆科技特地针对出租屋制定了智能监控系统方案。 1、安装智能安防摄像头 高清晰度、夜视功能良好的智能摄像头…...
代码解读-自然语言处理
目录 demo3文本转为向量代码解读给出每一步的输出 demo3文本转为向量 代码 from tensorflow.keras.preprocessing.text import Tokenizer # 标记器(每一个词,以我们的数值做映射,)words [LaoWang has a Wechat account., He is not a nice person., …...
docker指令
镜像操作: # 搜索镜像 docker search image_name # 搜索结果过滤:是否是官方 docker search --filter --filter is-official image_name # 搜索结果过滤:是否是自动化构建 docker search --filter --filter is-automated image_name # 搜索结…...
【MySql】9- 实践篇(七)
文章目录 1. 一主多从的主备切换1.1 基于位点的主备切换1.2 GTID1.3 基于 GTID 的主备切换1.4 GTID 和在线 DDL 2. 读写分离问题2.1 强制走主库方案2.2 Sleep 方案2.3 判断主备无延迟方案2.4 配合 semi-sync方案2.5 等主库位点方案2.6 GTID 方案 3. 如何判断数据库是否出问题了…...
Maven compile时报错 系统资源不足,出现OOM:GC overhead limit exceeded
今天在对项目进行Maven clean compile的时候,报出了如下的错误, 系统资源不足。 有关详细信息,请参阅一下堆栈跟踪。 java.lang.OutOfMemoryError: GC overhead limit exceededat java.util.EnumSet.noneOf(EnumSet.java:115)at com.sun.too…...
启动内核ip转发和其他优化
1.临时修改 echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse 2.配置文件修改 vim /etc/sysctl.conf net.ipv4.ip_forward 1 net.ipv4.tcp_tw_reuse 1 vm.swappiness 0 kernel.sysrq 1 net.ipv4.neigh.default.gc_stale_t…...
信息安全技术
1.与区块链相关的技术 区块链技术的核心是一系列的信息安全技术,其体系结构为: 区块链技术核心相关技术:A..非对称加密 B.时间戳 C.哈希函数 D.智能合约 E.POS 2.哈希函数 哈希算法 MD5SHA 哈希算法作用 用于保障信息完…...
SQL 选择数据库 USE语句
SQL 选择数据库 USE语句 当SQL Schema中有多个数据库时,在开始操作之前,需要选择一个执行所有操作的数据库。 SQL USE语句用于选择SQL架构中的任何现有数据库。 句法 USE语句的基本语法如下所示 : USE DatabaseName;数据库名称在RDBMS中必须是唯一的。…...
FL Studio21版无限破解版下载 软件内置破解补丁
FL Studio是一款非常好用方便的音频媒体制作工具,它的功能是非常的强大全面的,想必那些喜欢音乐创作的朋友们应该都知道这款软件是多么的好用吧,它还能够给用户们带来更多的创作灵感,进一步加强提升我们的音乐制作能力。该软件还有…...
【代码随想录】算法训练计划02
1、977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 思路: 这题思路在于——双指针…...
hive针对带有特殊字符非法json数据解析
一、背景 有的时候前端或者后端进行埋点日志,会把json里面的数据再加上双引号,或者特殊字符,在落日志的时候,组装的格式就不是正常的json数据了,我们就需要将带有特殊字符的json数据解析成正常的json数据。 二、正则…...
【C++进阶之路】第三篇:二叉搜索树 kv模型
文章目录 一、二叉搜索树1.二叉搜索树概念2.二叉搜索树操作3.二叉搜索树的实现 二、二叉搜索树的应用1.kv模型2.kv模型的实现 三、 二叉搜索树的性能分析 一、二叉搜索树 1.二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性…...
【Oracle】Navicat Premium 连接 Oracle的两种方式
Navicat Premium 使用版本说明 Navicat Premium 版本 11.2.16 (64-bit) 一、配置OCI 1.1 配置OCI环境变量 1.1.2 设置\高级系统设置 1.1.2 系统属性\高级\环境变量(N) 1.1.3 修改/添加系统变量 ORACLE_HOME ORACLE_HOME D:\app\root\product\12.1.0\dbhome_11.1.4 添加系…...
在python里如何实现switch函数的功能
在许多编程语言中,包括Python,都提供了switch语句或类似的功能来根据不同的条件执行不同的代码块。然而,Python本身并没有内置的switch语句,但是您可以使用其他方式来实现类似的功能。下面是一种常见的方法: 使用if-e…...
Python 继承和子类示例:从 Person 到 Student 的演示
继承允许我们定义一个类,该类继承另一个类的所有方法和属性。父类是被继承的类,也叫做基类。子类是从另一个类继承的类,也叫做派生类。 创建一个父类 任何类都可以成为父类,因此语法与创建任何其他类相同: 示例&…...
DevOps持续集成-Jenkins(3)
文章目录 DevOpsDevOps概述Jenkins实战3:实战1和实战2的加强版(新增SonarQube和Harbor)⭐环境准备⭐项目架构图对比Jenkins实战1和实战2,新增内容有哪些?SonarQube教程采用Docker安装SonarQube (在Jenkins所…...
TypeScript之索引签名
1. 索引签名 在 TypeScript 中,索引签名是一种定义对象类型的方式,它允许我们使用字符串或数字作为索引来访问对象的属性。 索引签名最主要的作用就是允许我们动态地添加或访问对象的属性,通过使用索引签名,我们可以在编译时无法…...
Escrcpy手柄映射:重新定义手游操控体验
Escrcpy手柄映射:重新定义手游操控体验 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 当你在手机屏幕上滑动虚拟摇杆试图精准瞄准敌…...
VutronMusic:重新定义跨平台音乐体验的全能播放器
VutronMusic:重新定义跨平台音乐体验的全能播放器 【免费下载链接】VutronMusic 高颜值的第三方网易云播放器;支持流媒体音乐,如navidrome、jellyfin、emby;支持本地音乐播放、离线歌单、逐字歌词、桌面歌词、Touch Bar歌词、Mac状…...
ml.js数据预处理完全教程:从数组操作到特征工程
ml.js数据预处理完全教程:从数组操作到特征工程 【免费下载链接】ml Machine learning tools in JavaScript 项目地址: https://gitcode.com/gh_mirrors/ml/ml 在机器学习项目中,数据预处理是决定模型性能的关键步骤。ml.js作为一个强大的JavaScr…...
如何用Xournal++解决数字笔记三大痛点?超实用指南
如何用Xournal解决数字笔记三大痛点?超实用指南 【免费下载链接】xournalpp Xournal is a handwriting notetaking software with PDF annotation support. Written in C with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. Su…...
OpenClaw隐私保护机制:Qwen3.5-9B本地化处理法律文件
OpenClaw隐私保护机制:Qwen3.5-9B本地化处理法律文件 1. 为什么律师事务所需要本地化AI方案 上个月,我帮一家本地律所部署了OpenClawQwen3.5-9B的解决方案。他们的核心诉求很简单:处理客户合同时,既要实现自动化识别关键条款&am…...
5种手柄映射方案让手游玩家实现主机级操控体验
5种手柄映射方案让手游玩家实现主机级操控体验 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 手机游戏操控优化一直是困扰玩家的核心痛点&…...
利用快马ai快速构建can协议数据监控工具原型
利用快马AI快速构建CAN协议数据监控工具原型 最近在做一个汽车电子相关的项目,需要监控CAN总线上的数据。作为初学者,我对CAN协议的理解还停留在理论层面,实际开发时发现从零搭建解析工具非常耗时。好在发现了InsCode(快马)平台,…...
解锁TranslucentTB:4种高效实现Windows任务栏透明化的方法
解锁TranslucentTB:4种高效实现Windows任务栏透明化的方法 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 任务栏作为Windows…...
基于xlsx.core.min.js实现前端表格数据的智能导入与精准导出
1. 为什么选择xlsx.core.min.js处理表格数据 第一次接触前端Excel处理需求时,我试过至少5种方案。有的库体积太大,有的兼容性差,还有的文档晦涩难懂。直到发现xlsx.core.min.js这个宝藏库,才真正解决了我的痛点。这个只有200KB左右…...
零信任实践:OpenClaw+SecGPT-14B构建个人安全决策引擎
零信任实践:OpenClawSecGPT-14B构建个人安全决策引擎 1. 为什么需要个人安全决策引擎 去年某个深夜,我的服务器突然收到大量异常登录尝试。虽然最终没有造成损失,但这件事让我意识到:传统的静态密码和固定权限规则,在…...
