【靶场练习】--DVWA第一关Brute Force(暴力破解)全难度分析

注意,这一关必须要使用Burpsuite来抓包

目录

    • Low
      • 1.抓包
      • 2.发送到爆破模块
      • 3.选择爆破模式
      • 爆破模式介绍
      • 4.添加载荷
      • 5.添加字典
      • 6.爆破查看
      • 查看源码
    • Medium
      • 查看源码
    • High
      • 1.抓包
      • 2.在bp的`extensions`中找到`CSRF Token Tracker`,并安装
      • 3.构造字典
      • 4.成功爆破
      • 查看源码
    • Impossible
      • 查看源码

Low

1.抓包

打开代理,然后在登录框随便输入账号密码
在这里插入图片描述
可以拦截抓包:
在这里插入图片描述
也可以在历史中找到对应的包:

在这里插入图片描述

2.发送到爆破模块

右键
在这里插入图片描述

3.选择爆破模式

将Attack type的值设置为Cluster bomb
在这里插入图片描述

爆破模式介绍

在这里插入图片描述
在这里插入图片描述

4.添加载荷

选中需要爆破的地方,点击add(在前后输入§也行)

在这里插入图片描述

5.添加字典

可以选择导入字典也可以手动输入
在这里插入图片描述

6.爆破查看

在这里插入图片描述
果然成功了:
在这里插入图片描述

查看源码

