From 138bb76994ad74faff899eb7a7595965ce76c2e4 Mon Sep 17 00:00:00 2001 From: Ng Yik Phang Date: Wed, 23 Aug 2017 10:54:40 +0800 Subject: [PATCH] [jsx-no-target-blank] Allow noopener or noreferrer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to the HTML5 Standard spec: > `` > has the same behavior as > ` +var Hello = var Hello = var Hello = var Hello = diff --git a/lib/rules/jsx-no-target-blank.js b/lib/rules/jsx-no-target-blank.js index ccba0e21a2..79028f25ad 100644 --- a/lib/rules/jsx-no-target-blank.js +++ b/lib/rules/jsx-no-target-blank.js @@ -25,7 +25,7 @@ function hasSecureRel(element) { return element.attributes.find(attr => { if (attr.type === 'JSXAttribute' && attr.name.name === 'rel') { const tags = attr.value && attr.value.type === 'Literal' && attr.value.value.toLowerCase().split(' '); - return tags && (tags.indexOf('noopener') >= 0 && tags.indexOf('noreferrer') >= 0); + return tags && (tags.indexOf('noopener') >= 0 || tags.indexOf('noreferrer') >= 0); } return false; }); @@ -34,7 +34,7 @@ function hasSecureRel(element) { module.exports = { meta: { docs: { - description: 'Forbid target="_blank" attribute without rel="noopener noreferrer"', + description: 'Forbid target="_blank" attribute without rel="noopener" or rel="noreferrer"', category: 'Best Practices', recommended: true }, @@ -53,7 +53,7 @@ module.exports = { hasExternalLink(node.parent) && !hasSecureRel(node.parent) ) { - context.report(node, 'Using target="_blank" without rel="noopener noreferrer" ' + + context.report(node, 'Using target="_blank" without rel="noopener" or rel="noreferrer" ' + 'is a security risk: see https://mathiasbynens.github.io/rel-noopener'); } } diff --git a/tests/lib/rules/jsx-no-target-blank.js b/tests/lib/rules/jsx-no-target-blank.js index a0c756cbcc..5cf45933dc 100644 --- a/tests/lib/rules/jsx-no-target-blank.js +++ b/tests/lib/rules/jsx-no-target-blank.js @@ -31,6 +31,8 @@ ruleTester.run('jsx-no-target-blank', rule, { {code: ''}, {code: ''}, {code: ''}, + {code: 's'}, + {code: 's'}, {code: 's'}, {code: ''}, {code: '

'}, @@ -43,55 +45,55 @@ ruleTester.run('jsx-no-target-blank', rule, { invalid: [{ code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }, { code: '', errors: [{ - message: 'Using target="_blank" without rel="noopener noreferrer" is a security risk:' + + message: 'Using target="_blank" without rel="noopener" or rel="noreferrer" is a security risk:' + ' see https://mathiasbynens.github.io/rel-noopener' }] }]