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

【MCP Node.js SDK 全栈进阶指南】高级篇(3):MCP 安全体系建设

背景

随着MCP协议在企业和个人应用中的广泛采用,安全性已成为MCP系统设计和开发中不可忽视的核心要素。一个健壮的MCP安全体系不仅能保护敏感数据和用户隐私,还能确保AI模型与外部工具交互的可靠性和完整性。本文将深入探讨MCP TypeScript-SDK的安全体系建设,帮助开发者构建既强大又安全的MCP应用。

1. 威胁模型与风险评估

1.1 MCP应用面临的安全威胁

MCP应用作为连接AI模型与外部工具的桥梁,面临着多方面的安全威胁。了解这些威胁是构建安全体系的第一步:

1.1.1 外部攻击威胁
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│                 │     │                 │     │                 │
│   恶意用户      │────▶│   MCP 系统      │────▶│ 外部资源/工具   │
│                 │     │                 │     │                 │
└─────────────────┘     └─────────────────┘     └─────────────────┘│                       ▲                       ││                       │                       │└───────────────────────┴───────────────────────┘攻击路径
  • 恶意输入注入:攻击者可能通过向MCP系统提交恶意构造的输入,尝试操纵AI模型或后端工具。

  • 身份冒充:未经授权的用户可能尝试伪装为合法用户访问MCP服务。

  • 中间人攻击:在客户端与服务器之间截获或篡改通信内容。

  • 拒绝服务攻击:通过大量请求使MCP服务器资源耗尽,导致服务不可用。

1.1.2 内部安全威胁
  • 权限滥用:具有合法访问权限的用户可能滥用其权限获取敏感数据。

  • 数据泄露:内部人员可能有意或无意地暴露敏感信息。

  • 配置错误:错误的安全配置可能导致不必要的系统暴露。

1.1.3 工具集成风险

MCP的核心价值在于连接AI模型与外部工具,这也带来了独特的安全风险:

  • 工具能力滥用:恶意用户可能尝试使用MCP提供的工具执行未授权操作。

  • 工具链污染:第三方工具可能包含恶意代码或漏洞。

  • 数据流转风险:敏感数据在多个工具间流转时面临泄露风险。

1.2 风险评估方法论

对MCP系统进行全面的风险评估,可采用以下方法论:

1.2.1 STRIDE威胁建模

STRIDE是一种常用的威胁建模方法,特别适用于MCP这类复杂系统:

威胁类型描述MCP相关示例
欺骗(Spoofing)冒充他人身份攻击者冒充管理员访问MCP管理界面
篡改(Tampering)修改系统数据修改MCP资源定义或工具参数
否认(Repudiation)否认曾执行的操作用户否认曾使用MCP工具执行某操作
信息泄露(Information Disclosure)未授权访问信息获取MCP处理的敏感数据
拒绝服务(Denial of Service)使服务不可用通过大量请求使MCP服务器崩溃
权限提升(Elevation of Privilege)获取未授权的权限从普通用户提升为MCP管理员
1.2.2 风险评分矩阵

使用风险评分矩阵可以量化各种威胁的风险级别:

// 风险评估辅助函数
function assessRisk(threat: string,likelihood: 1 | 2 | 3, // 1=低, 2=中, 3=高impact: 1 | 2 | 3      // 1=低, 2=中, 3=高
): { threat: string; risk: string; score: number } {const score = likelihood * impact;let risk = "低";if (score >= 7) risk = "高";else if (score >= 4) risk = "中";return { threat, risk, score };
}// 使用示例
const mcpRiskMatrix = [assessRisk("未授权工具访问", 3, 3),  // 高风险assessRisk("配置文件泄露", 2, 3),    // 中风险assessRisk("日志信息泄露", 2, 1)     // 低风险
];

1.3 安全优先级确定

基于风险评估结果,可以建立MCP系统的安全优先级框架:

1.3.1 关键安全领域排序
const securityPriorities = [{area: "身份验证与授权",priority: "高",rationale: "直接影响谁可以访问MCP系统及其功能"},{area: "工具API安全",priority: "高",rationale: "防止工具被滥用执行未授权操作"},{area: "数据传输加密",priority: "高",rationale: "保护传输中的敏感信息不被截获"},{area: "输入验证",priority: "中",rationale: "防止注入攻击和不合法输入"},{area: "错误处理与日志",priority: "中",rationale: "确保安全事件可被检测和回溯"},{area: "依赖项安全",priority: "中",rationale: "减轻第三方库引入的风险"}
];
1.3.2 制定安全规划路线图

