diff --git a/src/compiler/compile/nodes/Element.ts b/src/compiler/compile/nodes/Element.ts index 046d6252f3..a3e7cea192 100644 --- a/src/compiler/compile/nodes/Element.ts +++ b/src/compiler/compile/nodes/Element.ts @@ -399,7 +399,7 @@ export default class Element extends Node { if (target_attribute && target_attribute.get_static_value() === '_blank' && href_attribute) { const href_static_value = href_attribute.get_static_value() ? href_attribute.get_static_value().toLowerCase() : null; - if (href_static_value === null || href_static_value.startsWith('http') || href_static_value.startsWith('//')) { + if (href_static_value === null || href_static_value.match(/^(https?:)?\/\//i)) { const rel = attribute_map.get('rel'); const rel_values = rel ? rel.get_static_value().split(' ') : []; const expected_values = ['noopener', 'noreferrer']; diff --git a/test/validator/samples/security-anchor-rel-noopener/input.svelte b/test/validator/samples/security-anchor-rel-noopener/input.svelte index be146f6676..ec4aaaf7b3 100644 --- a/test/validator/samples/security-anchor-rel-noopener/input.svelte +++ b/test/validator/samples/security-anchor-rel-noopener/input.svelte @@ -19,6 +19,16 @@ svelte website (invalid) svelte website (invalid) +svelte website (invalid) +svelte website (invalid) + +svelte website (invalid) +svelte website (invalid) + +svelte website (invalid) + +svelte website (invalid) + Same host (valid) Same host (valid) @@ -30,5 +40,11 @@ svelte website (valid) svelte website (valid) +svelte website (valid) +svelte website (valid) + +svelte website (valid) +svelte website (valid) + svelte website (valid) svelte website (valid) \ No newline at end of file diff --git a/test/validator/samples/security-anchor-rel-noopener/warnings.json b/test/validator/samples/security-anchor-rel-noopener/warnings.json index 6d4c77e7d3..352efb9050 100644 --- a/test/validator/samples/security-anchor-rel-noopener/warnings.json +++ b/test/validator/samples/security-anchor-rel-noopener/warnings.json @@ -178,5 +178,95 @@ "column": 0, "line": 20 } - } + }, + { + "code": "security-anchor-rel-noopener", + "end": { + "character": 1534, + "column": 79, + "line": 22 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noopener\"", + "pos": 1455, + "start": { + "character": 1455, + "column": 0, + "line": 22 + } + }, + { + "code": "security-anchor-rel-noopener", + "end": { + "character": 1624, + "column": 89, + "line": 23 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noopener\"", + "pos": 1535, + "start": { + "character": 1535, + "column": 0, + "line": 23 + } + }, + { + "code": "security-anchor-rel-noopener", + "end": { + "character": 1759, + "column": 80, + "line": 25 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noopener\"", + "pos": 1679, + "start": { + "character": 1679, + "column": 0, + "line": 25 + } + }, + { + "code": "security-anchor-rel-noopener", + "end": { + "character": 1850, + "column": 90, + "line": 26 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noopener\"", + "pos": 1760, + "start": { + "character": 1760, + "column": 0, + "line": 26 + } + }, + { + "code": "security-anchor-rel-noopener", + "end": { + "character": 1977, + "column": 72, + "line": 28 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noopener\"", + "pos": 1905, + "start": { + "character": 1905, + "column": 0, + "line": 28 + } + }, + { + "code": "security-anchor-rel-noopener", + "end": { + "character": 2105, + "column": 73, + "line": 30 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noopener\"", + "pos": 2032, + "start": { + "character": 2032, + "column": 0, + "line": 30 + } + } ] \ No newline at end of file diff --git a/test/validator/samples/security-anchor-rel-noreferrer/input.svelte b/test/validator/samples/security-anchor-rel-noreferrer/input.svelte index 82248d28ef..62d62165fc 100644 --- a/test/validator/samples/security-anchor-rel-noreferrer/input.svelte +++ b/test/validator/samples/security-anchor-rel-noreferrer/input.svelte @@ -19,6 +19,16 @@ svelte website (invalid) svelte website (invalid) +svelte website (invalid) + +svelte website (invalid) +svelte website (invalid) + +svelte website (invalid) + +svelte website (invalid) +svelte website (invalid) + Same host (valid) Same host (valid) @@ -27,8 +37,14 @@ svelte website (valid) svelte website (valid) +svelte website (valid) +svelte website (valid) + svelte website (valid) svelte website (valid) +svelte website (valid) +svelte website (valid) + svelte website (valid) svelte website (valid) \ No newline at end of file diff --git a/test/validator/samples/security-anchor-rel-noreferrer/warnings.json b/test/validator/samples/security-anchor-rel-noreferrer/warnings.json index 5581b3e449..1608c87e5b 100644 --- a/test/validator/samples/security-anchor-rel-noreferrer/warnings.json +++ b/test/validator/samples/security-anchor-rel-noreferrer/warnings.json @@ -178,5 +178,95 @@ "column": 0, "line": 20 } - } + }, + { + "code": "security-anchor-rel-noreferrer", + "end": { + "character": 1501, + "column": 72, + "line": 22 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noreferrer\"", + "pos": 1429, + "start": { + "character": 1429, + "column": 0, + "line": 22 + } + }, + { + "code": "security-anchor-rel-noreferrer", + "end": { + "character": 1633, + "column": 79, + "line": 24 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noreferrer\"", + "pos": 1554, + "start": { + "character": 1554, + "column": 0, + "line": 24 + } + }, + { + "code": "security-anchor-rel-noreferrer", + "end": { + "character": 1721, + "column": 87, + "line": 25 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noreferrer\"", + "pos": 1634, + "start": { + "character": 1634, + "column": 0, + "line": 25 + } + }, + { + "code": "security-anchor-rel-noreferrer", + "end": { + "character": 1849, + "column": 75, + "line": 27 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noreferrer\"", + "pos": 1774, + "start": { + "character": 1774, + "column": 0, + "line": 27 + } + }, + { + "code": "security-anchor-rel-noreferrer", + "end": { + "character": 1984, + "column": 82, + "line": 29 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noreferrer\"", + "pos": 1902, + "start": { + "character": 1902, + "column": 0, + "line": 29 + } + }, + { + "code": "security-anchor-rel-noreferrer", + "end": { + "character": 2075, + "column": 90, + "line": 30 + }, + "message": "Security: Anchor with \"target=_blank\" should have rel attribute containing the value \"noreferrer\"", + "pos": 1985, + "start": { + "character": 1985, + "column": 0, + "line": 30 + } + } ] \ No newline at end of file