Skip to content

Commit 1e5671d

Browse files
committed
Fix XSS vulnerabilities in link sanitizer
1 parent edd348d commit 1e5671d

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

lib/utils/sanitization-utils.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { includes } from './array-utils';
22

3-
const PROTOCOL_REGEXP = /^([a-z0-9.+-]+:)/i;
3+
const PROTOCOL_REGEXP = /.+:/i;
44

55
const badProtocols = [
6-
'javascript:', // jshint ignore:line
7-
'vbscript:' // jshint ignore:line
6+
'javascript', // jshint ignore:line
7+
'vbscript' // jshint ignore:line
88
];
99

1010
function getProtocol(url) {
1111
let matches = url && url.match(PROTOCOL_REGEXP);
12-
let protocol = (matches && matches[0]) || ':';
12+
let protocol = matches && matches[0] && matches[0].split(':')[0] || '';
1313
return protocol;
1414
}
1515

1616
export function sanitizeHref(url) {
17-
let protocol = getProtocol(url).toLowerCase();
17+
let protocol = getProtocol(url).toLowerCase().replace(/ /g, '');
1818
if (includes(badProtocols, protocol)) {
1919
return `unsafe:${url}`;
2020
}

tests/unit/utils/sanitization-utils-test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ test('#sanitizeHref', (assert) => {
1212
let unsafe = [
1313
'javascript:alert("XSS")', // jshint ignore: line
1414
'jaVasCript:alert("XSS")', // jshint ignore: line
15+
'javascript:javascript:alert("XSS")', // jshint ignore: line
16+
'java script:alert("XSS")', // jshint ignore: line
17+
'ja vas cri pt::alert("XSS")', // jshint ignore: line
1518
'vbscript:alert("XSS")' // jshint ignore: line
1619
];
1720

0 commit comments

Comments
 (0)