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

日志Python安全之SSTI——Flask/Jinja2

ssti的概念和模板引擎介绍等基础知识前面已经学过了,接下来直接进入正题

先了解flask/jinja2:

flask:

用python编写的一个框架,集成 Jinja2 模板引擎(用于动态生成 HTML 内容)。

Flask 的核心组件:

(1)路由:路由是 Web 应用程序中的一个机制,用于HTTP请求如GETPOST 等的 URL 路径与后端的处理逻辑(通常是 Python 函数关联起来,在 Flask 中,路由通过装饰器 @app.route() 来定义。找个代码解释:

基本路由:

from flask import Flaskapp = Flask(__name__)# 定义路由
@app.route('/')
def home():return "Hello, World!"@app.route('/about')
def about():return "This is the about page."

@app.route('/'):将‘/’目录,映射到home函数,也就是当用户访问:http://localhost:5000/ 时,Flask 会调用home函数,并返回"Hello, World!"。

@app.route('/about'):同理

动态路由:

@app.route('/user/<username>')
def show_user_profile(username):return f"User: {username}"

<username>:动态部分,可以匹配任意字符串。

当用户访问 http://localhost:5000/user/john 时,username的值会是‘john’,Flask 会调用 show_user_profile 函数并返回“User:john”。

指定 HTTP 方法:

默认情况下,路由只响应 GET 请求。但是可以通过‘methods'参数指定路由支持的 HTTP 方法。

@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':return "Login submitted!"else:return "Show login form."

GET请求访问/login时,返回登录表单,post请求提交表单时,返回Login submitted!

(2)请求和响应

Flask 提供了 request 对象来访问 HTTP 请求数据,以及 make_response 函数来生成 HTTP 响应。

request对象中常用的属性:

属性/方法说明
request.method获取 HTTP 请求方法(如 GETPOST 等)。
request.url获取完整的请求 URL(如 http://example.com/path?query=value)。
request.path获取 URL 的路径部分(如 /path)。
request.args获取 URL 中的查询参数(GET 请求的参数),返回一个字典。
request.form获取表单数据(POST 请求的数据),返回一个字典。
request.json获取 JSON 格式的请求体(适用于 POSTPUT 请求)。
request.headers获取请求的头部信息,返回一个字典。
request.cookies获取客户端发送的 Cookies,返回一个字典。
request.files获取上传的文件,返回一个字典。
request.remote_addr获取客户端的 IP 地址。

默认情况下,视图函数返回的字符串会被 Flask 包装成一个 HTTP 响应,状态码为200 OK,内容类型为text/html

使用make_response自定义响应,make_response的第一个参数是响应内容,第二个参数是状态码,并且可以通过response.headers设置响应头部。找到一个常规代码参考:

from flask import Flask, request, make_responseapp = Flask(__name__)@app.route('/greet')
def greet():name = request.args.get('name', 'Guest')  # 获取 URL 参数response = make_response(f"Hello, {name}!")  # 生成响应response.set_cookie('username', name)  # 设置 Cookiereturn response

相应里还有一些设置cookie,返回文件啥的,看这个文章吧:https://blog.csdn.net/2401_88743143/article/details/146267602?sharetype=blogdetail&sharerId=146267602&sharerefer=PC&sharesource=2401_88743143&sharefrom=mp_from_link

(3)模板渲染 

Flask 默认使用 Jinja2 模板引擎来渲染 HTML 模板。通过 render_template 函数,可以将动态数据传递给模板并生成最终的 HTML。

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/hello')
def hello():name = "World"return render_template('hello.html', name=name)

templates/hello.html 文件中:

<!DOCTYPE html>
<html>
<head><title>Hello</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

 Jinja2 模板引擎:

(1)Jinja2 的基本语法:

  • 变量:{{ variable }}

  • 控制结构: {% ... %} ,支持条件判断、循环等。

  • 过滤器:{{ variable|filter }} ,用于对变量进行处理。

  • 注释:用 {# ... #} 表示,注释内容不会被渲染。

 偷个代码方便分析:

应用示例:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def home():# 定义上下文数据context = {'title': 'Home Page','name': 'John','is_student': True}# 渲染模板并返回响应return render_template('home.html', **context)if __name__ == '__main__':app.run(debug=True)

模板文件:在templates/home.html文件中:

<!DOCTYPE html>
<html>
<head><title>{{ title }}</title>
</head>
<body><h1>Hello, {{ name }}!</h1>{% if is_student %}<p>You are a student.</p>{% else %}<p>You are not a student.</p>{% endif %}
</body>
</html>

{{ title }}会被替换为'Home Page'。{{ name }}会被替换为'John'。根据is_student的值,显示不同的内容。

好了,继续深入了解一下吧:

下面是一些基础的魔术方法:

  •  __class__:返回对象所属的类。
s = "hello"
print(s.__class__)  # 输出: <class 'str'>
  •  __bases__:以元组的形式返回一个类直接继承的父类。
class A:passclass B(A):passprint(B.__bases__)  # 输出: (<class '__main__.A'>,)

B继承自 A,所以B.__bases__返回(<class '__main__.A'>,)。

  • __mro__:返回方法解析顺序(Method Resolution Order, MRO),即类继承的顺序。
class A:passclass B(A):passclass C(B):passprint(C.__mro__)
# 输出: (<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

C.__mro__返回从C到object的继承链。

  • __subclasses__():返回一个类的所有直接子类。
class A:passclass B(A):passclass C(A):passprint(A.__subclasses__())
# 输出: [<class '__main__.B'>, <class '__main__.C'>]

A.__subclasses__()返回 A 的所有直接子类 BC

  • __init__:在创建类的对象时自动调用,即初始化对象时调用,用于设置对象的初始状态。
    class Person:def __init__(self, name):self.name = namep = Person("John")
    print(p.name)  # 输出: John

    __init__方法在创建Person对象时被调用,用于初始化name属性。

代码解释:

  • self 是一个指向当前对象的引用,用于访问对象的属性和方法。

  • name 是一个参数,表示创建对象时需要传递的名字。

  • self.name = name 将传递的 name 参数赋值给对象的 name 属性。

  • __globals__:返回函数所在命名空间的全局变量字典。
x = 10def foo():y = 20print(foo.__globals__)foo()
# 输出: {'x': 10, ...(其他全局变量)}

foo.__globals__ 返回 foo 函数所在模块的全局变量字典。

注入思路|payload

感觉这个好麻烦ing

注入思路:随便找一个内置类对象用__class__拿到他所对应的类,用__bases__拿到基类(<class 'object'>),用__subclasses__()拿到子类列表,在子类列表中直接寻找可以利用的类getshell

''.__class__.__bases__[0].__subclasses__()
().__class__.__mro__[2].__subclasses__()
request.__class__.__mro__[1]

接下来只要找到能够利用的类(方法、函数)就好了:

找可利用的类(脚本):

from flask import Flask,request
from jinja2 import Template
search = 'eval'   
num = -1
for i in ().__class__.__bases__[0].__subclasses__():num += 1try:if search in i.__init__.__globals__.keys():print(i, num)except:pass

这个里面大哥总结了许多python2、python3通用payload:https://xz.aliyun.com/news/7341?time__1311=YqfxgiDt5eq05DK5qCqGKK4Qwtxjh2u8bD&u_atoken=9664eb0ebd7cdbb8b7bb128aec035d0f&u_asig=1a0c399b17419533867796649e0111#toc-10

Python安全之SSTI——Flask/Jinja2-腾讯云开发者社区-腾讯云

好吧做个例题巩固一下

[WesternCTF2018]shrine

分析代码, app.config['FLAG'] = os.environ.pop('FLAG')这段代码将FLAG存储到 app.config里并且从环境变量里删除它,@app.route('/shrine/') def shrine(shrine): def safe_jinja(s): s = s.replace('(', '').replace(')', '') blacklist = ['config', 'self'],这是一个过滤,先将所有的()替换成‘ ’,然后绕过直接出现'config', 'self',所以需要间接访问,最后渲染,因为将FLAG放到了app.config中,所以需要访问config

构造payload:

/shrine/{{url_for.__globals__['current_app'].config['FLAG']}}

访问 /shrine/ 路径时,Flask 会调用 shrine 函数来处理请求,shrine 函数会将用户输入作为模板字符串渲染,从而触发服务器端模板注入(SSTI)漏洞

了解了一下payload的执行进程:

url_for

url_for 是 Flask 的一个全局函数,用于生成 URL。

url_for.__globals__ 返回 url_for 函数所在模块的全局变量字典。

url_for.__globals__['current_app']

current_app 是 Flask 的一个全局变量,指向当前的 Flask 应用实例。

通过 url_for.__globals__['current_app'],可以获取当前的 Flask 应用实例。

current_app.config['FLAG']

current_app.config 是 Flask 应用的配置字典。

current_app.config['FLAG'] 获取配置项 FLAG 的值。

当时不理解payload里也有config为啥也能绕过,搜了一下知道了黑名单的局限性:

黑名单机制只会将 直接出现的 config 替换为 None。在这个 Payload 中,config 并不是直接出现的,而是通过 url_for.__globals__['current_app'].config 访问的。黑名单机制无法检测到这种用全局函数间接访问方式。

最后得到flag

看别人的wp还用了一种payload

/shrine/{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}

get_flashed_messages 是 Flask 的一个全局函数,用于获取闪现消息(flashed messages)。闪现消息是 Flask 中用于在请求之间传递消息的一种机制。

通过 get_flashed_messages.__globals__,可以访问 Flask 应用的全局变量。

自己写payload还是difficult滴,但是感觉没太用到上面的方法,还是得多做点题,多分析大佬们构造的payload

其他:这个对有些模块的解释还是不错的CTF_Web:从0学习Flask模板注入(SSTI)_ctf flask-CSDN博客

相关文章:

日志Python安全之SSTI——Flask/Jinja2

ssti的概念和模板引擎介绍等基础知识前面已经学过了&#xff0c;接下来直接进入正题 先了解flask/jinja2&#xff1a; flask&#xff1a; 用python编写的一个框架&#xff0c;集成 Jinja2 模板引擎&#xff08;用于动态生成 HTML 内容&#xff09;。 Flask 的核心组件&…...

梯度下降法以及随机梯度下降法

梯度下降法就是在更新weight的时候&#xff0c;向函数值下降的最快方向进行更新&#xff0c;具体的原理我就不再写了&#xff0c;就是一个求偏导的过程&#xff0c;有高数基础的都能够很快的理解过程。我在我的github里面会一直更新自己学习pytorch的过程&#xff0c;地址为&am…...

从零基础到能独立设计单片机产品,一般需要经历哪些学习阶段?

相信很多人&#xff0c;内心都有“钢铁侠”的幻想&#xff0c;成为能写程序&#xff0c;能设计硬件&#xff0c;能设计结构&#xff0c;能焊接的全能型人才。 上次徐工问我&#xff0c;如果你财富自由了&#xff0c;想去做啥&#xff1f; 我说出来&#xff0c;可能大家都不信&a…...

ORACLE 19.8版本遭遇ORA-600 [kqrHashTableRemove: X lock].宕机的问题分析

客户反馈单机环境的一个数据库半夜突然宕机了&#xff0c;这是一个比较重要的系统&#xff1b;接到通知后分析对应日志&#xff0c;发现ALERT日志中有明显报错&#xff1a;ORA-600 [kqrHashTableRemove: X lock]. 600报错我简单的分为2类&#xff0c;一类不会导致宕机&#x…...

OpenCV实现图像分割与无缝合并

一、图像分割核心方法 1、阈值分割 #include <opencv2/opencv.hpp> using namespace cv; int main() {Mat img imread("input.jpg", IMREAD_GRAYSCALE);Mat binary;threshold(img, binary, 127, 255, THRESH_BINARY); // 固定阈值分割imwrite("binary.…...

《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成

《AI浪潮中的璀璨新星&#xff1a;Meta Llama、Ollama与DeepSeek的深度剖析》&#xff1a;此文为AI自动生成 引言&#xff1a;AI 大模型的群雄逐鹿时代 在科技飞速发展的当下&#xff0c;AI 大模型领域已成为全球瞩目的焦点&#xff0c;竞争激烈程度堪称白热化。从 OpenAI 推出…...

如何搭建个人静态住宅IP:从零开始

你好&#xff01;今天我们将一起探索如何从头开始搭建个人静态住宅IP。无论您是为了远程办公、在线教育还是游戏加速&#xff0c;静态住宅IP都能带给您更稳定的网络体验。 一、准备阶段 1. 明确需求 首先&#xff0c;您需要清楚自己为什么需要静态住宅IP。可能是为了实现远程…...

机器人触觉的意义

机器人触觉的重要性 触觉在机器人领域至关重要&#xff0c;尤其是在自主操作、精细操控、人机交互等方面。虽然视觉和语音技术已高度发展&#xff0c;但机器人在现实世界中的操作仍然受限&#xff0c;因为&#xff1a; 视觉有局限性&#xff1a;仅凭视觉&#xff0c;机器人难…...

【赵渝强老师】达梦数据库的目录结构

达梦数据库安装成功后&#xff0c;通过使用Linux的tree命令可以非常方便地查看DM 8的目录结构。 tree -L 1 -d /home/dmdba/dmdbms#输出的信息如下&#xff1a; /home/dmdba/dmdbms ├── bin 存放DM数据库的可执行文件&#xff0c;例如disql命令等。 ├── bin2 ├── d…...

centos7使用gpu加速的MinerU

https://mineru.readthedocs.io/zh-cn/latest/user_guide/install/boost_with_cuda.html 由于官方只有ubantu的安装教程&#xff0c;并没有基于centos7的&#xff0c;故需要自己修改命令安装并使用。 在运行此 Docker 容器之前&#xff0c;您可以使用以下命令检查您的设备是否…...

反射、反射调用以及修改成员变量,成员方法,构造函数、反射的应用

DAY11.2 Java核心基础 反射&#xff08;第二弹&#xff09; 第一弹请访问链接&#xff1a; 反射&#xff08;第一篇&#xff09; getMethod(String name, Class… parameterTypes)getMethods()getDeclaredMethod(String name,Class… parameterTypes)getDeclaredMethods() …...

对Spring的每种事务传播级别的应用场景和失效场景

好的&#xff0c;下面针对Spring的每种事务传播级别&#xff0c;详细说明其应用场景和失效场景&#xff0c;帮助更好地理解它们的实际使用。 1. REQUIRED&#xff08;默认&#xff09; 应用场景&#xff1a; 大多数业务方法&#xff0c;尤其是需要事务支持的操作。例如&#x…...

DeepSeek linux服务器(CentOS)部署命令笔记

Linux&#xff08;CentOS&#xff09;FinalShellOllama远程访问&#xff0c;本地部署deepseek 自备CentOS服务器&#xff0c;并且已经使用FinalShell连接到服务器 一、准备工作 1.更新服务器 apt-get update-y 2.下载Ollama curl -fsSL https://ollama.com/install.sh | …...

阿里巴巴发布 R1-Omni:首个基于 RLVR 的全模态大语言模型,用于情感识别

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

OpenCV 拆分、合并图像通道方法及复现

视频讲解 OpenCV 拆分、合并图像通道方法及复现 环境准备&#xff1a;安装 OpenCV 库&#xff08;pip install opencv-python&#xff09; 内容&#xff1a; 1. 读取任意图片&#xff08;支持 jpg/png 等格式&#xff09; 2. 使用 split () 函数拆解成 3 个单色通道&#xf…...

Node 使用 SSE 结合redis 推送数据(echarts 图表实时更新)

1、实时通信有哪些实现方式&#xff1f; 特性轮询&#xff08;Polling&#xff09;WebSocketSSE (Server-Sent Events)通信方向单向&#xff08;客户端 → 服务端&#xff09;双向&#xff08;客户端 ↔ 服务端&#xff09;单向&#xff08;服务端 → 客户端&#xff09;连接方…...

提升 Instagram 账号安全性:防止数据泄露的步骤

提升 Instagram 账号安全性&#xff1a;防止数据泄露的步骤 在这个数字化时代&#xff0c;Instagram 不仅是我们分享生活点滴的平台&#xff0c;也是个人信息交换的场所。随之而来的&#xff0c;是数据泄露的风险。保护好自己的 Instagram 账号&#xff0c;防止个人信息外泄&a…...

实现“XXX一张图“进行环境设施设备可视化管理

实现“电网一张图”、“铁路一张图”、“水库一张图”、“森林一张图”等概念,本质上是将某一领域的空间数据、设施设备、运行状态等信息整合到一个统一的数字化平台上,实现全域可视化、智能化管理和协同运营。这种“一张图”模式依赖于地理信息系统(GIS)、物联网(IoT)、…...

RTDETR融合[CVPR2025]ARConv中的自适应矩阵卷积

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Adaptive Rectangular Convolution for Remote Sensing Pansharpening》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2503.00467 代码链接&#xff1a;https:/…...

深度解读DeepSeek部署使用安全(48页PPT)(文末有下载方式)

深度解读DeepSeek&#xff1a;部署、使用与安全 详细资料请看本解读文章的最后内容。 引言 DeepSeek作为一款先进的人工智能模型&#xff0c;其部署、使用与安全性是用户最为关注的三大核心问题。本文将从本地化部署、使用方法与技巧、以及安全性三个方面&#xff0c;对Deep…...

微服务无状态服务设计

微服务无状态服务设计是构建高可用、高扩展性系统的核心方法。 一、核心设计原则 请求独立性 每个请求必须携带完整的上下文信息&#xff0c;服务不依赖本地存储的会话或用户数据。例如用户认证通过JWT传递所有必要信息&#xff0c;而非依赖服务端Session。 状态外置化 将会话…...

Android 高版本 DownloadManager 封装工具类,支持 APK 断点续传与自动安装

主要有以下优点 兼容高版本 Android&#xff1a;适配 Android 10 及以上版本的存储权限和安装权限。断点续传&#xff1a;支持从断点继续下载。下载进度监听&#xff1a;实时获取下载进度并回调。错误处理&#xff1a;处理下载失败、网络异常等情况。自动安装 APK&#xff1a;…...

Apache Hudi 性能测试报告

一、测试背景 数据湖作为一个集中化的数据存储仓库,支持结构化、半结构化以及非结构化等多种数据格式,数据来源包含数据库数据、增量数据、日志数据以及数仓上的存量数据等。数据湖能够将这些不同来源、不同格式的数据集中存储和管理在高性价比的分布式存储系统中,对外提供…...

Flask使用Blueprint注册管理路由

在 Flask 中&#xff0c;可以使用 蓝图&#xff08;Blueprint&#xff09; 来组织和注册路由&#xff0c;从而让代码更加模块化和易于维护。以下是完整的使用方法&#xff1a; 1. 创建 Flask 项目结构 建议的项目目录结构如下&#xff1a; my_flask_app/ │── app.py …...

LuaJIT 学习(3)—— ffi.* API 函数

文章目录 GlossaryDeclaring and Accessing External Symbolsffi.cdef(def)ffi.Cclib ffi.load(name [,global])例子&#xff1a;ffi.load 函数的使用 Creating cdata Objectscdata ffi.new(ct [,nelem] [,init...]) cdata ctype([nelem,] [init...])例子&#xff1a;匿名 C…...

[资源分享]-web3/区块链/学习路线/资料/找工作方式/水龙头

记录个人学习web3整理的资料 后续如果有 了解/入坑 打算, 提前收藏一下. 1. 学习路线 登链社区-学习路线图 2. 学习资料 国内成系统的资料比较少,我整理的网盘的,关注私信我,资料互相学习 前言 | 区块链技术指南 学习web3-僵尸小游戏 web3.js文档 ethers.js官方文档 Hardhat文…...

Django-ORM-prefetch_related

Django-ORM-prefetch_related 模型定义N1 查询问题示例 使用 prefetch_related 优化查询处理更复杂的查询示例&#xff1a;预取特定条件的书籍示例&#xff1a;预取多个关联字段 性能比较注意事项总结 通过 Author 和 Books 两个模型来理解 Django 的 prefetch_related 方法。 …...

MySQL 批量插入 vs 逐条插

MySQL 插入数据&#xff1a;批量插入 vs 逐条插入&#xff0c;哪个更快&#xff1f; 在 MySQL 中&#xff0c;插入数据有两种常见方式&#xff1a; 批量插入&#xff1a;一条 SQL 插入多条数据。逐条插入&#xff1a;每次插入一条数据。 这两种方式有什么区别&#xff1f;哪…...

Linux centos 7 grub引导故障恢复

CentOS 7误删GRUB2可以通过以下步骤恢复&#xff1a; 进入救援模式 1. 插入CentOS 7安装光盘&#xff0c;重启系统。在开机时按BIOS设置对应的按键&#xff08;通常是F2等&#xff09;&#xff0c;将启动顺序调整为CD - ROM优先。 2. 系统从光盘启动后&#xff0c;选择“…...

要在Unreal Engine 5(UE5)中实现角色打击怪物并让怪物做出受击反应,

UE5系列文章目录 文章目录 UE5系列文章目录前言一、实现思路二、最终效果 前言 ue5角色受击没有播放受击动画&#xff0c;主角达到怪物身上没有反应 一、实现思路 要在Unreal Engine 5&#xff08;UE5&#xff09;中实现角色打击怪物并让怪物做出受击反应&#xff0c;你需要…...

Navicat for Snowflake 震撼首发,激活数据仓库管理全新动能

近日&#xff0c;Navicat 家族迎来了一位全新成员 — Navicat for Snowflake。Snowflake 是一款基于云架构的现代数据仓库解决方案&#xff0c;以其弹性扩展、高性能和易用性著称。这次首发的Navicat for Snowflake 专为简化 Snowflake 数据库管理任务而精心打造。它凭借其直观…...

【redis】发布订阅

Redis的发布订阅&#xff08;Pub/Sub&#xff09;是一种基于消息多播的通信机制&#xff0c;它允许消息的**发布者&#xff08;Publisher&#xff09;向特定频道发送消息&#xff0c;而订阅者&#xff08;Subscriber&#xff09;**通过订阅频道或模式来接收消息。 其核心特点如…...

高级java每日一道面试题-2025年2月26日-框架篇[Mybatis篇]-Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式 ?

如果有遗漏,评论区告诉我进行补充 面试官: Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式 ? 我回答: 在Java高级面试中讨论MyBatis如何将SQL执行结果封装为目标对象并返回的过程时&#xff0c;我们可以从过程细节和映射形式两个方面来综合解答这个问…...

linux root丢失修改密

在RHEL7下重置密码 第一种方式&#xff1a;光驱进入急救模式 //做之前最好 selinuxdisabled Conntinue 然后chroot /mnt/sysimag 然后编辑/etc/shadow文件 第二种方式&#xff1a; 1&#xff1a;编辑启动菜单按e,找到linux16行&#xff0c;在行尾加入 init/bin/sh,同时在…...

OpenCV中文路径图片读写终极指南(Python实现)

文章目录 OpenCV中文路径图片读写终极指南&#xff08;Python实现&#xff09;一、问题深度解析1.1 现象观察1.2 底层原因 二、中文路径读取方案2.1 终极解决方案&#xff08;推荐&#xff09;2.2 快速修复 三、中文路径保存方案3.1 通用保存函数3.2 使用示例 四、技术原理详解…...

linux 时间同步(阿里云ntp服务器)

1、安装ntp服务 rootlocalhost ~]# yum -y install ntp 已加载插件&#xff1a;fastestmirror, langpacks Loading mirror speeds from cached hostfile* base: mirrors.nju.edu.cn* centos-sclo-rh: mirrors.nju.edu.cn* centos-sclo-sclo: mirrors.huaweicloud.com* epel: m…...

Go vs Rust vs C++ vs Python vs Java:谁主后端沉浮

一、核心性能对比(基于TechEmpower基准测试) 语言单核QPS延迟(ms)内存消耗适用场景Rust650,0000.1245MB高频交易/区块链C++720,0000.0932MB游戏服务器/实时渲染Go230,0000.45110MB微服务/API网关Java180,0001.2450MB企业ERP/银行系统Python12,0008.5220MBAI接口/快速原型技术…...

5 分钟搭建 Prometheus + Grafana 监控

一.安装 Prometheus cd /usr/local/ wget https://github.com/prometheus/prometheus/releases/download/v2.38.0/prometheus-2.38.0.linux-amd64.tar.gz tar xvf prometheus-2.38.0.linux-amd64.tar.gz ln -s prometheus-2.38.0.linux-amd64 prometheus二.安装 node_exporter…...

【机器人-基础知识】标定 - 相机内参求解原理(单应性矩阵、内参约束方程)

1. 求解目标&#xff1a;内参 从世界坐标系到像素坐标系的齐次坐标形式&#xff1a; s [ u v 1 ] K [ R t ] [ X w Y w Z w 1 ] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} K \, [\, R \quad t \,] \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} s ​uv1​ ​K…...

【QT】-一文说清楚QT定时器怎么用

在 Qt 中&#xff0c;定时器&#xff08;QTimer&#xff09;是用来定时执行某些任务的非常有用的类。它可以帮助你在指定的时间间隔后重复执行某个函数。常见的用法是启动一个定时器&#xff0c;每过一段时间自动执行某个操作&#xff0c;比如更新 UI、检查状态或发送数据等。 …...

QT编程之JSON处理

一、核心类库及功能 Qt 提供了一套完整的 JSON 处理类库&#xff08;位于 QtCore 模块&#xff09;&#xff0c;支持解析和生成 JSON 数据&#xff1a; ‌QJsonDocument‌&#xff1a;表示完整的 JSON 文档&#xff0c;支持从 QJsonObject 或 QJsonArray 初始化‌。‌QJsonOb…...

优选算法系列(1.双指针_下)

目录 五. 有效三角形的个数&#xff08;medium&#xff09; 题目链接&#xff1a;有效三角形的个数 解法: 代码&#xff1a; 六&#xff1a;和为 s 的两个数字&#xff08;easy&#xff09; 题目链接&#xff1a;和为 s 的两个数字 解法&#xff1a; 代码; 七&#xf…...

江科大51单片机笔记【15】直流电机驱动(PWM)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…...

MS51FB9AE单片机解密实践与解析

MS51FB9AE 单片机解密实践与解析 在电子技术领域&#xff0c;MS51FB9AE 作为一款基于 8051 内核的单片机&#xff0c;凭借其强大功能与良好性能&#xff0c;在家用电器、智能仪表等诸多领域广泛应用&#xff0c;深受市场青睐。然而&#xff0c;厂家所采用的独特加密技术&#x…...

java 手搓一个http工具类请求传body

import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets;public class HttpUtil {/*** JSON请求发起*/public static String httpJsonRequest(String requestUrl, String requestJson) {String responseJson &…...

从零搭建微服务项目Pro(第2-2章——JSR303自定义文件校验+整合至微服务公共模块)

前言&#xff1a; JSR 303&#xff0c;即 Bean Validation&#xff0c;是 Java EE 6 中的一项子规范&#xff0c;旨在为 Java Bean 提供一种标准化的数据验证机制。它通过注解的方式&#xff0c;允许开发者在 Java 类的字段或方法上直接定义验证规则&#xff0c;从而将验证逻辑…...

Python 实现大文件的高并发下载

项目背景 基于一个 scrapy-redis 搭建的分布式系统&#xff0c;所有item都通过重写 pipeline 存储到 redis 的 list 中。这里我通过代码演示如何基于线程池 协程实现对 item 的中文件下载。 Item 结构 目的是为了下载 item 中 attachments 保存的附件内容。 {"crawl_tim…...

【论文笔记】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)

文章目录 问题创新网络主要贡献Autoencoder-like Dehazing NetworkAdaptive Mixup for Feature PreservingDynamic Feature Enhancement1. 可变形卷积的使用2. 扩展感受野3. 减少网格伪影4. 融合空间结构信息 Contrastive Regularization1. 核心思想2. 正样本对和负样本对的构建…...

Java vs Go:SaaS 系统架构选型解析与最佳实践

在构建 SaaS&#xff08;Software as a Service&#xff09;系统时&#xff0c;选用合适的技术栈至关重要。Java 和 Go 是当今最受欢迎的后端开发语言之一&#xff0c;各自有其优势和适用场景。那么&#xff0c;SaaS 系统开发应该选择 Java 还是 Go&#xff1f;本文将从多个维度…...

OpenEuler-22.03-LTS上利用Ansible轻松部署MySQL 5.7

一、需求 使用ansible自动化部署mysql二进制部署mysql部署mysql并创建JDBC用户 二、环境信息 本文涉及的代码&#xff0c;配置文件地址&#xff1a; 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1g6y 软件名称版本备注Ansible2.9.27All modules — Ansible Doc…...