eslint-plugin-security 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.eslint-doc-generatorrc.js +9 -0
  2. package/.eslintrc +29 -1
  3. package/.github/ISSUE_TEMPLATE/bug-report.yml +85 -0
  4. package/.github/ISSUE_TEMPLATE/new-rule.yml +39 -0
  5. package/.github/ISSUE_TEMPLATE/rule-change.yml +61 -0
  6. package/.github/workflows/ci.yml +55 -0
  7. package/.github/workflows/pr.yml +19 -0
  8. package/.github/workflows/release-please.yml +39 -0
  9. package/.markdownlint.json +4 -0
  10. package/.markdownlintignore +3 -0
  11. package/.prettierrc.json +7 -0
  12. package/CHANGELOG.md +114 -34
  13. package/README.md +45 -85
  14. package/docs/avoid-command-injection-node.md +85 -0
  15. package/docs/bypass-connect-csrf-protection-by-abusing.md +42 -0
  16. package/docs/regular-expression-dos-and-node.md +83 -0
  17. package/docs/rules/detect-bidi-characters.md +50 -0
  18. package/docs/rules/detect-buffer-noassert.md +9 -0
  19. package/docs/rules/detect-child-process.md +9 -0
  20. package/docs/rules/detect-disable-mustache-escape.md +9 -0
  21. package/docs/rules/detect-eval-with-expression.md +7 -0
  22. package/docs/rules/detect-new-buffer.md +5 -0
  23. package/docs/rules/detect-no-csrf-before-method-override.md +9 -0
  24. package/docs/rules/detect-non-literal-fs-filename.md +7 -0
  25. package/docs/rules/detect-non-literal-regexp.md +7 -0
  26. package/docs/rules/detect-non-literal-require.md +7 -0
  27. package/docs/rules/detect-object-injection.md +7 -0
  28. package/docs/rules/detect-possible-timing-attacks.md +5 -0
  29. package/docs/rules/detect-pseudoRandomBytes.md +5 -0
  30. package/docs/rules/detect-unsafe-regex.md +7 -0
  31. package/docs/the-dangers-of-square-bracket-notation.md +107 -0
  32. package/index.js +10 -9
  33. package/package.json +34 -7
  34. package/rules/detect-bidi-characters.js +101 -0
  35. package/rules/detect-buffer-noassert.js +66 -55
  36. package/rules/detect-child-process.js +57 -25
  37. package/rules/detect-disable-mustache-escape.js +24 -14
  38. package/rules/detect-eval-with-expression.js +19 -9
  39. package/rules/detect-new-buffer.js +19 -16
  40. package/rules/detect-no-csrf-before-method-override.js +32 -25
  41. package/rules/detect-non-literal-fs-filename.js +86 -33
  42. package/rules/detect-non-literal-regexp.js +24 -18
  43. package/rules/detect-non-literal-require.js +25 -17
  44. package/rules/detect-object-injection.js +61 -59
  45. package/rules/detect-possible-timing-attacks.js +40 -42
  46. package/rules/detect-pseudoRandomBytes.js +18 -11
  47. package/rules/detect-unsafe-regex.js +36 -23
  48. package/test/detect-bidi-characters.js +74 -0
  49. package/test/detect-buffer-noassert.js +18 -18
  50. package/test/detect-child-process.js +49 -23
  51. package/test/detect-disable-mustache-escape.js +3 -4
  52. package/test/detect-eval-with-expression.js +4 -5
  53. package/test/detect-new-buffer.js +4 -5
  54. package/test/detect-no-csrf-before-method-override.js +3 -4
  55. package/test/detect-non-literal-fs-filename.js +135 -9
  56. package/test/detect-non-literal-regexp.js +5 -6
  57. package/test/detect-non-literal-require.js +11 -8
  58. package/test/detect-object-injection.js +3 -5
  59. package/test/detect-possible-timing-attacks.js +8 -10
  60. package/test/detect-pseudoRandomBytes.js +3 -4
  61. package/test/detect-unsafe-regexp.js +9 -11
  62. package/test/utils/import-utils.js +172 -0
  63. package/utils/data/fsFunctionData.json +51 -0
  64. package/utils/import-utils.js +196 -0
  65. package/.npmignore +0 -1
  66. package/rules/data/fsFunctionData.json +0 -51
