Zachary Rice 4 лет назад
Родитель
Сommit
b8141713e8
1 измененных файлов с 61 добавлено и 39 удалено
  1. 61 39
      README.md

+ 61 - 39
README.md

@@ -61,6 +61,28 @@ cd gitleaks
 make build
 ```
 
+### Pre-Commit
+1. Install pre-commit from https://pre-commit.com/#install
+2. Create a `.pre-commit-config.yaml` file at the root of your repository with the following content:
+```
+repos:
+  - repo: https://github.com/zricethezav/gitleaks
+    rev: v8.2.0
+    hooks:
+      - id: gitleaks
+```
+3. Install with `pre-commit install`
+4. Now you're all set!
+```
+➜ git commit -m "this commit contains a secret"
+Detect hardcoded secrets.................................................Failed
+```
+Note: to disable the gitleaks pre-commit hook you can prepend `SKIP=gitleaks` to the commit command
+and it will skip running gitleaks
+```
+➜ SKIP=gitleaks git commit -m "skip gitleaks check"
+Detect hardcoded secrets................................................Skipped
+```
 
 ## Usage
 ```
@@ -96,22 +118,22 @@ Use "gitleaks [command] --help" for more information about a command.
 ### Commands
 There are two commands you will use to detect secrets; `detect` and `protect`.
 #### Detect
-The `detect` command is used to scan repos, directories, and files.  This comand can be used on developer machines and in CI environments. 
+The `detect` command is used to scan repos, directories, and files.  This comand can be used on developer machines and in CI environments.
 
