presidentbeef/brakeman
GitHub: presidentbeef/brakeman
Brakeman 是一款用于检测 Ruby on Rails 应用程序中安全漏洞的静态分析工具。
Stars: 7247 | Forks: 772
[](http://brakemanscanner.org/)
[](https://circleci.com/gh/presidentbeef/brakeman)
[](https://qlty.sh/gh/presidentbeef/projects/brakeman)
# Brakeman
Brakeman 是一款静态分析工具,用于检查 Ruby on Rails 应用程序中的安全漏洞。
# 安装
使用 RubyGems:
```
gem install brakeman
```
使用 Bundler:
```
group :development do
gem 'brakeman', require: false
end
```
使用 Docker:
```
docker pull presidentbeef/brakeman
```
使用 Docker 从源码构建:
```
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
```
# 用法
#### 本地运行
在 Rails 应用程序的根目录下:
```
brakeman
```
在 Rails 根目录之外:
```
brakeman /path/to/rails/application
```
#### 使用 Docker 运行
在 Rails 应用程序的根目录下:
```
docker run -v "$(pwd)":/code presidentbeef/brakeman
```
显示更好的颜色:
```
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
```
生成 HTML 报告:
```
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
```
在 Rails 根目录之外(注意,输出文件是相对于 path/to/rails/application 的):
```
docker run -v 'path/to/rails/application':/code presidentbeef/brakeman -o brakeman_results.html
```
# 兼容性
Brakeman 应该兼容从 2.3.x 到 8.x 的任何 Rails 版本。
Brakeman 可以分析使用 Ruby 2.0 及更新版本语法编写的代码,但至少需要 Ruby 3.2.0 才能运行。
# 基本选项
要获取完整的选项列表,请使用 `brakeman --help` 或查看 [OPTIONS.md](OPTIONS.md) 文件。
为结果指定一个输出文件:
```
brakeman -o output_file
```
输出格式由文件扩展名或使用 `-f` 选项决定。当前的选项有:`text`、`html`、`tabs`、`json`、`junit`、`markdown`、`csv`、`codeclimate`、`github`、`sarif` 和 `sonar`。
可以指定多个输出文件:
```
brakeman -o output.html -o output.json
```
要同时输出到文件和控制台,并带有颜色:
```
brakeman --color -o /dev/stdout -o output.json
```
要抑制信息性警告,仅输出报告:
```
brakeman -q
```
请注意,除了报告之外,Brakeman 的所有输出都会发送到 stderr,这使得将 stdout 重定向到文件并仅获取报告变得简单。
要查看各种调试信息:
```
brakeman -d
```
如果需要,可以跳过特定的检查。名称必须使用正确的大小写。例如,要跳过对默认路由(`DefaultRoutes`)的检查:
```
brakeman -x DefaultRoutes
```
多个检查应该用逗号分隔:
```
brakeman -x DefaultRoutes,Redirect
```
执行相反的操作,仅运行特定的测试集:
```
brakeman -t SQL,ValidationRegex
```
如果 Brakeman 运行有点慢,请尝试
```
brakeman --faster
```
这将禁用一些功能,但可能会快得多(目前它与 `--skip-libs --no-branching` 相同)。*警告*:这可能会导致 Brakeman 漏报一些漏洞。
默认情况下,如果发现任何安全警告或遇到扫描错误,Brakeman 将返回非零退出码。要禁用此功能:
```
brakeman --no-exit-on-warn --no-exit-on-error
```
要跳过 Brakeman 可能难以解析的某些文件或目录,请使用:
```
brakeman --skip-files file1,/path1/,path2/
```
要将扫描结果与之前的扫描结果进行比较,请使用 JSON 输出选项,然后执行:
```
brakeman --compare old_report.json
```
这将输出包含两个列表的 JSON:一个是已修复的警告,另一个是新增的警告。
如果进行了配置,Brakeman 将忽略警告。默认情况下,它会在 `config/brakeman.ignore` 中查找配置文件。
要创建和管理此文件,请使用:
```
brakeman -I
```
如果你想在不影响退出码的情况下临时查看你忽略的警告,请使用:
```
brakeman --show-ignored
```
# 警告信息
有关此工具报告的警告的更多信息,请参见 [warning\_types](docs/warning_types)。
# 警告上下文
HTML 输出格式提供了触发警告的原始应用程序源码的摘录。由于在寻找漏洞时进行了处理,源码可能看起来不像报告的警告,并且报告的行号可能会略有偏差。然而,上下文仍然提供了对引发警告的代码的快速查看。
# 置信度
Brakeman 为每个警告分配一个置信度。这提供了一个粗略的估计,表明该工具有多大把握认为给定的警告确实是一个问题。当然,这些评级不应被视为绝对真理。
有三个置信度级别:
+ High(高) - 要么这是一个简单的警告(布尔值),要么非常有可能以不安全的方式使用了用户输入。
+ Medium(中) - 这通常表示变量的不安全使用,但该变量可能是也可能不是用户输入。
+ Weak(弱) - 通常意味着用户输入以潜在不安全的方式被间接使用。
要仅获取高于给定置信度级别的警告:
```
brakeman -w3
```
`-w` 开关接受一个 1 到 3 的数字,1 表示低(所有警告),3 表示高(仅最高置信度的警告)。
# 配置文件
Brakeman 选项可以存储在 YAML 文件中并从中读取。
为了简化编写配置文件的过程,`-C` 选项将输出当前设置的选项:
```
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
```
在命令行中传递的选项优先于配置文件。
默认的配置文件位置是 `./config/brakeman.yml`、`~/.brakeman/config.yml` 和 `/etc/brakeman/config.yml`
可以使用 `-c` 选项来指定要使用的配置文件。
# 持续集成
Jenkins/Hudson 有一个可用的[插件](http://brakemanscanner.org/docs/jenkins/)。
为了进行更多持续的测试,请尝试 [Guard 插件](https://github.com/guard/guard-brakeman)。
还有几个可用的 [GitHub Actions](https://github.com/marketplace?type=actions&query=brakeman)。
# 构建
```
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
```
# 谁在使用 Brakeman?
* [Code Climate](https://codeclimate.com/)
* [GitHub](https://github.com/)
* [Groupon](http://www.groupon.com/)
* [New Relic](http://newrelic.com)
* [Twitter](https://twitter.com/)
[……以及更多!](http://brakemanscanner.org/brakeman_users)
# 主页/新闻
网站:http://brakemanscanner.org/
Twitter:https://twitter.com/brakeman
聊天:https://gitter.im/presidentbeef/brakeman
# 许可证
Brakeman 可免费用于非商业用途。
详情请参阅 [COPYING](COPYING.md)。
标签:LNA, Ruby on Rails, 内存转储, 安全漏洞扫描, 聊天机器人, 请求拦截, 错误基检测, 静态代码分析