@@ -0,0 +1,9 @@
1
+ const { format } = require('prettier');
2
+ const prettierRC = require('./.prettierrc.json');
3
+
4
+ /** @type {import('eslint-doc-generator').GenerateOptions} */
5
+ const config = {
6
+ postprocess: (doc) => format(doc, { ...prettierRC, parser: 'markdown' }),
7
+ };
8
+
9
+ module.exports = config;
package/.eslintrc CHANGED
@@ -1,3 +1,31 @@
1
1
  {
2
- "extends": "nodesecurity"
2
+ "extends": ["eslint:recommended", "prettier", "plugin:eslint-plugin/recommended"],
3
+ "parserOptions": {
4
+ "ecmaVersion": "latest"
5
+ },
6
+ "env": {
7
+ "node": true,
8
+ "es2020": true
9
+ },
10
+ "rules": {
11
+ "eslint-plugin/prefer-message-ids": "off", // TODO: enable
12
+ "eslint-plugin/require-meta-docs-description": ["error", { "pattern": "^(Detects|Enforces|Requires|Disallows) .+\\.$" }],
13
+ "eslint-plugin/require-meta-docs-url": [
14
+ "error",
15
+ {
16
+ "pattern": "https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/{{name}}.md"
17
+ }
18
+ ],
19
+ "eslint-plugin/require-meta-schema": "off", // TODO: enable
20
+ "eslint-plugin/require-meta-type": "off" // TODO: enable
21
+ },
22
+ "overrides": [
23
+ {
24
+ "files": ["test/**/*.js"],
25
+ "globals": {
26
+ "describe": "readonly",
27
+ "it": "readonly"
28
+ }
29
+ }
30
+ ]
3
31
  }
