2
0
mirror of https://github.com/tenrok/vue-json-viewer.git synced 2026-06-08 17:22:32 +03:00

fix: xss bug

This commit is contained in:
陈峰
2019-08-31 17:32:20 +08:00
parent c0a26557e0
commit c4945eddba
7 changed files with 29 additions and 14 deletions
+9 -3
View File
@@ -66,8 +66,9 @@ export default {
} else if (typeof this.value === 'function') {
dataType = JsonFunction
}
const toggle = this.keyName && (this.value && (Array.isArray(this.value) || typeof this.value === 'object'))
if (this.keyName && (this.value && (Array.isArray(this.value) || typeof this.value === 'object'))) {
if (toggle) {
elements.push(h('span', {
class: {
'jv-toggle': true,
@@ -85,7 +86,7 @@ export default {
'jv-key': true
},
domProps: {
innerHTML: `${this.keyName}:`
innerText: `${this.keyName}:`
}
}))
}
@@ -110,7 +111,8 @@ export default {
return h('div', {
class: {
'jv-node': true
'jv-node': true,
'toggle': toggle
}
}, elements)
}
@@ -130,6 +132,10 @@ export default {
}
}
&.toggle {
margin-left: 13px !important;
}
& .jv-node {
margin-left: 25px;
}
+3 -3
View File
@@ -91,7 +91,7 @@ export default {
'jv-array': true,
},
domProps: {
innerHTML: '['
innerText: '['
}
}))
this.ordered.forEach((value, key) => {
@@ -124,7 +124,7 @@ export default {
title: `click to reveal ${this.value.length} hidden items`
},
domProps: {
innerHTML: '...'
innerText: '...'
}
}))
}
@@ -135,7 +135,7 @@ export default {
'jv-array': true,
},
domProps: {
innerHTML: ']'
innerText: ']'
}
}))
+1 -1
View File
@@ -12,7 +12,7 @@ export default {
'jv-boolean': true,
},
domProps: {
innerHTML: props.jsonValue.toString()
innerText: props.jsonValue.toString()
}
})
}
+1 -1
View File
@@ -15,7 +15,7 @@ export default {
'jv-number': true,
},
domProps: {
innerHTML: props.jsonValue.toString()
innerText: props.jsonValue.toString()
}
})
}
+3 -3
View File
@@ -87,7 +87,7 @@ export default {
'jv-object': true,
},
domProps: {
innerHTML: '{'
innerText: '{'
}
}))
@@ -125,7 +125,7 @@ export default {
title: `click to reveal object content (keys: ${Object.keys(this.ordered).join(', ')})`
},
domProps: {
innerHTML: '...'
innerText: '...'
}
}))
}
@@ -136,7 +136,7 @@ export default {
'jv-object': true,
},
domProps: {
innerHTML: '}'
innerText: '}'
}
}))
+11 -2
View File
@@ -12,9 +12,18 @@ export default {
},
render (h, { props }) {
let value = props.jsonValue;
const islink = REG_LINK.test(value)
let domProps
if (REG_LINK.test(value)) {
if (islink) {
value = `<a href="${value}" target="_blank" style="color: #0366d6;">${value}</a>`;
domProps = {
innerHTML: `"${value.toString()}"`
}
} else {
domProps = {
innerText: `"${value.toString()}"`
}
}
return h('span', {
@@ -23,7 +32,7 @@ export default {
'jv-string': true,
},
domProps: {
innerHTML: `"${value.toString()}"`
...domProps
}
})
}
+1 -1
View File
@@ -15,7 +15,7 @@ export default {
'jv-undefined': true,
},
domProps: {
innerHTML: props.jsonValue === null ? 'null' : 'undefined'
innerText: props.jsonValue === null ? 'null' : 'undefined'
}
})
}