html中不允许使用尖括号,因为会被误认为标签,但是实际生活中我们是有使用尖括号的需求的,所以我们用一种编码的方式来代替具体的符号。
即 &#加上ascii码加上分号;
如a --> a
html可以识别这种编码,但是js没有办法识别。故实际在注入的时候,我们可能需要使用svg标签来执行,就像这样
<svg><script>alert(1)</script></svg> ## 这里(和)分别是左右括号。
至于为什么可以用svg标签,之前没有接触过,粗略查了一下,这个好像是一个画图库里的使用工具,所以我猜测可能是因为需要用函数对标签里的东西进行绘画啥的。
顺手写了个小脚本,用于转换字符串为html实体编码。
s = input("Input str : ") target = '' for i in s: tmp = "&#" + str(ord(i)) + ";" target += tmp print("HTML encode is: \n%s" % target) # 运行效果 # D:\vscode\Web_Security>python3 html_encode.py # Input str:alert(1) # Result is # alert(1)