11个稳定版本
使用旧的Rust 2015
4.3.1 | 2024年3月24日 |
---|---|
4.3.0 | 2022年6月26日 |
4.2.0 | 2022年3月11日 |
4.1.3 | 2021年11月7日 |
3.2.0 | 2018年6月5日 |
#7 in 文本编辑器
920每月下载量
195KB
3.5K SLoC
Shellharden
Shellharden是一个语法高亮器和半自动重写脚本的工具,以ShellCheck规范为目标,主要关注引号。
默认操作模式类似于cat
,但具有前景颜色的语法高亮和背景颜色的建议性更改
上图:Shellharden高亮的xdg-desktop-menu的选定部分。前景颜色是语法高亮,而背景颜色(绿色和红色)显示Shellharden如果使用--transform
选项会添加或删除的字符。下图:一个人工示例,显示更多复杂情况和特殊功能。
为什么
bash中的变量就像一个手榴弹——去掉它的引号,它就开始计时。因此,bash陷阱的规则零:总是使用引号。
名称
Shellharden可以做Shellcheck做不到的事情:应用建议的更改。
换句话说,强化易受攻击的shell脚本。内置假设是脚本不依赖于易受攻击的行为——用户负责代码审查。
Shellharden以前被称为"Naziquote"。在正确的行话中,那是最棒的名字,但对外人来说,它太误导性了,难以启齿。
我也不能称之为"bash cleaner",因为在挪威语中,这意味着“粪尿涂抹者”。
先例
-
Shellcheck 是一个检测易受攻击bash代码并给出一般建议的奇妙工具。唯一缺少的是可以说“是”的东西,并应用那些建议(当然假设适当的审查)。
-
我提出了一个这样的SO问题,要求一个可以重写bash脚本并使用正确引号的工具。一个回答者比我更快地回答了。但如果是我,我会在同一个工具中做一个语法高亮器(作为一种查看解析器是否迷失方向的方法,并最大限度地利用解析器,因为bash就像量子力学一样——没有人真正知道它是如何工作的)。
获取
发行版包
cargo install shellharden
从源代码构建
cargo build --release
安装
mv target/release/shellharden ~/.local/bin/
运行测试
cargo test
(需要bash)
测试覆盖率
env RUSTFLAGS="-C instrument-coverage" LLVM_PROFILE_FILE='run-%m.profraw' cargo test
grcov . --binary-path ./target/debug/ -s . -t html -o ./coverage/
rm run-*.profraw
open coverage/src/index.html
模糊测试
cargo install cargo-afl
cargo afl build --release
cargo afl fuzz -i moduletests/original -o /tmp/fuzz-shellharden target/release/shellharden ''
使用建议
不要盲目地应用 --transform
;代码审查仍然是必要的:一个依赖于未引用行为(隐式单词分割和变量及命令替换的通配符扩展)以按预期工作的脚本,在经过 --transform
处理后将不会做任何这些!
在这种情况下,问问自己脚本是否有必要执行这样的操作。很多时候,这仅仅是一个经典的shell脚本产品,并且最好通过使用数组等方式进行重写。即使在相反的情况下,比如业务逻辑涉及单词分割;仍然可以在不调用通配符的情况下完成。简而言之:总有比禁止的语法(如果不是更明确)更好的方法,但有时,必须有人介入进行重写。参见如何,在随附的 如何在bash中安全地做事。