48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
|
import * as t from '@angular/core/testing/testing_internal';
|
||
|
import {sanitizeUrl} from '../../src/security/url_sanitizer';
|
||
|
|
||
|
export function main() {
|
||
|
t.describe('URL sanitizer', () => {
|
||
|
t.describe('valid URLs', () => {
|
||
|
const validUrls = [
|
||
|
'',
|
||
|
'http://abc',
|
||
|
'HTTP://abc',
|
||
|
'https://abc',
|
||
|
'HTTPS://abc',
|
||
|
'ftp://abc',
|
||
|
'FTP://abc',
|
||
|
'mailto:me@example.com',
|
||
|
'MAILTO:me@example.com',
|
||
|
'tel:123-123-1234',
|
||
|
'TEL:123-123-1234',
|
||
|
'#anchor',
|
||
|
'/page1.md',
|
||
|
'http://JavaScript/my.js'
|
||
|
];
|
||
|
for (let url of validUrls) {
|
||
|
t.it(`valid ${url}`, () => t.expect(sanitizeUrl(url)).toEqual(url));
|
||
|
}
|
||
|
});
|
||
|
|
||
|
t.describe('invalid URLs', () => {
|
||
|
const invalidUrls = [
|
||
|
'javascript:evil()',
|
||
|
'JavaScript:abc',
|
||
|
'evilNewProtocol:abc',
|
||
|
' \n Java\n Script:abc',
|
||
|
'javascript:',
|
||
|
'javascript:',
|
||
|
'j avascript:',
|
||
|
'javascript:',
|
||
|
'javascript:',
|
||
|
'jav	ascript:alert();',
|
||
|
'jav\u0000ascript:alert();',
|
||
|
];
|
||
|
for (let url of invalidUrls) {
|
||
|
t.it(`valid ${url}`, () => t.expect(sanitizeUrl(url)).toMatch(/^unsafe:/));
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|