Skip to content

Commit 6caf2bf

Browse files
authored
Merge pull request #3620 from RedisInsight/fe/bugfix/RI-5936
#RI-5936 - update sanitizer
2 parents 75d3782 + ba772f6 commit 6caf2bf

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

redisinsight/ui/src/utils/formatters/markdown/remarkSanitize.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { visit } from 'unist-util-visit'
22

3+
const permittedAttibutes = [
4+
'dangerouslySetInnerHTML'
5+
]
6+
37
const dangerousAttributes = [
48
'onabort', 'onafterprint', 'onanimationend', 'onanimationiteration', 'onanimationstart',
59
'onbeforeprint', 'onbeforeunload', 'onblur', 'oncancel', 'oncanplay', 'oncanplaythrough',
@@ -17,10 +21,27 @@ const dangerousAttributes = [
1721
'background', 'poster', 'cite', 'data', 'ping', 'xlink:href', 'style', 'srcdoc', 'sandbox'
1822
].join('|')
1923

24+
// Define an array of potentially dangerous tags
25+
const dangerousTags = ['script', 'iframe', 'object', 'embed', 'link', 'style', 'meta']
26+
2027
export const remarkSanitize = (): (tree: Node) => void => (tree: any) => {
2128
visit(tree, 'html', (node) => {
22-
const dangerousAttrRegex = new RegExp(`\\s*(${dangerousAttributes})="[^"]*"`, 'gi')
29+
const inputTag = node.value.toLowerCase()
30+
31+
// remove dangerous tags
32+
if (dangerousTags.some((tag) => inputTag.startsWith(`<${tag}`))) {
33+
node.value = ''
34+
return
35+
}
36+
37+
// remove permitted attributes
38+
if (permittedAttibutes.some((attr) => node.value.includes(`${attr}=`))) {
39+
node.value = ''
40+
return
41+
}
2342

43+
// sanitize dangerous attributes
44+
const dangerousAttrRegex = new RegExp(`\\s*(${dangerousAttributes})="[^"]*"`, 'gi')
2445
if (node.value.match(dangerousAttrRegex)) {
2546
node.value = node.value.replace(dangerousAttrRegex, (match: string) => {
2647
const attr = match.toLowerCase().trim()

redisinsight/ui/src/utils/tests/formatters/markdown/remarkSanitize.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const testCases = [
1010
{ input: '<img onload="alert(1)">', output: '<img>' },
1111
{ input: '<img src="javascript:alert(1)">', output: '<img>' },
1212
{ input: '<img src="img.png">', output: '<img src="img.png">' },
13+
{ input: '<div dangerouslySetInnerHTML={{"__html": "<img src=x onerror=alert(\'this.still.works\')>"}} />', output: '' },
14+
{ input: '<script>', output: '' },
1315
]
1416

1517
describe('remarkSanitize', () => {

0 commit comments

Comments
 (0)