Tauri:下一代桌面应用开发框架?( 五 )

  • 步骤:

  • Tauri:下一代桌面应用开发框架?

    文章插图
     
    • 缺点
      • 由于信息经过加密,所以隔离模式相比 Brownfield 模式而言存在额外开销 。除去性能敏感的应用 (使用很少依赖来提升性能的应用) 之外,使用 AES-GCM 算法来加解密 IPC 信息会对大部分应用造成相对较小的性能影响 。
      • Windows平台上,Webview限制了因为沙盒环境下加载 <iframe>标签内的外部文件,Tauri在构建时实现一些步骤将脚本注入,但是ES Modules可能无法正常加载 。
     
    安全性
    • 动态AOT:Tauri 应用启动时将多次进行编译 。通过使用Tauri提供的动态预编译器,可以生成每个会话都不同的代码引用,但技术上一致的代码单元;
    • 函数 ASLR:函数地址空间布局随机化 (Address Space Layout Randomization) 将在运行时随机调整函数名称,且可以实现 OTP 哈希功能,这样将永远不会出现相同的会话 。在Tauri应用启动时,或可选在每次执行后,随机生成函数名称 。每个函数指针均使用 UID 以防止静态攻击;
    • 自杀式函数注入:一种高级的ASLR技术,Rust在运行时载入进入Webview的闭包Promise和随机的句柄,API接口在Promise处理中就被锁定,在执行完毕后被立即设置成;
    可以有效防止恶意页面被加载
    • 使用Event Bridge:Tauri内部的信息通信使用Event Bridge,Event Bridge用来保证只能传递信息和指令给一个指定的中间代理,而不是直接传递不安全的函数调用;
    • API Allow List:Tuari提供的API都是关闭状态,若没有启用相关API,应用构建时不会包括相关功能函数的代码 。这可以减少二进制文件大小及攻击面 。同时API还有严格的权限选项,如文件读写相关API可以设置只读/只写/指定目录或文件等功能;
    • CSP:Tauri会对本地的html页面强制使用内容安全策略,本地脚本经过哈希处理,同时样式、外部脚本经由加密随机字符串引用,防止禁止内容被加载;
    • 反编译难:Tauri在构建时,会将相关前端代码直接构建在二进制可执行文件中,这意味着和Electron的ASAR文件不同,具体的代码无法被轻松地反编译;
    • 一次性Token和哈希:使用OTP加盐哈希处理重要的信息,可以在前端和Rust后端之间加密信息;
     
    Tauri-egui[6]因为Tauri应用的前端是用了Web相关的技术栈,因此在运行时总有办法来使用开发者模式/调试工具等来进行检查元素等 。在某些情况下,如密码输入等场景,我们希望能够保证前端的UI展示是无法被修改的,这时可以使用Tauri-egui这个库,这个库对egui进行了封装,可以使用Rust来编写前端的UI 。
    Tauri:下一代桌面应用开发框架?

    文章插图
     
    优点
    Tauri:下一代桌面应用开发框架?

    文章插图
     
    Benchmark
    • 内存使用

    Tauri:下一代桌面应用开发框架?

    文章插图
     
    • 构建产物体积

    Tauri:下一代桌面应用开发框架?

    文章插图
     
    缺点
    • 兼容性:由于Tauri使用的是系统Webview,因此在构建时前端的代码需要做polyfill;且Windows平台上,由于Webview2只在Windows10/11上有默认推送安装,要想在Windows7/8等较低版本的平台上运行的话,还需要另外安装Webview2的运行时 。
     
    参考资料[1] 在macOS中打开系统Webview的检查元素开关,
    https://blog.jim-nielsen.com/2022/inspecting-web-views-in-macos/
    [2] 微软开始在Teams应用中放弃Electron,
    https://blog.devgenius.io/microsoft-is-finally-ditching-electron-9e081757f9db
    [3] VSCode优化括号颜色匹配,
    https://code.visualstudio.com/blogs/2021/09/29/bracket-pair-colorization
    [4] Tauri官网, https://tauri.app
    [5] Rust Wikipedia, https://zh.wikipedia.org/zh-cn/Rust
    [6] Brownfield, https://en.wikipedia.org/wiki/Brownfield_(software_development)
     
    ?? 谢谢支持以上便是本次分享的全部内容,希望对你有所帮助^_^

    【Tauri:下一代桌面应用开发框架?】


    推荐阅读