检测并防止机密被提交进入版本控制的工具
Talisman是一个扫描Git变更集的工具,确保潜在的机密或敏感信息不会离开开发者的工作站。
它验证即将推送的变更集中是否有看起来可疑的内容——例如潜在的SSH密钥、授权令牌、私钥等。
Talisman支持macOS、Linux和Windows。
Talisman可以通过以下方式之一安装和使用:
Talisman可以设置为Git仓库上的预提交或预推送钩子。
具体说明如下。
免责声明:通过强制推送进入Git仓库的机密无法被Talisman检测到。强制推送被认为本身存在风险,我们建议Git仓库管理员采取适当措施授权此类操作。
我们推荐将talisman安装到路径中,以便git钩子框架和脚本可以使用。请从发布页面选择适合您系统的正确二进制文件,或运行我们的安装脚本:```bash
bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/install.sh)"
或者设置环境变量 `INSTALL_LOCATION` 来指定二进制文件的自定义位置:```bash
INSTALL_LOCATION=/usr/local/bin bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/install.sh)"
或者设置环境变量 VERSION 为已发布的标签来安装特定版本::```bash
VERSION=v1.36.0 bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/install.sh)"
或者在 Linux 上使用 linuxbrew,在 macOS 上使用 homebrew,在终端中运行以下命令:```bash
brew install talisman
我们提供的脚本可以将 Talisman 安装为 pre-commit git 钩子模板,这样 Talisman 不仅会出现在你现有的 git 仓库中,也会出现在你之后 'init' 或 'clone' 的任何新仓库中。
作为 pre-commit 钩子: ``` bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/install.bash)"
或
作为预推送钩子: ```
bash -c "$(curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/install.bash)" -- pre-push
$PATH 中设置 TALISMAN_HOME,系统会询问一个合适的位置来设置它。请选择你在机器上设置 profile 来源的选项数字。记得对路径文件执行 source 命令或重启终端。
如果你选择稍后设置 $PATH,请将 TALISMAN_HOME=$HOME/.talisman/bin 导出到路径中。
全局安装 talisman 作为钩子不会覆盖任何已有钩子。如果安装脚本发现已有钩子,它只会在控制台上进行提示。要运行多个钩子,我们建议使用钩子框架,例如 pre-commit 或 husky。这些说明假设 talisman 可执行文件已安装在你的系统路径中。
使用 pre-commit 来管理与 Talisman 一起的已有钩子。在你的 .pre-commit-config.yaml 中引用我们的 pre-commit-hooks:```yaml
### Husky
[husky](https://typicode.github.io/husky) 是一个用于管理 hooks 的 npm 模块。
将以下行添加到你的 `package.json` 中的 husky pre-commit 配置中:```
talisman --githook pre-commit
一旦 安装 了Talisman可执行文件,就可以为某个Git仓库配置独立的pre-commit钩子:```bash cd my-git-project echo "talisman -g pre-commit" >> .git/hooks/pre-commit chmod +x .git/hooks/pre-commit
# 升级
自 v0.4.4 版本起,Talisman 会在钩子被调用时(按照设置,在 pre-commit/pre-push 时)<b>自动更新</b>二进制文件至最新版本。因此,您只需放松,无需额外操作即可持续使用最新版 Talisman。
可以设置以下环境变量:
1. TALISMAN_SKIP_UPGRADE:如果希望跳过自动升级检查,请设置为 true。默认值为 false。
2. TALISMAN_UPGRADE_CONNECT_TIMEOUT:升级取消前的最大连接超时时间(以秒为单位)。默认值为 10 秒。
如果您确实需要手动升级,以下是相关步骤:
<br>[推荐] 将 Talisman 二进制文件和钩子脚本更新至最新版本:```bash
curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/update_talisman.bash > /tmp/update_talisman.bash && /bin/bash /tmp/update_talisman.bash
仅通过执行以下命令更新Talisman二进制文件:```bash curl --silent https://raw.githubusercontent.com/thoughtworks/talisman/main/global_install_scripts/update_talisman.bash > /tmp/update_talisman.bash && /bin/bash /tmp/update_talisman.bash talisman-binary
# Talisman 运行效果
安装成功后,Talisman 会在每次提交(commit)或推送(push)之前自动检查明显的机密信息(根据安装时的选择)。如果检测到任何安全漏洞,talisman 将显示详细的错误报告:```bash
$ git push
Talisman Report:
+-----------------+-------------------------------------------------------------------------------+
| FILE | ERRORS |
+-----------------+-------------------------------------------------------------------------------+
| danger.pem | The file name "danger.pem" |
| | failed checks against the |
| | pattern ^.+\.pem$ |
+-----------------+-------------------------------------------------------------------------------+
| danger.pem | Expected file to not contain hex encoded texts such as: |
| | awsSecretKey=c64e8c79aacf5ddb02f1274db2d973f363f4f553ab1692d8d203b4cc09692f79 |
+-----------------+-------------------------------------------------------------------------------+
在上面的例子中,文件 danger.pem 因以下原因被标记为安全违规:
如果您将 Talisman 安装为预提交钩子 (pre-commit hook),它将仅扫描每个提交中的 差异。这意味着它只会报告文件中被更改部分存在的错误。
如果您将 Talisman 安装为预推送钩子 (pre-push hook),它将扫描发生更改的完整文件。如上所述,建议您将 Talisman 用作 预提交钩子。
以下检测器会针对变更集执行,以检测机密/敏感信息: