当前位置: 首页 > news >正文

最新SQL注入漏洞修复建议

点击星标,即时接收最新推文

82eff4e07b8de5dcddd63dd694d79fe2.png

本文选自《web安全攻防渗透测试实战指南(第2版)》

点击图片五折购书

b87472e56ffa55de99b139bbea892a18.gif

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);
?>

43f13424f9322d07b696d29c6cc0c50e.gif

MS08067安全实验室视频号已上线

欢迎各位同学关注转发~

—  实验室旗下直播培训课程  —

5b056c36b6b6b7c101aa54131dc1afe9.png

d45f7516249b5cf8b3ea116cf3d19ec0.jpeg

2bf3d02ff59ed89cfcd57874fe97ae85.jpegd94cdb04328094f25666f64db6ad9b51.png

aa5793a229bcf438d8b5e5cb8e42a2b2.jpeg

4b529fc0b09d8424c5a9c703b99de4ae.jpeg

3ab2323e8c1fa8a1be4941473375efc5.jpeg

729c5320fc81076d79e1559440086b99.jpeg

35a15a1ad891410a8158464783540897.jpeg


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

9531962698d113bdc37a3baa8f605308.gif

相关文章:

最新SQL注入漏洞修复建议

点击星标&#xff0c;即时接收最新推文 本文选自《web安全攻防渗透测试实战指南&#xff08;第2版&#xff09;》 点击图片五折购书 SQL注入漏洞修复建议 常用的SQL注入漏洞的修复方法有两种。 1&#xff0e;过滤危险字符 多数CMS都采用过滤危险字符的方式&#xff0c;例如&…...

新人FPGA验证书籍推荐

1、FPGA之道 推荐理由&#xff1a;FPGA基础知识讲解全面&#xff0c;可以作为参考书时常翻阅&#xff1b; 2、Verilog数字系统设计教程 推荐理由&#xff1a;FPGA语法详细的介绍&#xff0c;案例比较有代表性&#xff1b; 工具类书籍推荐&#xff1a; 3、ModelSim电子系统…...

TypeError: data.reduce is not a function:数据类型不匹配

错误展示&#xff1a; 错误分析&#xff1a; 首先来看看前端代码&#xff1a;我表格绑定的数据模型是tableData&#xff0c;而我tableData定义的是一个数组 其次看看后端给的数据&#xff1a; 传递的是一个对象&#xff0c;而不是一个数组&#xff01; 这样原因就找出了&…...

出租屋智能视频监控系统方案:全面保卫租客安全

除了我们常见的家庭、社区、园区等智能监控&#xff0c;出租房作为很多人的暂住所也极易发生盗窃等事件&#xff0c;为保障大众租户的财产安全&#xff0c;旭帆科技特地针对出租屋制定了智能监控系统方案。 1、安装智能安防摄像头 高清晰度、夜视功能良好的智能摄像头&#xf…...

代码解读-自然语言处理

目录 demo3文本转为向量代码解读给出每一步的输出 demo3文本转为向量 代码 from tensorflow.keras.preprocessing.text import Tokenizer # 标记器(每一个词&#xff0c;以我们的数值做映射&#xff0c;)words [LaoWang has a Wechat account., He is not a nice person., …...

docker指令

镜像操作&#xff1a; # 搜索镜像 docker search image_name # 搜索结果过滤&#xff1a;是否是官方 docker search --filter --filter is-official image_name # 搜索结果过滤&#xff1a;是否是自动化构建 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的时候&#xff0c;报出了如下的错误&#xff0c; 系统资源不足。 有关详细信息&#xff0c;请参阅一下堆栈跟踪。 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.与区块链相关的技术 区块链技术的核心是一系列的信息安全技术&#xff0c;其体系结构为&#xff1a; 区块链技术核心相关技术&#xff1a;A..非对称加密 B.时间戳 C.哈希函数 D.智能合约 E.POS 2.哈希函数 哈希算法 MD5SHA 哈希算法作用 用于保障信息完…...

SQL 选择数据库 USE语句

SQL 选择数据库 USE语句 当SQL Schema中有多个数据库时&#xff0c;在开始操作之前&#xff0c;需要选择一个执行所有操作的数据库。 SQL USE语句用于选择SQL架构中的任何现有数据库。 句法 USE语句的基本语法如下所示 : USE DatabaseName;数据库名称在RDBMS中必须是唯一的。…...

FL Studio21版无限破解版下载 软件内置破解补丁

FL Studio是一款非常好用方便的音频媒体制作工具&#xff0c;它的功能是非常的强大全面的&#xff0c;想必那些喜欢音乐创作的朋友们应该都知道这款软件是多么的好用吧&#xff0c;它还能够给用户们带来更多的创作灵感&#xff0c;进一步加强提升我们的音乐制作能力。该软件还有…...

【代码随想录】算法训练计划02

1、977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 思路&#xff1a; 这题思路在于——双指针…...

hive针对带有特殊字符非法json数据解析

一、背景 有的时候前端或者后端进行埋点日志&#xff0c;会把json里面的数据再加上双引号&#xff0c;或者特殊字符&#xff0c;在落日志的时候&#xff0c;组装的格式就不是正常的json数据了&#xff0c;我们就需要将带有特殊字符的json数据解析成正常的json数据。 二、正则…...

【C++进阶之路】第三篇:二叉搜索树 kv模型

文章目录 一、二叉搜索树1.二叉搜索树概念2.二叉搜索树操作3.二叉搜索树的实现 二、二叉搜索树的应用1.kv模型2.kv模型的实现 三、 二叉搜索树的性能分析 一、二叉搜索树 1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性…...

【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函数的功能

在许多编程语言中&#xff0c;包括Python&#xff0c;都提供了switch语句或类似的功能来根据不同的条件执行不同的代码块。然而&#xff0c;Python本身并没有内置的switch语句&#xff0c;但是您可以使用其他方式来实现类似的功能。下面是一种常见的方法&#xff1a; 使用if-e…...

Python 继承和子类示例:从 Person 到 Student 的演示

继承允许我们定义一个类&#xff0c;该类继承另一个类的所有方法和属性。父类是被继承的类&#xff0c;也叫做基类。子类是从另一个类继承的类&#xff0c;也叫做派生类。 创建一个父类 任何类都可以成为父类&#xff0c;因此语法与创建任何其他类相同&#xff1a; 示例&…...

DevOps持续集成-Jenkins(3)

文章目录 DevOpsDevOps概述Jenkins实战3&#xff1a;实战1和实战2的加强版&#xff08;新增SonarQube和Harbor&#xff09;⭐环境准备⭐项目架构图对比Jenkins实战1和实战2&#xff0c;新增内容有哪些&#xff1f;SonarQube教程采用Docker安装SonarQube &#xff08;在Jenkins所…...

TypeScript之索引签名

1. 索引签名 在 TypeScript 中&#xff0c;索引签名是一种定义对象类型的方式&#xff0c;它允许我们使用字符串或数字作为索引来访问对象的属性。 索引签名最主要的作用就是允许我们动态地添加或访问对象的属性&#xff0c;通过使用索引签名&#xff0c;我们可以在编译时无法…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...