-When running `detect` on a git repository, gitleaks will parse the output of a `git log -p` command (you can see how this executed 
-[here](https://github.com/zricethezav/gitleaks/blob/7240e16769b92d2a1b137c17d6bf9d55a8562899/git/git.go#L17-L25)). 
-[`git log -p` generates patches](https://git-scm.com/docs/git-log#_generating_patch_text_with_p) which gitleaks will use to detect secrets. 
-You can configure what commits `git log` will range over by using the `--log-opts` flag. `--log-opts` accepts any option for `git log -p`. 
-For example, if you wanted to run gitleaks on a range of commits you could use the following command: `gitleaks --source . --log-opts="--all commitA..commitB"`. 
+When running `detect` on a git repository, gitleaks will parse the output of a `git log -p` command (you can see how this executed
+[here](https://github.com/zricethezav/gitleaks/blob/7240e16769b92d2a1b137c17d6bf9d55a8562899/git/git.go#L17-L25)).
+[`git log -p` generates patches](https://git-scm.com/docs/git-log#_generating_patch_text_with_p) which gitleaks will use to detect secrets.
+You can configure what commits `git log` will range over by using the `--log-opts` flag. `--log-opts` accepts any option for `git log -p`.
+For example, if you wanted to run gitleaks on a range of commits you could use the following command: `gitleaks --source . --log-opts="--all commitA..commitB"`.
 See the `git log` [documentation](https://git-scm.com/docs/git-log) for more information.
 
 You can scan files and directories by using the `--no-git` option.
 
 #### Protect
-The `protect` command is used to uncommitted changes in a git repo. This command should be used on developer machines in accordance with 
-[shifting left on security](https://cloud.google.com/architecture/devops/devops-tech-shifting-left-on-security). 
-When running `protect` on a git repository, gitleaks will parse the output of a `git diff` command (you can see how this executed 
-[here](https://github.com/zricethezav/gitleaks/blob/7240e16769b92d2a1b137c17d6bf9d55a8562899/git/git.go#L48-L49)). You can set the 
+The `protect` command is used to uncommitted changes in a git repo. This command should be used on developer machines in accordance with
+[shifting left on security](https://cloud.google.com/architecture/devops/devops-tech-shifting-left-on-security).
+When running `protect` on a git repository, gitleaks will parse the output of a `git diff` command (you can see how this executed
+[here](https://github.com/zricethezav/gitleaks/blob/7240e16769b92d2a1b137c17d6bf9d55a8562899/git/git.go#L48-L49)). You can set the
 `--staged` flag to check for changes in commits that have been `git add`ed. The `--staged` flag should be used when running Gitleaks
 as a pre-commit.
 
@@ -168,34 +190,34 @@ diff --git a/checks_test.go b/checks_test.go
 ```
 
 ## Pre-Commit hook
-You can run Gitleaks as a pre-commit hook by copying the example `pre-commit.py` script into 
+You can run Gitleaks as a pre-commit hook by copying the example `pre-commit.py` script into
 your `.git/hooks/` directory.
 
 ## Configuration
 Gitleaks offers a configuration format you can follow to write your own secret detection rules:
 ```toml
-# Title for the gitleaks configuration file. 
+# Title for the gitleaks configuration file.
 title = "Gitleaks title"
 
 # An array of tables that contain information that define instructions
-# on how to detect secrets 
+# on how to detect secrets
 [[rules]]
 # Unique identifier for this rule
 id = "awesome-rule-1"
 # Short human readable description of the rule.
-description = "awsome rule 1" 
+description = "awsome rule 1"
 # Golang regular expression used to detect secrets. Note Golang's regex engine
 # does not support lookaheads.
-regex = '''one-go-style-regex-for-this-rule''' 
+regex = '''one-go-style-regex-for-this-rule'''
 # Golang regular expression used to match paths. This can be used as a standalone rule or it can be used
 # in conjunction with a valid `regex` entry.
 path = '''a-file-path-regex'''
 # Array of strings used for metadata and reporting purposes.
 tags = ["tag","another tag"]
-# Int used to extract secret from regex match and used as the group that will have 
-# its entropy checked if `entropy` is set. 
+# Int used to extract secret from regex match and used as the group that will have
+# its entropy checked if `entropy` is set.
 secretGroup = 3
-# Float representing the minimum shannon entropy a regex group must have to be considered a secret. 
+# Float representing the minimum shannon entropy a regex group must have to be considered a secret.
 entropy = 3.5
 # You can include an allowlist table for a single rule to reduce false positives or ignore commits
 # with known/rotated secrets
@@ -206,7 +228,7 @@ paths = ['''one-file-path-regex''']
 regexes = ['''one-regex-within-the-already-matched-regex''']
 
 # This is a global allowlist which has a higher order of precendence than rule-specific allowlists.
-# If a commit listed in the `commits` field below is encountered then that commit will be skipped and no 
+# If a commit listed in the `commits` field below is encountered then that commit will be skipped and no
 # secrets will be detected for said commit. The same logic applies for regexes and paths.
 [allowlist]
 description = "ignore commit A"
@@ -219,36 +241,36 @@ Refer to the default [gitleaks config](https://github.com/zricethezav/gitleaks/b
 ### Tips on Writing Regular Expressions
  Gitleaks rules are defined by regular expressions and entropy ranges.
  Some secrets have unique signatures which make detecting those secrets easy.
- Examples of those secrets would be Gitlab Personal Access Tokens, AWS keys, and Github Access Tokens. 
+ Examples of those secrets would be Gitlab Personal Access Tokens, AWS keys, and Github Access Tokens.
  All these examples have defined prefixes like `glpat`, `AKIA`, `ghp_`, etc.
- 
+
  Other secrets might just be a hash which means we need to write more complex rules to verify
  that what we are matching is a secret.
- 
+
  Here is an example of a semi-generic secret
 ```
 discord_client_secret = "8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ"
 ```
- We can write a regular expression to capture the variable name (identifier), 
+ We can write a regular expression to capture the variable name (identifier),
  the assignment symbol (like '=' or ':='), and finally the actual secret.
  The structure of a rule to match this example secret is below:
 
-                                                           Beginning string                           
-                                                               quotation                              
-                                                                   │            End string quotation  
-                                                                   │                      │           
-                                                                   ▼                      ▼           
-    (?i)(discord[a-z0-9_ .\-,]{0,25})(=|>|:=|\|\|:|<=|=>|:).{0,5}['\"]([a-z0-9=_\-]{32})['\"]         
-                                                                                                      
-                   ▲                              ▲                                ▲                  
-                   │                              │                                │                  
-                   │                              │                                │                  
-              identifier                  assignment symbol                                           
-                                                                                Secret                
-                                                                                                      
+                                                           Beginning string
+                                                               quotation
+                                                                   │            End string quotation
+                                                                   │                      │
+                                                                   ▼                      ▼
+    (?i)(discord[a-z0-9_ .\-,]{0,25})(=|>|:=|\|\|:|<=|=>|:).{0,5}['\"]([a-z0-9=_\-]{32})['\"]
+
+                   ▲                              ▲                                ▲
+                   │                              │                                │
+                   │                              │                                │
+              identifier                  assignment symbol
+                                                                                Secret
+
 
 #### A Note on Generic Secrets
-Let's continue with the example `discord_client_secret = "8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ"`. 
+Let's continue with the example `discord_client_secret = "8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ"`.
 This secret would match both the `discord-client-secret` rule and the `generic-api-key` rule in the default config.
 ```
 [[rules]]
@@ -264,9 +286,9 @@ regex = '''(?i)((key|api|token|secret|password)[a-z0-9_ .\-,]{0,25})(=|>|:=|\|\|
 entropy = 3.7
 secretGroup = 4
 ```
-If gitleaks encountered `discord_client_secret = "8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ"`, only the `discord` rule would report a finding because 
+If gitleaks encountered `discord_client_secret = "8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ"`, only the `discord` rule would report a finding because
 the generic rule has the string `generic` somewhere in the rule's `id`. If a secret is encountered and both a `generic` and non-generic rule have discovered the same secret, the non-generic
-will be given precedence. 
+will be given precedence.
 
 
 ## Exit Codes