From 30a29853cefed9abc38258f353306d09d678f26e Mon Sep 17 00:00:00 2001 From: Tobias Smolka Date: Thu, 13 Aug 2020 18:23:54 +0200 Subject: [PATCH] First attempt on iframe-missing-sandbox rule --- README.md | 1 + docs/rules/iframe-missing-sandbox.md | 29 ++++++ index.js | 1 + lib/rules/iframe-missing-sandbox.js | 103 ++++++++++++++++++++++ tests/lib/rules/iframe-missing-sandbox.js | 83 +++++++++++++++++ 5 files changed, 217 insertions(+) create mode 100644 docs/rules/iframe-missing-sandbox.md create mode 100644 lib/rules/iframe-missing-sandbox.js create mode 100644 tests/lib/rules/iframe-missing-sandbox.js diff --git a/README.md b/README.md index 3a06ef705d..0131710eff 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,7 @@ Enable the rules that you would like to use. * [react/forbid-foreign-prop-types](docs/rules/forbid-foreign-prop-types.md): Forbid using another component's propTypes * [react/forbid-prop-types](docs/rules/forbid-prop-types.md): Forbid certain propTypes * [react/function-component-definition](docs/rules/function-component-definition.md): Standardize the way function component get defined (fixable) +* [react/iframe-missing-sandbox](docs/rules/iframe-missing-sandbox.md): Enforce sandbox attribute on iframe elements * [react/no-access-state-in-setstate](docs/rules/no-access-state-in-setstate.md): Reports when this.state is accessed within setState * [react/no-adjacent-inline-elements](docs/rules/no-adjacent-inline-elements.md): Prevent adjacent inline elements not separated by whitespace. * [react/no-array-index-key](docs/rules/no-array-index-key.md): Prevent usage of Array index in keys diff --git a/docs/rules/iframe-missing-sandbox.md b/docs/rules/iframe-missing-sandbox.md new file mode 100644 index 0000000000..b0c4341f9c --- /dev/null +++ b/docs/rules/iframe-missing-sandbox.md @@ -0,0 +1,29 @@ +# Enforce sandbox attribute on iframe elements (react/iframe-missing-sandbox) + +The sandbox attribute enables an extra set of restrictions for the content in the iframe. Using sandbox attribute is considered a good security practice. + +See https://www.w3schools.com/tags/att_iframe_sandbox.asp + +## Rule Details + +This rule checks all JSX iframe elements and verifies that there is sandbox attribute and that it's value is valid. In addition to that it also reports cases where attribute contains `allow-scripts` and `allow-same-origin` at the same time as this combination allows the embedded document to remove the sandbox attribute and bypass the restrictions. + +The following patterns are considered warnings: + +```jsx +var React = require('react'); + +var Frame = ; +``` + +The following patterns are **not** considered warnings: + +```jsx +var React = require('react'); + +var Frame = '}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''} + ], + invalid: [{ + code: ';', + errors: [{messageId: 'attributeMissing'}] + }, + { + code: '', + errors: [{messageId: 'invalidValue', data: {value: '__unknown__'}}] + }, + { + code: ';', + errors: [{messageId: 'invalidCombination'}] + }, + { + code: '