• 【Rust日报】2023-10-10 使用 Cackle 抵御 Rust 供应链攻击


    使用 Cackle 抵御 Rust 供应链攻击

    Cackle 是一个代码 ACL 检查器,用于增加供应链攻击的难度。Cackle 通过 cackle.toml 进行配置。在配置文件中,您可以定义 API 的类别,例如 netfs 和 process,对其调用进行限制。然后,您也可以指定允许使用的 API。运行时,Cackle 会检查您的依赖树中是否有使用未经许可的受限 API 的依赖包。

    API 定义了包含或排除哪些名称。例如,我们可以将“process” API定义如下:

    1. [api.process]
    2. include = [
    3. "std::process",
    4. ]
    5. exclude = [
    6. "std::process::exit",
    7. ]

    排除比包含更重要,因此应该更具体。在这里,我们定义了一个名为“process”的API,并将 std::process 模块中的任何函数加入进去。然后我们排除掉 std::process::exit 。因此,对 std::process::Command::new 的引用将被视为使用 process API,但对 std::process::exit 的引用则不会。

    我们可以指定特定的软件包使用哪些API。例如:

    1. [pkg.rustyline]
    2. allow_apis = [
    3. "fs",
    4. ]
    5. allow_unsafe = true

    这意味着 rustyline 包可以使用文件系统API,并且可以使用不安全的代码。

    ReadMore: https://davidlattimore.github.io/making-supply-chain-attacks-harder.html

    文本对决:Gap Buffers vs Ropes

    我一直在从事一个业余项目,用 Rust 重新构想 Emacs 的 C 内核。在这个过程中,我发现需要用某种方法来表示缓冲区的文本。最简单的方法是使用大型字符串或行数组。然而,随着文本大小或行长的增加,这些方法的性能都很差。

    GNU Emacs 曾以使用间隙缓冲区(gap buffer)来表示可编辑文本而闻名。甚至在维基百科的词条中也提到了它的名字。间隙缓冲区的优点是允许快速本地编辑,而且设计相当简单。从本质上讲,你可以将文本保存在一个巨大的数组中,中间留有未使用字节的间隙。插入文本时,将部分字节替换为文本,使间隙变小。当你想在文本的其他地方插入文字时,你可以将间隙移动到该位置,并执行相同的操作。删除则执行相反的操作,扩大间隙。有了这个简单的机制,就可以有效地表示可编辑文本。

    我认为间隙缓冲区类似于更一般的数据结构——"数组"。间隙缓冲区只是一个针对在"光标"处插入而进行优化的数组,而不是在末尾插入。在许多十年中,使用间隙缓冲区为Emacs提供了良好的服务。

    尽管如此,在现代世界中,Emacs似乎在选择上相对独行。当今大多数流行的编辑器使用某种形式的片段表(piece table)或绳索(rope)。这些数据结构将缓冲区分割成小块并对其进行操作。这使它们能够避免在远离编辑位置时移动光标的O(n)惩罚和调整缓冲区大小的延迟。

    Rust有许多经过大量优化工作的绳索库。显而易见的做法是选择其中一个并继续。但我想亲自看看间隙缓冲区与这些更"高级"的数据结构相比如何。现代计算机可以非常快速地在线性内存上操作。因此,我构建了一个间隙缓冲区,并与其他竞争者进行了比较。

    ReadMore: https://coredumped.dev/2023/08/09/text-showdown-gap-buffers-vs-ropes/


    From 日报小组 Koalr

    社区学习交流平台订阅:

    • Rustcc论坛: 支持rss

    • 微信公众号:Rust语言中文社区

  • 相关阅读:
    集合-ArrayList源码分析(面试)
    读写Raw文件
    套接字相关数据据结构及分层模型
    Java2EE基础练习_chapter02流程控制
    使用Python实现多线程、多进程、异步IO的socket通信
    Qt实现网络拓扑图实现程度
    在服务器的docker里 装anacond3深度学习环境的全流程超基础
    Delphi的系统模块全部采用汇编语言开发-这执行效率在传奇时代估计是叼咋天,难怪能开发出中国最大游戏IP-传奇
    Rockchip芯片 写SN,IMEI,Mac等 写attenstation key 写Remote Key Provisioning
    pytest集成allure报告(allure安装及配置以及如何实现集成)
  • 原文地址:https://blog.csdn.net/u012067469/article/details/133781707