@@ -0,0 +1,85 @@
1
+ name: "\U0001F41E Report a problem"
2
+ description: 'Report an issue with a rule'
3
+ title: 'Bug: (fill in)'
4
+ labels:
5
+ - bug
6
+ - 'repro:needed'
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: By opening an issue, you agree to abide by the [Open JS Foundation Code of Conduct](https://eslint.org/conduct).
11
+ - type: input
12
+ attributes:
13
+ label: What version of eslint-plugin-security are you using?
14
+ validations:
15
+ required: true
16
+ - type: textarea
17
+ attributes:
18
+ label: ESLint Environment
19
+ description: |
20
+ Please tell us about how you're running ESLint (Run `npx eslint --env-info`.)
21
+ value: |
22
+ Node version:
23
+ npm version:
24
+ Local ESLint version:
25
+ Global ESLint version:
26
+ Operating System:
27
+ validations:
28
+ required: true
29
+ - type: dropdown
30
+ attributes:
31
+ label: What parser are you using?
32
+ description: |
33
+ Please keep in mind that some problems are parser-specific.
34
+ options:
35
+ - 'Default (Espree)'
36
+ - '@typescript-eslint/parser'
37
+ - '@babel/eslint-parser'
38
+ - 'vue-eslint-parser'
39
+ - '@angular-eslint/template-parser'
40
+ - Other
41
+ validations:
42
+ required: true
43
+ - type: textarea
44
+ attributes:
45
+ label: What did you do?
46
+ description: |
47
+ Please include a *minimal* reproduction case. If possible, include a link to a reproduction of the problem in the [ESLint demo](https://eslint.org/demo). Otherwise, include source code, configuration file(s), and any other information about how you're using ESLint. You can use Markdown in this field.
48
+ value: |
49
+ <details>
50
+ <summary>Configuration</summary>
51
+
52
+ ```
53
+ <!-- Paste your configuration here -->
54
+ ```
55
+ </details>
56
+
57
+ ```js
58
+ <!-- Paste your code here -->
59
+ ```
60
+ validations:
61
+ required: true
62
+ - type: textarea
63
+ attributes:
64
+ label: What did you expect to happen?
65
+ description: |
66
+ You can use Markdown in this field.
67
+ validations:
68
+ required: true
69
+ - type: textarea
70
+ attributes:
71
+ label: What actually happened?
72
+ description: |
73
+ Please copy-paste the actual ESLint output. You can use Markdown in this field.
74
+ validations:
75
+ required: true
76
+ - type: checkboxes
77
+ attributes:
78
+ label: Participation
79
+ options:
80
+ - label: I am willing to submit a pull request for this issue.
81
+ required: false
82
+ - type: textarea
83
+ attributes:
84
+ label: Additional comments
85
+ description: Is there anything else that's important for the team to know?
@@ -0,0 +1,39 @@
1
+ name: "\U0001F680 Propose a new rule"
2
+ description: 'Propose a new rule to be added to the plugin'
3
+ title: 'New Rule: (fill in)'
4
+ labels:
5
+ - rule
6
+ - feature
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: By opening an issue, you agree to abide by the [Open JS Foundation Code of Conduct](https://eslint.org/conduct).
11
+ - type: input
12
+ attributes:
13
+ label: Rule details
14
+ description: What should the new rule do?
15
+ validations:
16
+ required: true
17
+ - type: input
18
+ attributes:
19
+ label: Related CVE
20
+ description: We only accept new rules that have a published [CVE](https://www.redhat.com/en/topics/security/what-is-cve).
21
+ validations:
22
+ required: true
23
+ - type: textarea
24
+ attributes:
25
+ label: Example code
26
+ description: Please provide some example JavaScript code that this rule will warn about. This field will render as JavaScript.
27
+ render: js
28
+ validations:
29
+ required: true
30
+ - type: checkboxes
31
+ attributes:
32
+ label: Participation
33
+ options:
34
+ - label: I am willing to submit a pull request to implement this rule.
35
+ required: false
36
+ - type: textarea
37
+ attributes:
38
+ label: Additional comments
39
+ description: Is there anything else that's important for the team to know?
@@ -0,0 +1,61 @@
1
+ name: "\U0001F4DD Request a rule change"
2
+ description: 'Request a change to an existing rule'
3
+ title: 'Rule Change: (fill in)'
4
+ labels:
5
+ - enhancement
6
+ - rule
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: By opening an issue, you agree to abide by the [Open JS Foundation Code of Conduct](https://eslint.org/conduct).
11
+ - type: input
12
+ attributes:
13
+ label: What rule do you want to change?
14
+ validations:
15
+ required: true
16
+ - type: dropdown
17
+ attributes:
18
+ label: What change to do you want to make?
19
+ options:
20
+ - Generate more warnings
21
+ - Generate fewer warnings
22
+ - Implement autofix
23
+ - Implement suggestions
24
+ validations:
25
+ required: true
26
+ - type: dropdown
27
+ attributes:
28
+ label: How do you think the change should be implemented?
29
+ options:
30
+ - A new option
31
+ - A new default behavior
32
+ - Other
33
+ validations:
34
+ required: true
35
+ - type: textarea
36
+ attributes:
37
+ label: Example code
38
+ description: Please provide some example code that this change will affect. This field will render as JavaScript.
39
+ render: js
40
+ validations:
41
+ required: true
42
+ - type: textarea
43
+ attributes:
44
+ label: What does the rule currently do for this code?
45
+ validations:
46
+ required: true
47
+ - type: textarea
48
+ attributes:
49
+ label: What will the rule do after it's changed?
50
+ validations:
51
+ required: true
52
+ - type: checkboxes
53
+ attributes:
54
+ label: Participation
55
+ options:
56
+ - label: I am willing to submit a pull request to implement this change.
57
+ required: false
58
+ - type: textarea
59
+ attributes:
60
+ label: Additional comments
61
+ description: Is there anything else that's important for the team to know?
@@ -0,0 +1,55 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ lint:
10
+ name: Lint
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ contents: read
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ with:
17
+ persist-credentials: false
18
+ - uses: actions/setup-node@v3
19
+ with:
20
+ node-version: '16.x'
21
+
22
+ - name: Install Packages
23
+ run: npm install
24
+
25
+ - name: Lint Files
26
+ run: npm run lint
27
+
28
+ test:
29
+ name: Test
30
+ strategy:
31
+ matrix:
32
+ os: [ubuntu-latest]
33
+ node: [18.x, 16.x, 14.x, 12.x, '12.22.0']
34
+ include:
35
+ - os: windows-latest
36
+ node: '16.x'
37
+ - os: macOS-latest
38
+ node: '16.x'
39
+ runs-on: ${{ matrix.os }}
40
+ permissions:
41
+ contents: read
42
+ steps:
43
+ - uses: actions/checkout@v3
44
+ with:
45
+ persist-credentials: false
46
+
47
+ - uses: actions/setup-node@v3
48
+ with:
49
+ node-version: ${{ matrix.node }}
50
+
51
+ - name: Install Packages
52
+ run: npm install
53
+
54
+ - name: Test
55
+ run: npm test
@@ -0,0 +1,19 @@
1
+ name: Pull Request Titles
2
+ on: pull_request
3
+
4
+ jobs:
5
+ conventional:
6
+ name: Conventional PR
7
+ runs-on: ubuntu-latest
8
+ permissions:
9
+ contents: read
10
+ steps:
11
+ - uses: actions/checkout@v3
12
+ with:
13
+ persist-credentials: false
14
+ - uses: actions/setup-node@v3
15
+ - uses: beemojs/conventional-pr-action@v2
16
+ env:
17
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
18
+ with:
19
+ config-preset: angular
@@ -0,0 +1,39 @@
1
+ on:
2
+ push:
3
+ branches:
4
+ - main
5
+ name: release-please
6
+ jobs:
7
+ release-please:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: GoogleCloudPlatform/release-please-action@v2
11
+ id: release
12
+ with:
13
+ release-type: node
14
+ package-name: test-release-please
15
+ # The logic below handles the npm publication:
16
+ - uses: actions/checkout@v3
17
+ # these if statements ensure that a publication only occurs when
18
+ # a new release is created:
19
+ if: ${{ steps.release.outputs.release_created }}
20
+ - uses: actions/setup-node@v3
21
+ with:
22
+ node-version: 16
23
+ registry-url: 'https://registry.npmjs.org'
24
+ if: ${{ steps.release.outputs.release_created }}
25
+ - run: npm ci
26
+ if: ${{ steps.release.outputs.release_created }}
27
+ - run: npm publish
28
+ env:
29
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
30
+ if: ${{ steps.release.outputs.release_created }}
31
+
32
+ # Tweets out release announcement
33
+ - run: 'npx @humanwhocodes/tweet "${{ github.event.repository.full_name }} v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}.${{ steps.release.outputs.patch }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}.${{ steps.release.outputs.patch }}"'
34
+ if: ${{ steps.release.outputs.release_created }}
35
+ env:
36
+ TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
37
+ TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
38
+ TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
39
+ TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
@@ -0,0 +1,4 @@
1
+ {
2
+ "line-length": false,
3
+ "no-inline-html": { "allowed_elements": ["kbd"] }
4
+ }
@@ -0,0 +1,3 @@
1
+ CHANGELOG.md
2
+ LICENSE
3
+ node_modules
@@ -0,0 +1,7 @@
1
+ {
2
+ "trailingComma": "es5",
3
+ "tabWidth": 2,
4
+ "semi": true,
5
+ "singleQuote": true,
6
+ "printWidth": 180
7
+ }
package/CHANGELOG.md CHANGED
@@ -1,34 +1,114 @@
1
- 1.4.0 / 2017-06-12
2
- ==================
3
-
4
- * Add recommended ruleset to the usage example
5
- * Removes filenames from error output
6
-
7
- 1.3.0 / 2017-02-09
8
- ==================
9
-
10
- * README.md - document detect-disable-mustache-escape rule
11
- * README.md - documentation detect-new-buffer rule
12
- * Fixed crash with `detect-no-csrf-before-method-override` rule.
13
- * Style guide applied to all the code involving the tests
14
- * Removing a repeated test and style changes
15
- * ESLint added to the workflow
16
- * Removed not needed variables
17
- * Fix to a problem with a rule detected implementing the tests
18
- * Test engine with tests for all the rules
19
- * Add additional information to README for each rule
20
-
21
- 1.2.0 / 2016-01-21
22
- ==================
23
-
24
- * updated to check for new RegExp too
25
-
26
- 1.1.0 / 2016-01-06
27
- ==================
28
-
29
- * adding eslint rule to detect new buffer hotspot
30
-
31
- 1.0.0 / 2015-11-15
32
- ==================
33
-
34
- * rules disabled by default
1
+ # Changelog
2
+
3
+ ## [1.6.0](https://www.github.com/eslint-community/eslint-plugin-security/compare/v1.5.0...v1.6.0) (2023-01-11)
4
+
5
+ ### Features
6
+
7
+ * Add meta object documentation for all rules ([#79](https://www.github.com/eslint-community/eslint-plugin-security/issues/79)) ([fb1d9ef](https://www.github.com/eslint-community/eslint-plugin-security/commit/fb1d9ef56e0cf2705b9e413b483261df394c45e1))
8
+ * detect-bidi-characters rule ([#95](https://www.github.com/eslint-community/eslint-plugin-security/issues/95)) ([4294d29](https://www.github.com/eslint-community/eslint-plugin-security/commit/4294d29cca8af5c627de759919add6dd698644ba))
9
+ * **detect-non-literal-fs-filename:** change to track non-top-level `require()` as well ([#105](https://www.github.com/eslint-community/eslint-plugin-security/issues/105)) ([d3b1543](https://www.github.com/eslint-community/eslint-plugin-security/commit/d3b15435b45b9ac2ee5f0d3249f590e32369d7d2))
10
+ * extend detect non literal fs filename ([#92](https://www.github.com/eslint-community/eslint-plugin-security/issues/92)) ([08ba476](https://www.github.com/eslint-community/eslint-plugin-security/commit/08ba4764a83761f6f44cb28940923f1d25f88581))
11
+ * **non-literal-require:** support template literals ([#81](https://www.github.com/eslint-community/eslint-plugin-security/issues/81)) ([208019b](https://www.github.com/eslint-community/eslint-plugin-security/commit/208019bad4f70a142ab1f0ea7238c37cb70d1a5a))
12
+
13
+ ### Bug Fixes
14
+
15
+ * Avoid crash when exec() is passed no arguments ([7f97815](https://www.github.com/eslint-community/eslint-plugin-security/commit/7f97815accf6bcd87de73c32a967946b1b3b0530)), closes [#82](https://www.github.com/eslint-community/eslint-plugin-security/issues/82) [#23](https://www.github.com/eslint-community/eslint-plugin-security/issues/23)
16
+ * Avoid TypeError when exec stub is used with no arguments ([#97](https://www.github.com/eslint-community/eslint-plugin-security/issues/97)) ([9c18f16](https://www.github.com/eslint-community/eslint-plugin-security/commit/9c18f16187719b58cc5dfde9860344bad823db28))
17
+ * **detect-child-process:** false positive for destructuring with `exec` ([#102](https://www.github.com/eslint-community/eslint-plugin-security/issues/102)) ([657921a](https://www.github.com/eslint-community/eslint-plugin-security/commit/657921a93f6f73c0de6113e497b22e7cf079f520))
18
+ * **detect-child-process:** false positives for destructuring `spawn` ([#103](https://www.github.com/eslint-community/eslint-plugin-security/issues/103)) ([fdfe37d](https://www.github.com/eslint-community/eslint-plugin-security/commit/fdfe37d667367e5fd228c26573a1791c81a044d2))
19
+ * Incorrect method name in detect-buffer-noassert. ([313c0c6](https://www.github.com/eslint-community/eslint-plugin-security/commit/313c0c693f48aa85d0c9b65a46f6c620cd10f907)), closes [#63](https://www.github.com/eslint-community/eslint-plugin-security/issues/63) [#80](https://www.github.com/eslint-community/eslint-plugin-security/issues/80)
20
+
21
+ ## 1.5.0 / 2022-04-14
22
+
23
+ - Fix avoid crash when exec() is passed no arguments
24
+ Closes [#82](https://github.com/nodesecurity/eslint-plugin-security/pull/82) with ref as [#23](https://github.com/nodesecurity/eslint-plugin-security/pull/23)
25
+ - Fix incorrect method name in detect-buffer-noassert
26
+ Closes [#63](https://github.com/nodesecurity/eslint-plugin-security/pull/63) and [#80](https://github.com/nodesecurity/eslint-plugin-security/pull/80)
27
+ - Clean up source code formatting
28
+ Fixes [#4](https://github.com/nodesecurity/eslint-plugin-security/issues/4) and closes [#78](https://github.com/nodesecurity/eslint-plugin-security/pull/78)
29
+ - Add release script
30
+ [Script](https://github.com/nodesecurity/eslint-plugin-security/commit/0a6631ea448eb0031af7b351c85b3aa298c2e44c)
31
+ - Add non-literal require TemplateLiteral support [#81](https://github.com/nodesecurity/eslint-plugin-security/pull/81)
32
+ - Add meta object documentation for all rules [#79](https://github.com/nodesecurity/eslint-plugin-security/pull/79)
33
+ - Added Git pre-commit hook to format JS files
34
+ [Pre-commit hook](https://github.com/nodesecurity/eslint-plugin-security/commit/e2ae2ee9ef214ca6d8f69fbcc438d230fda2bf97)
35
+ - Added yarn installation method
36
+ - Fix linting errors and step
37
+ [Lint errors](https://github.com/nodesecurity/eslint-plugin-security/commit/1258118c2d07722e9fb388a672b287bb43bc73b3), [Lint step](https://github.com/nodesecurity/eslint-plugin-security/commit/84f3ed3ab88427753c7ac047d0bccbe557f28aa5)
38
+ - Create workflows
39
+ Check commit message on pull requests, Set up ci on main branch
40
+ - Update test and lint commands to work cross-platform
41
+ [Commit](https://github.com/nodesecurity/eslint-plugin-security/commit/d3d8e7a27894aa3f83b560f530eb49750e9ee19a)
42
+ - Merge pull request [#47](https://github.com/nodesecurity/eslint-plugin-security/pull/47) from pdehaan/add-docs
43
+ Add old liftsecurity blog posts to docs/ folder
44
+ - Bumped up dependencies
45
+ - Added `package-lock.json`
46
+ - Fixed typos in README and documentation
47
+ Replaced dead links in README
48
+
49
+ ## 1.4.0 / 2017-06-12
50
+
51
+ - 1.4.0
52
+ - Stuff and things for 1.4.0 beep boop 🤖
53
+ - Merge pull request [#14](https://github.com/nodesecurity/eslint-plugin-security/issues/14) from travi/recommended-example
54
+ Add recommended ruleset to the usage example
55
+ - Merge pull request [#19](https://github.com/nodesecurity/eslint-plugin-security/issues/19) from pdehaan/add-changelog
56
+ Add basic CHANGELOG.md file
57
+ - Merge pull request [#17](https://github.com/nodesecurity/eslint-plugin-security/issues/17) from pdehaan/issue-16
58
+ Remove filename from error output
59
+ - Add basic CHANGELOG.md file
60
+ - Remove filename from error output
61
+ - Add recommended ruleset to the usage example
62
+ for [#9](https://github.com/nodesecurity/eslint-plugin-security/issues/9)
63
+ - Merge pull request [#10](https://github.com/nodesecurity/eslint-plugin-security/issues/10) from pdehaan/issue-9
64
+ Add 'plugin:security/recommended' config to plugin
65
+ - Merge pull request [#12](https://github.com/nodesecurity/eslint-plugin-security/issues/12) from tupaschoal/patch-1
66
+ Fix broken link for detect-object-injection
67
+ - Fix broken link for detect-object-injection
68
+ The current link leads to a 404 page, the new one is the proper page.
69
+ - Add 'plugin:security/recommended' config to plugin
70
+
71
+ ## 1.3.0 / 2017-02-09
72
+
73
+ - 1.3.0
74
+ - Merge branch 'scottnonnenberg-update-docs'
75
+ - Fix merge conflicts because I can't figure out how to accept pr's in the right order
76
+ - Merge pull request [#7](https://github.com/nodesecurity/eslint-plugin-security/issues/7) from HamletDRC/patch-1
77
+ README.md - documentation detect-new-buffer rule
78
+ - Merge pull request [#8](https://github.com/nodesecurity/eslint-plugin-security/issues/8) from HamletDRC/patch-2
79
+ README.md - document detect-disable-mustache-escape rule
80
+ - Merge pull request [#3](https://github.com/nodesecurity/eslint-plugin-security/issues/3) from jesusprubio/master
81
+ A bit of love
82
+ - README.md - document detect-disable-mustache-escape rule
83
+ - README.md - documentation detect-new-buffer rule
84
+ - Merge pull request [#6](https://github.com/nodesecurity/eslint-plugin-security/issues/6) from mathieumg/csrf-bug
85
+ Fixed crash with `detect-no-csrf-before-method-override` rule
86
+ - Fixed crash with `detect-no-csrf-before-method-override` rule.
87
+ - Finishing last commit
88
+ - Style guide applied to all the code involving the tests
89
+ - Removing a repeated test and style changes
90
+ - ESLint added to the workflow
91
+ - Removed not needed variables
92
+ - Fix to a problem with a rule detected implementing the tests
93
+ - Test engine with tests for all the rules
94
+ - Minor typos
95
+ - A little bit of massage to readme intro
96
+ - Add additional information to README for each rule
97
+
98
+
99
+ ## 1.2.0 / 2016-01-21
100
+
101
+ - 1.2.0
102
+ - updated to check for new RegExp too
103
+
104
+ ## 1.1.0 / 2016-01-06
105
+
106
+ - 1.1.0
107
+ - adding eslint rule to detect new buffer hotspot
108
+
109
+ ## 1.0.0 / 2015-11-15
110
+
111
+ - updated desc
112
+ - rules disabled by default
113
+ - update links
114
+ - beep boop