当前位置: 首页 > 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;我们可以在编译时无法…...

k8s-----24、亲和力Affinity

1、应用场景 pod和节点间的关系&#xff1a; 某些Pod优先选择有ssdtrue标签的节点&#xff0c;如果没有在考虑部署到其它节点;某些Pod需要部署在ssdtrue和typephysical的节点上&#xff0c;但是优先部署在ssdtrue的节点上; pod和pod间的关系&#xff1a; 同一个应用的Pod不…...

860. 柠檬水找零

在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零&#xff0c;…...

Flink将数据写入MySQL(JDBC)

一、写在前面 在实际的生产环境中&#xff0c;我们经常会把Flink处理的数据写入MySQL、Doris等数据库中&#xff0c;下面以MySQL为例&#xff0c;使用JDBC的方式将Flink的数据实时数据写入MySQL。 二、代码示例 2.1 版本说明 <flink.version>1.14.6</flink.version…...

react-typescript-demo

1.使用 Context 来存储数据...

Alexon:在云原生环境中快速部署应用服务

Alexon是一个旨在快速部署WEB应用服务到分布式系统中的工具&#xff0c;适用于云原生环境。 Alexon由SymeCloud Limited(syme.dev) 发布&#xff0c;使用GNU Guile编写而成&#xff0c;支持函数编程概念。 SymeCloud 公司主要致力于 AI-Infra 方面的研发&#xff0c;从 OpenAI …...

5G技术在职业教育领域的应用:产生巨变的技术

5G技术在职业教育领域的应用&#xff1a;产生巨变的技术 职业教育领域正面临着前所未有的挑战和机遇。随着5G技术的快速发展和普及&#xff0c;其高速度、低延迟、大容量和连接数的特性给职业教育带来了革命性的改变。本文将深入探讨5G技术在职业教育领域的应用场景、技术原理和…...

【触想智能】工控一体机与5G物联网技术结合是未来发展趋势

工控一体机也叫工业电脑一体机&#xff0c;是工业应用非常重要的一种产品。目前&#xff0c;工控一体机在工业领域的应用已经非常普及&#xff0c;在繁忙的生产车间、数字化机床、自助服务终端设备等场景中&#xff0c;我们都有看到它的身影。 工控一体机应用的普及已经潜移默化…...

LuatOS-SOC接口文档(air780E)--lvgl - LVGL图像库

lvgl.draw_mask_radius_param_t() 创建一个lv_draw_mask_radius_param_t 参数 无 返回值 返回值类型 解释 userdata lv_draw_mask_radius_param_t指针 例子 local radius lvgl.draw_mask_radius_param_t()lvgl.draw_mask_radius_param_t_free(radius) 释放一个lv_d…...

LuatOS-SOC接口文档(air780E)--lora2 - lora2驱动模块(支持多挂)

常量 常量 类型 解释 lora2.SLEEP number SLEEP模式 lora2.STANDBY number STANDBY模式 lora2.init(ic, loraconfig,spiconfig) lora初始化 参数 传入值类型 解释 string lora 型号&#xff0c;当前支持&#xff1a; llcc68 sx1268 table lora配置参数,与具体…...

WKWebView iOS17设置UserAgent

WKWebView 设置 user-agent 参考文档 之前设置 user-agent 都是通过设置NSUserDefaults来实现的&#xff0c;不过升级到了iOS17之后这个方式不好用了。 老的设置方式&#xff1a; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];目前看通过设置 we…...