README.md 5.4 KB
Newer Older
D
David Lanner 已提交
1
[![Brakeman Logo](http://brakemanscanner.org/images/logo_medium.png)](http://brakemanscanner.org/)
J
Justin Collins 已提交
2

J
Justin Collins 已提交
3 4 5
[![Build Status](https://travis-ci.org/presidentbeef/brakeman.svg?branch=master)](https://travis-ci.org/presidentbeef/brakeman)
[![Code Climate](https://codeclimate.com/github/presidentbeef/brakeman/badges/gpa.svg)](https://codeclimate.com/github/presidentbeef/brakeman)
[![Test Coverage](https://codeclimate.com/github/presidentbeef/brakeman/badges/coverage.svg)](https://codeclimate.com/github/presidentbeef/brakeman/coverage)
J
Justin Collins 已提交
6

J
Justin 已提交
7 8 9 10 11 12
# Brakeman

Brakeman is a static analysis tool which checks Ruby on Rails applications for security vulnerabilities.

# Installation

J
Justin 已提交
13 14 15 16
Using RubyGems:

    gem install brakeman

17
Using Bundler:
18 19 20 21 22

    group :development do
      gem 'brakeman', :require => false
    end

23
# Usage
J
Justin 已提交
24

25
From a Rails application's root directory:
26

27
    brakeman
28

29
Outside of Rails root:
30

31
    brakeman /path/to/rails/application
J
Justin 已提交
32

33
# Compatibility
34

35
Brakeman works with Rails 2.x, 3.x, and 4.x.
J
Justin 已提交
36

37 38
# Basic Options

D
David Lanner 已提交
39
For a full list of options, use `brakeman --help` or see the [OPTIONS.md](OPTIONS.md) file.
J
Justin 已提交
40 41 42

To specify an output file for the results:

43
    brakeman -o output_file
J
Justin 已提交
44

J
Justin Collins 已提交
45
The output format is determined by the file extension or by using the `-f` option. Current options are: `text`, `html`, `tabs`, `json`, `markdown`, and `csv`.
J
Justin 已提交
46

J
Justin Collins 已提交
47 48 49 50
Multiple output files can be specified:

    brakeman -o output.html -o output.json

J
Justin 已提交
51 52
To suppress informational warnings and just output the report:

53
    brakeman -q
J
Justin 已提交
54

55 56
Note all Brakeman output except reports are sent to stderr, making it simple to redirect stdout to a file and just get the report.

J
Justin 已提交
57 58
To see all kinds of debugging information:

59
    brakeman -d
J
Justin 已提交
60 61 62

Specific checks can be skipped, if desired. The name needs to be the correct case. For example, to skip looking for default routes (`DefaultRoutes`):

63
    brakeman -x DefaultRoutes
J
Justin 已提交
64 65 66

Multiple checks should be separated by a comma:

67
    brakeman -x DefaultRoutes,Redirect
J
Justin 已提交
68 69 70

To do the opposite and only run a certain set of tests:

71
    brakeman -t SQL,ValidationRegex
J
Justin 已提交
72

J
Justin 已提交
73 74 75 76 77 78
If Brakeman is running a bit slow, try

    brakeman --faster

This will disable some features, but will probably be much faster (currently it is the same as `--skip-libs --no-branching`). *WARNING*: This may cause Brakeman to miss some vulnerabilities.

J
Justin Collins 已提交
79
By default, Brakeman will return 0 as an exit code unless something went very wrong. To return an error code when warnings were found:
J
Justin Collins 已提交
80 81 82

    brakeman -z

J
Justin Collins 已提交
83 84 85 86
To skip certain files that Brakeman may have trouble parsing, use:

    brakeman --skip-files file1,file2,etc

J
Justin Collins 已提交
87 88 89 90 91 92
To compare results of a scan with a previous scan, use the JSON output option and then:

    brakeman --compare old_report.json

This will output JSON with two lists: one of fixed warnings and one of new warnings.

J
Justin Collins 已提交
93 94 95 96 97
Brakeman will ignore warnings if configured to do so. By default, it looks for a configuration file in `config/brakeman.ignore`.
To create and manage this file, use:

    brakeman -I

J
Justin 已提交
98 99
# Warning information

D
David Lanner 已提交
100
See [WARNING\_TYPES](WARNING_TYPES) for more information on the warnings reported by this tool.
J
Justin 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

# Warning context

The HTML output format provides an excerpt from the original application source where a warning was triggered. Due to the processing done while looking for vulnerabilities, the source may not resemble the reported warning and reported line numbers may be slightly off. However, the context still provides a quick look into the code which raised the warning.

# Confidence levels

Brakeman assigns a confidence level to each warning. This provides a rough estimate of how certain the tool is that a given warning is actually a problem. Naturally, these ratings should not be taken as absolute truth.

There are three levels of confidence:

 + High - Either this is a simple warning (boolean value) or user input is very likely being used in unsafe ways.
 + Medium - This generally indicates an unsafe use of a variable, but the variable may or may not be user input.
 + Weak - Typically means user input was indirectly used in a potentially unsafe manner.

To only get warnings above a given confidence level:

118
    brakeman -w3
J
Justin 已提交
119

J
Justin Collins 已提交
120
The `-w` switch takes a number from 1 to 3, with 1 being low (all warnings) and 3 being high (only highest confidence warnings).
J
Justin 已提交
121 122 123 124 125 126 127

# Configuration files

Brakeman options can stored and read from YAML files. To simplify the process of writing a configuration file, the `-C` option will output the currently set options.

Options passed in on the commandline have priority over configuration files.

G
grosser 已提交
128
The default config locations are `./config/brakeman.yml`, `~/.brakeman/config.yml`, and `/etc/brakeman/config.yml`
J
Justin 已提交
129 130 131

The `-c` option can be used to specify a configuration file to use.

132 133
# Continuous Integration

134
There is a [plugin available](http://brakemanscanner.org/docs/jenkins/) for Jenkins/Hudson.
135 136 137 138 139

For even more continuous testing, try the [Guard plugin](https://github.com/guard/guard-brakeman).

# Building

D
David Lanner 已提交
140 141
    git clone git://github.com/presidentbeef/brakeman.git
    cd brakeman
142 143 144
    gem build brakeman.gemspec
    gem install brakeman*.gem

J
Justin Collins 已提交
145 146 147 148 149 150 151 152
# Who is Using Brakeman?

* [Code Climate](https://codeclimate.com/)
* [GitHub](https://github.com/)
* [Groupon](http://www.groupon.com/)
* [New Relic](http://newrelic.com)
* [Twitter](https://twitter.com/)

153
[..and more!](http://brakemanscanner.org/brakeman_users)
J
Justin Collins 已提交
154

155 156 157 158 159 160 161 162
# Homepage/News

Website: http://brakemanscanner.org/

Twitter: http://twitter.com/brakeman

Mailing list: brakeman@librelist.com

J
Justin Collins 已提交
163 164
# License

D
David Lanner 已提交
165
see [MIT-LICENSE](MIT-LICENSE)