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