Pyscan:用 Rust 重写的 Python 安全扫描工具
一位开发者分享了他耗时 3 年开发的项目 Pyscan,这是一个用 Rust 编写的 Python 安全工具。
开发背景
- 项目持续时间:断断续续开发了 3 年
- 核心目标:解决传统 Python 安全工具在生产 CI/CD 流程中的性能和内存瓶颈问题
解决的痛点
- 开发者为了加快 CI/CD 速度会放弃较慢的安全工具,间接导致安全隐患
- 内存限制使得额外添加安全工具变得不合理
主要功能
- 自动遍历 Python 项目
- 支持多种包管理格式(uv、poetry、flit、pdm、requirements.txt、SBOM,甚至源代码)
- 将依赖项与开源漏洞(OSV)数据库进行交叉对比
性能对比
- 与基于 Rust 的
uv audit性能相当,有时甚至更快 - 开发者坦言:如果已使用
uv,实际上不需要pyscan
最新版本新特性
- SBOM 原生支持:可解析 CycloneDX(bom.json)和 SPDX(spdx.json)文件
原文链接:https://www.reddit.com/r/rust/comments/1su92b4/i_rewrote_python_security_tooling_in_rust_meet/
comperr:轻量级过程宏编译错误处理库
一位 Rust 开发者在 r/rust 社区分享了自己开发的实用工具库 comperr,专门用于简化过程宏(proc-macro)中的错误处理。
解决的问题
- 传统的
compile_error!宏虽然能报告错误,但错误位置通常只会指向宏调用点,而不是实际出问题的 token - 对过程宏开发者来说,这会让诊断信息不够精确,影响调试体验
comperr 的做法
comperr 提供了简洁的 API 来处理编译错误:
- 单个错误:直接调用
comperr::error(span, "错误信息")返回错误 - 多个错误:可创建空错误集合,逐步合并多个错误后统一返回
- 迭代器收集:支持从迭代器中批量收集错误
技术特点
- 通过为生成的 token 显式设置
.set_span(),让编译器把错误定位到更准确的位置 - 仅依赖
proc_macro2 - 最低支持 Rust 1.85
原文链接:https://www.reddit.com/r/rust/comments/1su94io/comperr_lightweight_crate_for_invoking/
Rust 标准库字符串 join 函数堆溢出漏洞修复
在 Rust 标准库的 [T]::join API 中发现了一个堆溢出漏洞,该漏洞可以通过安全的 Rust 代码触发内存损坏,甚至可能导致代码执行。
问题根源
join_generic_copy对第一个切片元素重复调用了两次Borrow::borrow()- 第一次用于长度计算,第二次用于实际拷贝
- 对带内部可变性的病态实现来说,两次调用返回的内容可能不一致,从而导致长度预估失真
风险表现
- 可能触发整数下溢和越界写入
- 影响公共 API
[T]::join - 属于可由安全 Rust 代码触发的健全性问题
修复思路
修复目标是让备用容量目标切片的长度仅基于实际分配结果推导,不再依赖受重复 Borrow 调用影响的未经检查减法;即便 Borrow 实现不一致,也最多 panic,而不是发生越界访问。
原文链接:https://github.com/rust-lang/rust/pull/155708
zkmcu - 微控制器零知识证明验证器
zkmcu 是一个用 Rust 编写的 no_std SNARK 和 STARK 验证器家族,专为微控制器设计。
支持的证明系统
- Groth16 on BN254(EIP-197 格式)
- Groth16 on BLS12-381(EIP-2537 格式)
- Winterfell STARK(基于 Goldilocks + Blake3)
硬件目标
首个目标平台是 Raspberry Pi Pico 2 W(RP2350 芯片),同时包含 ARM Cortex-M33 和 RISC-V Hazard3 核心,便于跨指令集架构对比。
性能亮点
在 150 MHz 的 Pico 2 W 上,STARK Fibonacci-1024 验证时间可达 75 ms,Groth16/BN254 为 1176 ms,Groth16/BLS12-381 为 2015 ms,展示了证明体积与验证速度之间的典型权衡。
原文链接:https://www.reddit.com/r/rust/comments/1suc0jx/zkmcu_a_family_of_nostd_snark_and_stark_verifiers/
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论