根据安全优先级,可以制定分阶段的安全实施路线图:

  1. 基础安全阶段:实现必要的身份验证、加密和输入验证
  2. 增强安全阶段:添加细粒度访问控制、异常检测和安全审计
  3. 高级安全阶段:实施高级威胁防护、自动化安全测试和持续监控

1.4 典型攻击场景分析

以下是MCP系统可能面临的典型攻击场景及其防御策略:

1.4.1 工具命令注入攻击

攻击场景:攻击者构造恶意输入,尝试在工具执行上下文中注入命令。

// 易受攻击的工具实现
const vulnerableFileTool = {name: "readFile",description: "读取文件内容",parameters: {path: { type: "string", description: "文件路径" }},handler: async ({ path }) => {// 危险: 直接使用用户输入而不验证const command = `cat ${path}`;return executeCommand(command); // 可能遭受命令注入}
};// 防御示例
const secureFileTool = {name: "readFile",description: "读取文件内容",parameters: {path: { type: "string", description: "文件路径" }},handler: async ({ path }) => {// 验证输入是否为安全的文件路径if (!isValidFilePath(path)) {throw new Error("无效的文件路径");}// 使用安全的文件读取API而非命令执行return fs.promises.readFile(path, 'utf-8');}
};function isValidFilePath(path: string): boolean {// 实现路径验证逻辑return /^[a-zA-Z0-9_\-\/\.]+$/.test(path) && !path.includes('..');
}
1.4.2 权限逃逸攻击

攻击场景:攻击者尝试绕过访问控制,获取未授权的资源。

// 易受攻击的实现
app.get('/api/mcp/resources/:resourceId', async (req, res) => {const { resourceId } = req.params;// 危险: 未检查用户是否有权访问该资源const resource = await getResource(resourceId);res.json(resource);
});// 防御示例
app.get('/api/mcp/resources/:resourceId', async (req, res) => {const { resourceId } = req.params;const userId = getUserIdFromToken(req.headers.authorization);// 先检查权限if (!await hasAccessToResource(userId, resourceId)) {return res.status(403).json({ error: '无权访问此资源' });}const resource = await getResource(resourceId);res.json(resource);
});
1.4.3 中间人攻击

攻击场景:攻击者截获MCP客户端与服务器之间的通信。

防御策略

  • 始终使用TLS加密通信
  • 实现证书验证
  • 考虑使用HTTP严格传输安全(HSTS)
import https from 'https';
import fs from 'fs';
import express from 'express';const app = express();// HTTPS服务器配置
const httpsOptions = {key: fs.readFileSync('server.key'),cert: fs.readFileSync('server.cert'),// 强制使用现代TLS版本minVersion: 'TLSv1.2'
};// 设置HSTS头
app.use((req, res, next) => {res.setHeader('Strict-Transport-Security','max-age=31536000; includeSubDomains; preload');next();
});// 创建HTTPS服务器
https.createServer(httpsOptions, app).listen(443, () => {console.log('MCP服务器在HTTPS端口443上启动');
});

通过深入分析MCP应用面临的威胁模型并进行全面风险评估,开发者可以有的放矢地构建安全体系,为后续的安全实施奠定坚实基础。

2. 数据加密与传输安全

MCP系统处理的数据可能包含敏感信息,保护这些数据的安全至关重要。本节将探讨如何在MCP应用中实现数据加密与传输安全。

2.1 通信层加密实现

MCP应用需要确保客户端与服务器之间的所有通信都经过加密,防止数据在传输过程中被窃取或篡改。

2.1.1 TLS/SSL配置

在MCP服务器中实现TLS加密:

import { McpServer } from '@modelcontextprotocol/typescript-sdk';
import https from 'https';
import fs from 'fs';// 读取TLS证书
const options = {key: fs.readFileSync('private-key.pem'),cert: fs.readFileSync('certificate.pem'),// 推荐的TLS安全配置ciphers: 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256',minVersion: 'TLSv1.2',// 可选:要求客户端证书进行双向TLS认证requestCert: false,rejectUnauthorized: false
};// 创建HTTPS服务器
const httpsServer = https.createServer(options);// 配置MCP服务器使用HTTPS
const mcpServer = new McpServer({transport: {type: 'http',server: httpsServer}
});httpsServer.listen(443, () => {console.log('MCP HTTPS服务器启动在端口443');
});
2.1.2 客户端连接安全

MCP客户端在连接服务器时应验证TLS证书:

import { McpClient } from '@modelcontextprotocol/typescript-sdk';
import https from 'https';
import fs from 'fs';// 创建安全的HTTPS代理
const httpsAgent = new https.Agent({// 可信CA证书列表,用于验证服务器证书ca: fs.readFileSync('trusted-ca.pem'),// 检查服务器名称是否与证书匹配checkServerIdentity: (host, cert) => {// 实现证书验证逻辑if (!cert.subject.CN.includes(host)) {return new Error('证书CN不匹配目标主机');}return undefined; // 验证通过},// 可选:客户端证书(双向TLS)key: fs.readFileSync('client-key.pem'),cert: fs.readFileSync('client-cert.pem')
});// 配置客户端使用安全连接
const client = new McpClient({url: 'https://mcp-server.example.com',httpsAgent
});

2.2 敏感数据存储加密

除了传输安全,MCP应用还需要保护存储中的敏感数据。

2.2.1 配置文件加密

敏感配置(如API密钥)应加密存储:

import crypto from 'crypto';
import fs from 'fs';// 加密配置数据
function encryptConfig(configData: any, masterKey: Buffer): string {// 生成随机初始化向量const iv = crypto.randomBytes(16);// 创建加密器const cipher = crypto.createCipheriv('aes-256-gcm', masterKey, iv);// 加密数据let encrypted = cipher.update(JSON.stringify(configData), 'utf8', 'hex');encrypted += cipher.final('hex');// 获取认证标签const authTag = cipher.getAuthTag();// 组合IV、认证标签和加密数据return JSON.stringify({iv: iv.toString('hex'),authTag: authTag.toString('hex'),encryptedData: encrypted});
}// 解密配置数据
function decryptConfig(encryptedString: string, masterKey: Buffer): any {const encryptedObj = JSON.parse(encryptedString);// 从存储的格式中提取组件const iv = Buffer.from(encryptedObj.iv, 'hex');const authTag = Buffer.from(encryptedObj.authTag, 'hex');const encryptedData = encryptedObj.encryptedData;// 创建解密器const decipher = crypto.createDecipheriv('aes-256-gcm', masterKey, iv);decipher.setAuthTag(authTag);// 解密数据let decrypted = decipher.update(encryptedData, 'hex', 'utf8');decrypted += decipher.final('utf8');return JSON.parse(decrypted);
}// 使用示例
const masterKey = crypto.scryptSync('强密码', '盐值', 32); // 安全地生成密钥// 存储加密配置
const config = {apiKey: 'super-secret-api-key',userCredentials: {username: 'admin',password: 'secret-password'}
};const encryptedConfig = encryptConfig(config, masterKey);
fs.writeFileSync('config.encrypted', encryptedConfig);// 读取并解密配置
const storedConfig = fs.readFileSync('config.encrypted', 'utf8');
const decryptedConfig = decryptConfig(storedConfig, masterKey);
2.2.2 会话数据加密

MCP会话数据的安全存储:

import { McpServer } from '@modelcontextprotocol/typescript-sdk';
import crypto from 'crypto';// 加密会话存储实现
class EncryptedSessionStore {private encryptionKey: Buffer;private sessions: Map<string, string> = new Map();constructor(encryptionKey: Buffer) {this.encryptionKey = encryptionKey;}// 存储加密会话async saveSession(sessionId: string, sessionData: any): Promise<void> {const encrypted = this.encryptData(JSON.stringify(sessionData));this.sessions.set(sessionId, encrypted);}// 获取并解密会话async getSession(sessionId: string): Promise<any | null> {const encrypted = this.sessions.get(sessionId);if (!encrypted) return null;try {const decrypted = this.decryptData(encrypted);return JSON.parse(decrypted);} catch (error) {console.error('会话解密失败:', error);return null;}}// 删除会话async deleteSession(sessionId: string): Promise<void> {this.sessions.delete(sessionId);}// 加密数据private encryptData(data: string): string {const iv = crypto.randomBytes(16);const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);let encrypted = cipher.update(data, 'utf8', 'hex');encrypted += cipher.final('hex');const authTag = cipher.getAuthTag();return JSON.stringify({iv: iv.toString('hex'),authTag: authTag.toString('hex'),data: encrypted});}// 解密数据private decryptData(encryptedJson: string): string {const { iv, authTag, data } = JSON.parse(encryptedJson);const decipher = crypto.createDecipheriv('aes-256-gcm', this.encryptionKey, Buffer.from(iv, 'hex'));decipher.setAuthTag(Buffer.from(authTag, 'hex'));let decrypted = decipher.update(data, 'hex', 'utf8');decrypted += decipher.final('utf8');return decrypted;}
}// 生成安全的加密密钥
const sessionKey = crypto.randomBytes(32);
const sessionStore = new EncryptedSessionStore(sessionKey);// 在MCP服务器中使用加密会话存储
const server = new McpServer({sessionStorage: {async save(sessionId, data) {await sessionStore.saveSession(sessionId, data);},async load(sessionId) {return sessionStore.getSession(sessionId);},async delete(sessionId) {await sessionStore.deleteSession(sessionId);}}
});

2.3 密钥管理最佳实践

有效的密钥管理是数据加密安全性的关键。

2.3.1 密钥轮换机制

实现定期密钥轮换以提高安全性:

import crypto from 'crypto';class KeyRotationManager {private currentKey: Buffer;private previousKeys: Map<string, Buffer> = new Map();private keyLifetimeMs: number;private currentKeyId: string;constructor(keyLifetimeMs: number = 7 * 24 * 60 * 60 * 1000) { // 默认7天this.keyLifetimeMs = keyLifetimeMs;// 生成初始密钥this.currentKeyId = this.generateKeyId();this.currentKey = crypto.randomBytes(32);// 设置定期轮换setInterval(() => this.rotateKey(), this.keyLifetimeMs);}private generateKeyId(): string {return Date.now().toString(36) + Math.random().toString(36).substr(2, 5);}private rotateKey(): void {// 保存当前密钥this.previousKeys.set(this.currentKeyId, this.currentKey);// 生成新密钥this.currentKeyId = this.generateKeyId();this.currentKey = crypto.randomBytes(32);// 移除过期密钥(保留最近的5个密钥)const keyIds = Array.from(this.previousKeys.keys());if (keyIds.length > 5) {const oldestKeyId = keyIds[0];this.previousKeys.delete(oldestKeyId);}console.log(`密钥已轮换,新密钥ID: ${this.currentKeyId}`

相关文章:

【MCP Node.js SDK 全栈进阶指南】高级篇(3):MCP 安全体系建设

背景 随着MCP协议在企业和个人应用中的广泛采用,安全性已成为MCP系统设计和开发中不可忽视的核心要素。一个健壮的MCP安全体系不仅能保护敏感数据和用户隐私,还能确保AI模型与外部工具交互的可靠性和完整性。本文将深入探讨MCP TypeScript-SDK的安全体系建设,帮助开发者构建…...

C++智能指针

智能指针是C中用于自动管理动态分配内存的类模板&#xff0c;它们通过在适当的时机自动释放内存来帮助防止内存泄漏。C11引入了以下几种主要的智能指针&#xff1a; 1. std::unique_ptr 独占所有权的智能指针&#xff0c;同一时间只能有一个unique_ptr指向特定对象。 #inclu…...

基于STM32、HAL库的ATECC608B安全验证及加密芯片驱动程序设计

一、简介: ATECC608B是Microchip公司生产的一款安全加密芯片,提供以下主要特性: 基于硬件的高安全性加密算法 ECC P-256加密引擎 SHA-256哈希算法 AES-128加密 真随机数生成器(TRNG) 16KB安全存储空间 IC接口(最高1MHz) 低功耗设计,适合物联网应用 二、硬件接口: ATECC60…...

【安全扫描器原理】ICMP扫描

【安全扫描器原理】ICMP扫描 1.ICMP协议概述2.ping命令3.tracert命令4.ICMP通信实例5.ICMP协议内容6.ICMP扫描的安全性7.ICMP扫描器的原理及优化策略1.ICMP协议概述 ICMP是TCP/IP协议族中的一个重要协议,主要用于在IP主机之间、主机和路由器之间传递控制消息,这些控制消息包…...

前端 AI 开发实战:基于自定义工具类的大语言模型与语音识别调用指南

在人工智能技术快速发展的今天&#xff0c;将大语言模型&#xff08;LLM&#xff09;和语音识别&#xff08;ASR&#xff09;功能集成到前端应用中&#xff0c;已经成为提升用户体验、打造智能化应用的重要手段。本文将结合一段实际的 AI 工具类代码&#xff0c;详细讲解如何在…...

组件轮播与样式结构重用实验

任务一&#xff1a;使用“Swiper 轮播组件”对自行选择的图片和文本素材分别进行轮播&#xff0c;且调整对应的“loop”、“autoPlay”“interval”、“vertical”属性&#xff0c;实现不同的轮播效果&#xff0c;使用Swiper 样式自定义&#xff0c;修改默认小圆点和被选中小圆…...

(计数)洛谷 P8386 PA2021 Od deski do deski/P10375 AHOI2024 计数 题解

题意 给定 n n n&#xff0c; m m m&#xff0c;求满足以下限制的长度为 n n n 的序列数目&#xff1a; 每个元素在 [ 1 , m ] [1,m] [1,m] 之间&#xff1b;一次操作定义为删除一个长度至少为 2 2 2 且区间两端相等的区间&#xff0c;该序列需要在若干次操作内被删空。 …...

基于C++数据结构双向循环链表实现的贪吃蛇

大二上数据结构I-课程设计 1.设计思路 建模&#xff1a;程序界面是一个二维平面图蛇&#xff1a;蛇的身体可以看作是链表的节点&#xff0c;当蛇吃到食物时&#xff0c;就增加一节链表节点食物&#xff1a;相应地在边界内随机生成蛇的移动&#xff1a;取得上下左右键的ASCII码…...

H3C ER3208G3路由实现内网机器通过公网固定IP访问内网服务器

内网机器可以通过内网访问服务器&#xff1b;公网机器可以通过公网固定IP访问服务器&#xff1b;但内网机器无法通过公网固定IP访问内网服务器&#xff1b;想实现内网机器通过公网固定IP访问内网服务器 WEB登录管理后台&#xff0c;网络设置->NAT配置&#xff0c;选“高级配…...

Vue3+Three JS高德地图自定义经纬度实现围栏

Vue3实现代码 index.html需要引入three.js <script src"https://cdn.jsdelivr.net/npm/three0.142/build/three.js"></script> 围栏组件 <template><div id"mapContainer" ref"mapContainer"></div> </templ…...

远程访问你的家庭NAS服务器:OpenMediaVault内网穿透配置教程

文章目录 前言1. OMV安装Cpolar工具2. 配置OMV远程访问地址3. 远程访问OMV管理界面4. 固定远程访问地址 前言 在这个数据爆炸的时代&#xff0c;无论是管理家人的照片和视频&#xff0c;还是企业老板处理财务报表和技术文档&#xff0c;高效的数据管理和便捷的文件共享已经变得…...

4.2.3 MYSQL事务原理分析

文章目录 4.2.3 MYSQL事务原理分析1. 事务1. 前提&#xff1a;并发连接访问2. 事务定义3. 事务语句&#xff1a;4. acid特性5. undolog-回滚日志6. redolog-重做日志 2. 隔离级别1. 四种隔离级别2. 并发问题解释3. 隔离级别设置 3. MVCC(Multiversion Concurrency Control&…...

极狐GitLab 如何使用文件导出迁移项目和群组?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 用文件导出迁移项目和群组 (FREE ALL) 推荐使用 直接传输 迁移群组和项目。然而&#xff0c;在某些情况下&#xff0c;您可能…...

Linux/AndroidOS中进程间的通信线程间的同步 - 管道和FIFO

前言 管道是 UNIX 系统上最古老的 IPC 方法&#xff0c;它在 20 世纪 70 年代早期 UNIX 的第三个版本上就出现了。管道为一个常见需求提供了一个优雅的解决方案&#xff1a;给定两个运行不同程序的进程&#xff0c;在 shell 中如何让一个进程的输出作为另一个进程的输入呢&…...

第十六届蓝桥杯 2025 C/C++组 破解信息

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P12344 [蓝桥杯 2025 省 B/Python B 第二场] 破解信息…...

[FPGA Video IP] VDMA

Xilinx AXI Video Direct Memory Access IP (PG020) 详细介绍 概述 Xilinx AXI Video Direct Memory Access (AXI VDMA) LogiCORE™ IP 核&#xff08;PG020&#xff09;是一个软核 IP&#xff0c;专为视频应用设计&#xff0c;提供在内存与 AXI4-Stream 视频外设之间的高带宽…...

Ubuntu如何查看硬盘的使用情况,以及挂载情况。

在Ubuntu中查看硬盘使用情况及挂载情况&#xff0c;可通过以下命令实现&#xff1a; 一、查看硬盘使用情况 df -h 显示所有挂载文件系统的磁盘空间使用情况&#xff08;含总容量、已用空间、可用空间等&#xff09;&#xff0c;输出结果以易读格式&#xff08;如GB、MB&#x…...

第十六届蓝桥杯 2025 C/C++组 脉冲强度之和

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P12338 [蓝桥杯 2025 省 B/Python B 第二场] 脉冲强度…...

23种设计模式-行为型模式之中介者模式(Java版本)

Java 中介者模式&#xff08;Mediator Pattern&#xff09;详解 &#x1f9e0; 什么是中介者模式&#xff1f; 中介者模式是一种行为型设计模式&#xff0c;它通过定义一个中介者对象来封装一组对象之间的交互。中介者使得各个对象不需要显式地知道彼此之间的关系&#xff0c…...

集群与存储-lvs-nat实验

一、实验目的 1、熟练掌握ipvsadm 指令的使用 2、理解lvs 负载均衡的原理 3. 熟练掌握lvs-netnfs的配置 二、实验内容 1.拓扑图 2.实验步骤 #在节点服务器中添加网卡&#xff0c;选择仅主机模式 #查看网卡 #启用网卡 nmcli device up ens224 ip a #修改虚拟地址的网关 #…...

Android——Serializable和Parcelable

在Android中传递对象的方式 在 Android 开发中&#xff0c;Parcelable 和 Serializable 是两种用于对象序列化的接口 Serializable public class Student implements Serializable {public int id;public String name;public int age;public Student(int id, String name, i…...

python:sklearn 决策树(Decision Tree)

5. 决策树&#xff08;Decision Tree&#xff09; - 第5章 算法思想&#xff1a;基于信息增益&#xff08;ID3&#xff09;或基尼不纯度&#xff08;CART&#xff09;递归划分特征。 编写 test_dtree_1.py 如下 # -*- coding: utf-8 -*- """ 5. 决策树&…...

0-1背包难题哪家强:回溯法 VS 动态规划 VS 贪心算法

回溯法、动态规划和贪心算法是三种常见的算法设计思想&#xff0c;他们都可以用来解决0-1背包问题&#xff0c;但它们在解决问题的思路、适用条件和效率上存在显著差异。以下从多个维度进行对比分析&#xff1a; 相关系列文章链接: 《贪心算法 vs 动态规划&#xff1a;“急性子…...

JavaSE第12篇:接口interface

一、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore) import ssl ssl._create_default_https_con…...

一文掌握 npm 基础与常用指令

初学前端&#xff1f;npm 常用指令不熟&#xff1f;想了解 pnpm、yarn、cnpm 有什么不同&#xff1f; 这篇文章将带你从入门到精通&#xff0c;全面掌握 npm 的使用方法&#xff0c;以及选择适合自己项目的包管理工具&#xff01; 文章目录 一、什么是 npm&#xff1f;二、npm …...

OpenObserve API Usage Guide for Log Management

OpenObserve API Usage Guide for Audit Log Management 1. 概述 1.1 目标 本文档旨在详细介绍 OpenObserve 的 API 使用方法&#xff0c;帮助用户通过 API 实现日志管理功能&#xff0c;包括日志摄入、查询、模糊匹配&#xff08;类似 SQL 的 LIKE&#xff09;、stream 管理…...

机器学习实操 第一部分 机器学习基础 第5章 支持向量机(SVM)

机器学习实操 第一部分 机器学习基础 第5章 支持向量机&#xff08;SVM&#xff09; 内容概要 第5章深入介绍了支持向量机&#xff08;SVM&#xff09;&#xff0c;这是一种功能强大且应用广泛的机器学习模型。SVM适用于线性或非线性分类、回归以及 novelty detection。本章详…...

CSRF(cross-site request forgery)跨域请求访问

CSRF 当我们在成功登录一个网站后&#xff0c;会将后端返回的cookie数据进行存放&#xff0c;每一次访问该域名都会将cookie存放在请求头&#xff0c;也就相当于用户登录凭证&#xff0c; 但这种同域自动携带cookie存在一种问题 那就是当恶意网站也进去请求时&#xff0c;同样…...

Kafka的Rebalance机制可能引发什么问题?如何优化?怎么减少不必要的Rebalance

Rebalance机制的核心目的是确保每个消费者都能处理适当数量的分区&#xff0c;以实现负载均衡和高可用性。 一般是消费者组发生变化的时候&#xff0c;比如订阅主题&#xff0c;消费者数量等等发生变化&#xff0c;可能会导致rebalance&#xff0c;rebalance会导致消费者组短时…...

【和春笋一起学C++】函数——C++的编程模块

目录 1. 原型句法 2. 函数分类 3. 函数参数之按值传递 4. 数组作为函数参数 在C中&#xff0c;要使用函数&#xff0c;必须要有这三个方面&#xff1a; 函数原型&#xff0c;函数原型描述了函数到编译器的接口&#xff0c;函数原型一般放在include文件中。函数原型告诉编译…...

Java高频面试之并发编程-11

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;父子线程如何共享数据&#xff1f; 在Java中&#xff0c;父子线程共享数据可以通过以下几种方式实现&#xff0c;具体…...

LangChain入门(四) 部署应用程序

1、使用LangServe部署应用程序 安装langserve pip install langserve[all] 代码示例 from fastapi import FastAPI from langchain.chat_models import init_chat_model from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.output_parser…...

精益数据分析(31/126):电商关键指标深度解析与实战策略

精益数据分析&#xff08;31/126&#xff09;&#xff1a;电商关键指标深度解析与实战策略 在创业和数据分析的探索之路上&#xff0c;每一次深入学习都像是解锁了新的技能&#xff0c;让我们离成功更近一步。今天&#xff0c;我依旧带着和大家共同进步的想法&#xff0c;深入…...

【MongoDB篇】MongoDB的集合操作!

目录 引言第一节&#xff1a;集合的“诞生”——自动出现还是手动打造&#xff1f;&#x1f914;第二节&#xff1a;集合的“查阅”——看看这个数据库里有哪些柜子&#xff1f;&#x1f4c2;&#x1f440;第三节&#xff1a;集合的“重命名”——给文件柜换个名字&#xff01;…...

antd中的表格穿梭框(Transfer)如何使用

穿梭框是什么?怎么使用? 需求如下: 有一组端口需要分配给具体接口 功能要求: 1. 需要展示当前端口名称及其所属的接口 2. 需支持搜索功能可对端口名或接口名进行筛选便于分配 3. 分配端口时,需检测当前接口内的端口是否满足此接口最低要求 4. 提供Select下拉框,可供查…...

联邦学习与安全多方计算的结合是隐私保护机器学习领域

联邦学习(Federated Learning, FL)与安全多方计算(Secure Multi-Party Computation, MPC)的结合是隐私保护机器学习领域的前沿方向,其框架设计需兼顾计算效率、安全性和可扩展性。以下是结合两者的框架设计与实现流程的详细解析: 一、框架设计核心目标 隐私保护:确保多…...

mongoose的介绍,连接数据库

Mongoose 是一个基于 Node.js 的 MongoDB ODM&#xff08;Object Data Modeling&#xff09;库&#xff0c;用于在 MongoDB 和 Node.js 应用之间提供结构化的模型层&#xff0c;帮助你更优雅、安全地操作数据库。 &#x1f9fe; 一、Mongoose 简介 &#x1f4e6; 功能&#xff…...

Pytest中的fixture装饰器详解

pytest是Python生态中最流行的自动化测试框架&#xff0c;它通过简洁的语法、强大的功能(如fixture、参数化、插件扩展等)和丰富的插件生态&#xff0c;帮助开发者高效完成单元测试、集成测试和端到端测试。fixture是pytest框架中最核心、最强大的功能之一&#xff0c;它提供了…...

Linux系统配置JDK

目录 一、xftp传输JDK包 1、新建xftp会话并连接到我们的服务器 2、上传jdk包 二、配置环境变量 为了方便javaweb项目的建立&#xff0c;我们需要在搭建好的linux环境下配置安装JDK环境 一、xftp传输JDK包 因为jdk包文件比较大了&#xff0c;这时候不能使用简单的linux上传…...

通义千问最新一代大语言模型Qwen3发布了

通义千问Qwen3全面解析&#xff1a;最强开源大模型Ollama本地运行实战 &#x1f525; 最新重大好消息&#xff01; 经过漫长的等待&#xff0c;今天凌晨阿里云正式发布了Qwen3大语言模型&#xff01;本次更新带来了0.6b 1.7b 4b 8b 14b 30b 32b 235b超大参数模型&#xff0c;更…...

想做博闻强记的自己

2025年4月29日&#xff0c;13~25℃&#xff0c;还好 待办&#xff1a; 冶金《物理》期末测试 阅卷&#xff08;冶金《物理》期末测试试卷&#xff09; 重修《物理》《物理2》电子材料归档 规则变更&#xff0c;《高等数学2》期末试卷推倒重来 遇见&#xff1a;直播画面。 感受…...

爱普生SG2520HHN晶振数据中心服务器的理想解决方案

在当今数字化时代&#xff0c;数据中心作为海量数据存储、处理与传输的核心枢纽&#xff0c;其服务器的高效稳定运行至关重要。服务器作为其核心设备&#xff0c;对时钟信号的精度和稳定性提出了严苛要求——微小的时序误差可能导致数据传输失败或系统宕机。爱普生 SG2520HHN 差…...

【Prometheus-MySQL Exporter安装配置指南,开机自启】

目录 1. 创建 MySQL 监控用户2. 配置 MySQL 认证文件3. 安装 mysqld_exporter4. 配置 Systemd 服务5. 启动并验证服务6. 修改Prometheus配置常见错误排查错误现象排查步骤 6. 验证监控数据关键注意事项 1. 创建 MySQL 监控用户 mysql -uroot -p123456 # 登录MySQL-- 1. 创建监…...

Linux 服务管理两种方式service和systemctl

Linux 服务管理两种方式service和systemctl 确定当前系统使用的哪种命令用来启动服务 SysV init 或者 systemd 使用下面的命令&#xff1a; ps -p 1例如&#xff0c;输出&#xff1a; PID TTY TIME CMD1 ? 00:00:02 systemdSysV init service命令用于对系统…...

P1494 [国家集训队] 小 Z 的袜子 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 q q q 次查询&#xff0c;每次查询给定 ( l , r ) (l,r) (l,r). 你需要求出 2 ∑ i ≤ i < j ≤ r [ a i a j ] ( r − l ) ( r − l 1 ) \dfrac{2\sum…...

(开源)视频画面增强模型:Ev-DeblurVSR (可以解决视频画面不清晰的问题)

在计算机视觉领域&#xff0c;模糊视频超分辨率&#xff08;BVSR&#xff09;是一个复杂且具有挑战性的任务&#xff0c;目标是从低分辨率&#xff08;LR&#xff09;和模糊的输入生成高分辨率&#xff08;HR&#xff09;视频。传统方法常常因缺乏足够运动信息和高频细节而表现…...

探索豆包WEB/PC超能创意1.0:创意新利器的全面解析

在当今数字化创意蓬勃发展的时代&#xff0c;新工具不断涌现&#xff0c;为创作者们带来了更多的可能性。豆包WEB/PC超能创意1.0便是其中一款备受瞩目的产品&#xff0c;它的出现为创意工作者和爱好者们打开了一扇充满无限可能的大门。 一、体验信息&#xff1a;探索创意新领域…...

五、UI自动化测试05--PyTest框架

目录 一、PyTest 框架2. 特点2. 安装步骤3. 基本使⽤3.1 测试函数形式3.2 执⾏⽅式3.3 测试类形式3.4 执⾏⽅式3.5 另⼀种执⾏⽅式: 主函数执⾏3.6 特殊⽅法: 函数级别3.7 特殊⽅法: 类级别3.8 特殊⽅法: 函数级别和类级别同时使⽤ 4. pytest 配置⽂件4.1 选项字段获取4.2 编写…...

51LA使用方法与悟空统计,网站数据分析的双重选择

在网站运营与数据分析领域&#xff0c;51LA作为国内较早的流量统计工具&#xff0c;曾为许多用户提供基础的访问数据监测服务。然而&#xff0c;随着技术的发展和用户需求的升级&#xff0c;越来越多的企业开始寻求功能更全面、体验更优的统计工具。小编今天将给大家介绍一款更…...

MongoDB的下载安装与启动

MongoDB的下载安装与启动&#xff0c; 一、MongoDB下载安装 1. 官网下载 打开官网&#xff1a;https://www.mongodb.com/try/download/community选择&#xff1a; 版本&#xff08;Version&#xff09;&#xff1a;选最新版或者根据需要选旧版。平台&#xff08;OS&#xff0…...