<?phpif( isset( $_GET[ 'Login' ] ) ) {// 安全风险:使用GET方法传递用户名和密码,会暴露在URL中并可能被日志记录// 建议:使用POST方法处理敏感信息// Get username$user = $_GET[ 'username' ];// 安全风险:未对用户名进行任何过滤或转义处理,直接用于SQL查询// 存在严重的SQL注入漏洞// Get password$pass = $_GET[ 'password' ];// 安全风险:密码通过GET传输,存在泄露风险// 安全风险:使用MD5哈希密码,安全性极低,易被彩虹表破解// 安全风险:未使用盐值增强密码哈希安全性// 建议:使用password_hash()和password_verify()$pass = md5( $pass );// Check the database// 安全风险:直接拼接用户输入构建SQL查询,存在严重SQL注入漏洞$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";// 安全风险:数据库错误直接显示给用户,可能泄露数据库结构等敏感信息$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row    = mysqli_fetch_assoc( $result );$avatar = $row["avatar"];// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";// 安全风险:直接输出用户可控的$avatar变量,可能存在XSS攻击// 示例:如果avatar存储为javascript:alert('xss'),可能执行脚本echo "<img src=\"{$avatar}\" />";// 安全风险:缺少会话管理机制,无法在后续请求中保持登录状态// 建议:使用session_start()初始化会话并存储用户认证信息}else {// Login failedecho "<pre><br />Username and/or password incorrect.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

可以发现,这个登录框甚至都没有做sql注入防护,那么使用万能密码就可以直接登录…

  • 总的来说,这个只实现了验证账号密码是否匹配的功能,几乎没有安全性可言

Medium

查看源码

<?phpif( isset( $_GET[ 'Login' ] ) ) {// 安全风险:使用GET方法传输用户名和密码,数据会暴露在URL中,可能被日志记录// 建议:使用POST方法传输敏感信息// Sanitise username input$user = $_GET[ 'username' ];// 安全风险:仅使用mysqli_real_escape_string()不足以完全防止SQL注入// 建议:使用参数化查询(prepared statements)$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// Sanitise password input$pass = $_GET[ 'password' ];// 同样存在SQL注入防护不足的问题$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 安全风险:使用MD5哈希密码,安全性不高,易被破解// 安全风险:未使用盐值(salt)增强哈希安全性// 建议:使用password_hash()和password_verify()函数$pass = md5( $pass );// Check the database// 安全风险:通过字符串拼接构建SQL查询,存在SQL注入风险$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";// 安全风险:查询错误时直接输出数据库错误信息,可能泄露敏感信息// 建议:生产环境中不显示具体错误信息,记录到日志$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row    = mysqli_fetch_assoc( $result );$avatar = $row["avatar"];// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";// 安全风险:直接输出从数据库获取的avatar路径,可能存在XSS攻击风险echo "<img src=\"{$avatar}\" />";// 安全风险:缺少会话管理机制,无法在后续请求中保持身份验证状态// 建议:使用session_start()和$_SESSION存储用户认证状态}else {// Login failed// 安全风险:登录失败时使用sleep(2),导致响应时间差异,可能被用于暴力破解// 建议:移除sleep()或对成功和失败响应使用相同的延迟处理sleep( 2 );echo "<pre><br />Username and/or password incorrect.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>
  • 不难发现,相比于Low级别的代码,Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,",x1a)进行转义,把其中的字符串给过滤掉了,勉强能够抵御一般的sql注入攻击,那Low等级时候用到的注入就失效了,需要注意的是中级的暴力破解相对来说较慢是因为有个sleep函数,在破解失败后会使程序停止运行两秒。所以我们直接用爆破方法即可,和low级的一样。

High

1.抓包

发送到爆破模块,发现登陆时有token
在这里插入图片描述
要么删除token后发包;要么使用同一个token,重放;要么使用burp得插件CSRF Token Tracker,根据规则从reponse报文中找到token并使其他模块发送报文时自动更新新的token

2.在bp的extensions中找到CSRF Token Tracker,并安装

在这里插入图片描述
在这里插入图片描述
其中host中的host,name为token字段名
在这里插入图片描述

ps:使用CSRF Token Tracker插件的原理:你提交用户名密码后,burp捕获这个数据包,然后你将这个数据包send to repeater,send发送给服务端,服务端发送响应包, CSRF Token Tracker插件捕获响应包中的user_token

3.构造字典

和low一样添加字典
在这里插入图片描述
使用单线程
在这里插入图片描述

4.成功爆破

在这里插入图片描述

查看源码

<?phpif( isset( $_GET[ 'Login' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// 安全改进:添加了CSRF令牌验证,有助于防止跨站请求伪造攻击// 注意:需确认checkToken()实现是否安全,以及令牌生成逻辑是否可靠// Sanitise username input$user = $_GET[ 'username' ];// 安全风险:使用GET方法传输用户名和密码,敏感信息会暴露在URL中$user = stripslashes( $user );// 安全问题:stripslashes()仅移除反斜杠,不能有效防止SQL注入// 注意:与mysqli_real_escape_string()配合使用可能产生意外结果$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 安全风险:仍依赖字符串拼接构建SQL查询,mysqli_real_escape_string()防护有限// 建议:使用参数化查询(prepared statements)彻底防止SQL注入// Sanitise password input$pass = $_GET[ 'password' ];$pass = stripslashes( $pass );$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 安全风险:密码哈希使用MD5算法,安全性极低,易被破解// 安全风险:未使用盐值(salt)增强密码哈希安全性// 建议:使用password_hash()和password_verify()函数$pass = md5( $pass );// Check database$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";// 安全风险:通过字符串拼接构建SQL查询,仍存在SQL注入风险// 即使使用了转义函数,在特定编码或场景下仍可能被绕过$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// 安全风险:数据库错误直接显示给用户,可能泄露数据库结构等敏感信息// 建议:生产环境中记录错误日志,不向用户展示具体错误信息if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row    = mysqli_fetch_assoc( $result );$avatar = $row["avatar"];// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";// 安全风险:直接输出$user变量,未进行HTML转义,可能存在XSS攻击// 建议:使用htmlspecialchars($user, ENT_QUOTES)转义输出echo "<img src=\"{$avatar}\" />";// 安全风险:直接使用数据库中的$avatar路径,若该值用户可控则存在XSS风险// 建议:验证路径合法性并使用htmlspecialchars()转义// 安全风险:缺少会话管理机制,登录状态无法在后续请求中保持// 建议:使用session_start()初始化会话并存储用户认证信息}else {// Login failedsleep( rand( 0, 3 ) );// 安全改进:使用随机延迟替代固定延迟,降低暴力破解效率// 仍存在:成功与失败响应时间差异可能被利用的风险echo "<pre><br />Username and/or password incorrect.</pre>";}// 代码问题:数据库连接关闭方式过于复杂,可简化为mysqli_close($GLOBALS["___mysqli_ston"])((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}// Generate Anti-CSRF token
generateSessionToken();
// 注意:需确认generateSessionToken()生成的令牌是否足够随机且安全?>

原理就是 token是前端生成的所以我们可以提前获取他的值(利用的就是token的复用 我们上一次访问失败之后可以把他的token搞到下一次去使用 这样就可以使用这个token去爆破)但是现实场景我们是不知道他的token的 无法提取获取。总的来说就是下面两点:
令牌暴露在前端: 无论后端如何生成,令牌最终会作为 HTML 内容返回给前端(否则前端无法提交),攻击者可通过访问页面直接提取。
复用无限制:代码未实现 “一次有效” 机制,同一令牌可在同一会话中反复使用,无需每次重新获取,失败不失效。

Impossible

查看源码

<?phpif( isset( $_POST[ 'Login' ] ) && isset ($_POST['username']) && isset ($_POST['password']) ) {// 安全改进:使用POST方法传输登录数据(用户名、密码)// 相比GET方法,POST数据在URL中不可见,避免了浏览器历史、服务器日志泄露敏感信息的风险// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// 保留并延续了CSRF令牌验证机制,有效防御跨站请求伪造攻击// 确保登录请求来自当前用户的合法会话,而非第三方伪造// Sanitise username input$user = $_POST[ 'username' ];$user = stripslashes( $user );$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// Sanitise password input$pass = $_POST[ 'password' ];$pass = stripslashes( $pass );$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass = md5( $pass );// 注:MD5哈希密码仍是安全短板,但本版代码的核心改进在其他维度// Default values$total_failed_login = 3;  // 设定最大失败登录次数(3次)$lockout_time       = 15; // 设定账户锁定时长(15分钟)$account_locked     = false;// 安全改进:新增账户锁定机制的基础配置,从源头限制暴力破解频率// Check the database (Check user information)$data = $db->prepare( 'SELECT failed_login, last_login FROM users WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();$row = $data->fetch();// 安全改进:使用PDO参数化查询(prepare + bindParam)// 彻底杜绝SQL注入风险!参数化查询将用户输入与SQL语句逻辑分离,输入无法被解析为SQL命令// Check to see if the user has been locked out.if( ( $data->rowCount() == 1 ) && ( $row[ 'failed_login' ] >= $total_failed_login ) )  {// 安全改进:实现账户锁定逻辑——当失败次数达到阈值时,触发锁定判断// 注:此处虽有用户枚举风险(可通过返回信息判断用户名是否存在),但核心锁定功能已生效// Calculate when the user would be allowed to login again$last_login = strtotime( $row[ 'last_login' ] );$timeout    = $last_login + ($lockout_time * 60);$timenow    = time();// Check to see if enough time has passed, if it hasn't locked the accountif( $timenow < $timeout ) {$account_locked = true;// 安全改进:锁定逻辑生效——在锁定时长内,即使密码正确也无法登录// 有效阻止“短时间高频次暴力破解”,大幅提升破解成本}}// Check the database (if username matches the password)$data = $db->prepare( 'SELECT * FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR);$data->bindParam( ':password', $pass, PDO::PARAM_STR );$data->execute();$row = $data->fetch();// 再次使用PDO参数化查询,确保密码验证环节无SQL注入风险// 同时通过LIMIT 1优化查询效率,避免冗余数据返回// If its a valid login...if( ( $data->rowCount() == 1 ) && ( $account_locked == false ) ) {// Get users details$avatar       = $row[ 'avatar' ];$failed_login = $row[ 'failed_login' ];$last_login   = $row[ 'last_login' ];// Login successfulecho "<p>Welcome to the password protected area <em>{$user}</em></p>";echo "<img src=\"{$avatar}\" />";// Had the account been locked out since last login?if( $failed_login >= $total_failed_login ) {echo "<p><em>Warning</em>: Someone might of been brute forcing your account.</p>";echo "<p>Number of login attempts: <em>{$failed_login}</em>.<br />Last login attempt was at: <em>{$last_login}</em>.</p>";}// 安全改进:新增安全预警——当用户登录时,提示之前存在暴力破解尝试// 提升用户安全感知,便于用户及时修改密码等操作// Reset bad login count$data = $db->prepare( 'UPDATE users SET failed_login = "0" WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();// 安全改进:登录成功后重置失败次数// 确保合法用户后续登录不受之前失败记录影响,平衡安全性与用户体验} else {// Login failedsleep( rand( 2, 4 ) );// 保留随机延迟机制,避免攻击者通过响应时间差异判断“用户名/密码是否正确”// 相比固定延迟,随机延迟更难被暴力破解工具利用// Give the user some feedbackecho "<pre><br />Username and/or password incorrect.<br /><br/>Alternative, the account has been locked because of too many failed logins.<br />If this is the case, <em>please try again in {$lockout_time} minutes</em>.</pre>";// 安全改进:模糊错误提示——不明确告知“是用户名错”还是“密码错”,也不直接确认“账户是否存在”// 有效降低用户枚举风险,同时告知锁定规则,提升用户体验// Update bad login count$data = $db->prepare( 'UPDATE users SET failed_login = (failed_login + 1) WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();// 安全改进:登录失败后累加失败次数// 为后续账户锁定逻辑提供数据支撑,形成“失败-累加-锁定”的完整防御链}// Set the last login time$data = $db->prepare( 'UPDATE users SET last_login = now() WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();// 安全改进:记录每次登录(无论成功/失败)的时间// 一方面用于账户锁定的超时计算,另一方面可作为审计日志,便于后续安全分析
}// Generate Anti-CSRF token
generateSessionToken();
// 延续令牌生成机制,确保每次页面加载都有有效令牌,维持CSRF防御能力?>
  1. 彻底防御 SQL 注入:全面采用 PDO 参数化查询,替代字符串拼接,从根源杜绝注入风险;
  2. 强化暴力破解防御:新增 “失败次数累加 + 超时锁定” 机制,大幅提升破解成本,同时保留随机延迟;
  3. 优化敏感数据传输:改用 POST 方法传输用户名 / 密码,避免 URL 泄露;
  4. 降低信息泄露风险:模糊错误提示,减少用户枚举可能;
  5. 增强用户安全感知:登录成功时提示暴力破解预警,同时重置失败次数,平衡安全与体验;
  6. 完善审计与配置:记录登录时间,支持可配置的锁定阈值与时长,便于维护与扩展。

对于制作靶场的作者当时来说md5已经十分牢固,但是随着时代发展,md5变得不那么牢固了,但是这仍然是优秀代码的典范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96940.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java语言——排序算法

一、基本概念排序&#xff1a;将n个数字按一定顺序排列&#xff08;比如&#xff1a;升序&#xff0c;或者降序&#xff09; ^内部排序 &#xff1a;若整个排序过程不需要访问外存便能完成&#xff0c;则称此类排序问题为内部排序 ^外部排序&#xff1a;若参加排序的记录数量很…

【Linux】人事档案——用户及组管理

目录 1 用户及组管理 2 用户及用户组管理命令 2.1 useradd&#xff1a;建立用户 useradd命令用于建立用户&#xff0c;该 2.2 passwd&#xff1a;更改用户密码 2.3 usermod&#xff1a;更改用户信息 2.4 groupadd&#xff1a;建立用户组 2.5 finger&#xff1a;查找并显…

给定一个有序的正数数组arr和一个正数range,如果可以自由选择arr中的数字,想累加得 到 1~range 范围上所有的数,返回arr最少还缺几个数。

给定一个有序的正数数组arr和一个正数range&#xff0c;如果可以自由选择arr中的数字&#xff0c;想累加得 到 1~range 范围上所有的数&#xff0c;返回arr最少还缺几个数。 #include <iostream> #include <vector>using namespace std;void func1(std::vector<…

BigemapPro快速添加历史影像(Arcgis卫星地图历史地图)

这是Esri(Arcgis)官方提供的历史影像数据&#xff0c;可放心使用。https://livingatlas.arcgis.com/wayback如何快速添加到Bigemap Pro软件里&#xff0c;详细步骤如下&#xff1a;复制下面的文本保存为 配置.bmmap,然后拖入软件就可以了{"BmLayerVersion":"1.0…

[免费]基于Python的Django医院管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是python222_小锋老师&#xff0c;看到一个不错的基于Python的Django医院管理系统&#xff0c;分享下哈。 项目视频演示 https://www.bilibili.com/video/BV1iPH8zmEut/ 项目介绍 随着人民生活水平日益增长&#xff0c;科技日益发达的今天&#xff0c;…

MyBatis 从入门到精通(第三篇)—— 动态 SQL、关联查询与查询缓存

在前两篇博客中&#xff0c;我们掌握了 MyBatis 的基础搭建、核心架构与 Mapper 代理开发&#xff0c;能应对简单的单表 CRUD 场景。但实际项目中&#xff0c;业务往往更复杂 —— 比如 “多条件动态查询”“员工与部门的关联查询”“高频查询的性能优化” 等。本篇将聚焦 MyBa…

Linux内核中IPv4的BEET模式封装机制解析

引言 在Linux网络栈中,IPSec提供了网络层的数据加密和认证服务。传统的IPSec支持两种模式:传输模式(Transport Mode)和隧道模式(Tunnel Mode)。然而,这两种模式各有优缺点:传输模式开销小但无法隐藏原始IP头;隧道模式提供完全封装但增加了开销。 BEET(Bound End-to…

设计模式——创建型模式

什么是设计模式&#xff1f;设计模式是软件工程中解决常见问题的经典方案&#xff0c;它们代表了最佳实践和经验总结。通过使用设计模式&#xff0c;开发者可以创建更加灵活、可维护和可扩展的代码结构。设计模式不是具体的代码实现&#xff0c;而是针对特定问题的通用解决方案…

我爱学算法之—— 位运算(上)

常见位运算 对于位运算&#xff1a; &&#xff1a;按位与&#xff0c;有0则0。 |&#xff1a;按位或&#xff0c;有1则1。 ^&#xff1a;按位异或&#xff0c;相同为0、不同为1。&#xff08;无进位相加&#xff09; ~&#xff1a;二进制位按位取反。 对于位运算的常见使用…

智能语音系统

智能语音系统通过技术手段让机器能够“听懂”、“理解”并“回应”人类的语音&#xff0c;是实现人机交互的关键技术之一。下面我将为你梳理智能语音系统的核心组成部分、工作原理、应用场景以及面临的挑战。&#x1f9e0; 核心技术与工作原理智能语音系统之所以能实现人机交互…

水泵自动化远程监测与控制的御控物联网解决方案

一、行业背景与痛点分析水泵作为工业生产、农业灌溉、城市供水等领域的核心设备&#xff0c;其运行效率直接影响系统稳定性与运营成本。然而&#xff0c;传统管理模式存在三大核心痛点&#xff1a;人工巡检低效&#xff1a;偏远地区水泵分布分散&#xff0c;依赖人工定期巡检&a…

Python实现点云法向量各种方向设定

本次我们分享点云法向量定向的四种方法&#xff0c;分别是XYZ轴、相机位置、最小生成树(MST)和质心设定方法。通常出现在三维点云处理、三维重建、计算机视觉或图形学中&#xff0c;需要估计点云的法向量方向。它们的核心任务是&#xff1a;在已知点坐标和局部几何结构&#xf…

腾讯云智能体开发平台

提供全球领先的云计算服务腾讯云&#xff0c;腾讯集团倾力打造的云计算品牌&#xff0c;面向全世界各个国家和地区的政府机构、企业组织和个人开发者&#xff0c;提供全球领先的云计算、大数据、人工智能等技术产品与服务&#xff0c;以卓越的科技能力打造丰富的行业解决方案&a…

css flex布局,设置flex-wrap:wrap换行后,如何保证子节点被内容撑高后,每一行的子节点高度一致。

flex布局&#xff0c;设置flex-wrap&#xff1a;wrap换行后&#xff0c;如何保证子节点被内容撑高后&#xff0c;每一行的子节点高度一致。核心&#xff1a;需要设置父节点和子节点&#xff1a;align-items: stretch&#xff0c;两个都要。代码&#xff1a;<div class"…

Nginx_Tomcat综合案例

要求 需求&#xff1a;通过 nginx 来代理两个 tomcat 服务器&#xff08;反向代理&#xff09;&#xff0c;然后通过 https://www.nginx.com 来进行访问。主机名IP软件nginx192.168.30.10nginxtomcat1192.168.30.11java&#xff0c;tomcattomcat2192.168.30.12java&#xff0c;…

【Vue2手录12】单文件组件SFC

一、知识回顾-Vue2项目基础操作与环境配置 1.1 项目启动 项目打开方式&#xff1a;直接将项目文件夹&#xff08;如my-app&#xff09;拖拽到 Visual Studio Code&#xff08;推荐编辑器&#xff09;&#xff0c;避免拖拽父级文件夹&#xff0c;防止路径混乱。启动命令&#xf…

VS2022下载+海康SDK环境配置实现实时预览

一.VS2022下载去官网下载就可以了&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/下载Community版本是免费的。&#xff08;2&#xff09;下载后得安装包VisualStudioSetup.exe打开&#xff1a;点击继续等待下载完成&#xff0c;出现如下界面&#xff0c;这里是选…

YOLO 模型从 PyTorch 转换为 ONNX 并优化

YOLO 模型从 PyTorch 转换为 ONNX 并优化 在深度学习部署中&#xff0c;ONNX&#xff08;Open Neural Network Exchange&#xff09; 已成为跨框架与跨平台的标准格式。我们经常需要将 YOLOv8 在 PyTorch 中训练好的模型转换为 ONNX&#xff0c;并进行优化&#xff0c;以便在 …

推进新型信息基础设施建设发展:蜂窝模组行业迎来结构性机遇

工信部副部长张云明在2025年9月9日国新办新闻发布会上明确表示&#xff0c;将"扎实推进新型信息基础设施建设发展"&#xff0c;并重点强调"打造新型工业网络&#xff0c;推进蜂窝车联网部署" 。这一政策表态对蜂窝模组行业产生深远影响&#xff0c;将推动行…

返利app排行榜的缓存更新策略:基于过期时间与主动更新的混合方案

返利app排行榜的缓存更新策略&#xff1a;基于过期时间与主动更新的混合方案 大家好&#xff0c;我是阿可&#xff0c;微赚淘客系统及省赚客APP创始人&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在返利APP中&#xff0c;“热门商品排行榜”“用…