0. URL编码
URL编码用在浏览器地址栏,以百分号开始,没有结束符。比如空格的URL编码为:%20。
1. HTML编码
HTML编码的内容只能在HTML标签的属性值中,支持十进制和十六进制。以&#开头,分号结尾。
比如字母a的十进制编码为a,十六进制编码为:a。
2. JS编码
JS代码支持八进制,十六进制,以及unicode编码。八进制及十六进制编码,以\开头,没有结束符。
比如alert的八进制编码为:\141\154\145\162\164,十六进制编码为:\x61\x6c\x65\x72\x74,unicode编码为:\u0061\u006c\u0065\u0072\u0074。
3. HTML及JS编码的示例代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>编码测试</title>
</head>
<body>
<img src="http://www.jason-w.cn/wp-content/uploads/2020/12/avatar.jpg" alt="HTML十进制">
<img src="http://www.jason-w.cn/wp-content/uploads/2020/12/avatar.jpg" alt="HTML十六进制">
<div id="display"></div>
<button onclick="noEncode();">无编码单击弹窗</button>
<button onclick="octEncode();">八进制单击弹窗</button>
<button onclick="hexEncode();">十六进制单击弹窗</button>
<button onclick="unicodeEncode();">unicode单击弹窗</button>
</body>
<script>
var display = document.getElementById("display");
var noEncode = function(){
display.innerHTML = "<img src=# onerror=alert('xss')>";
}
var octEncode = function(){
display.innerHTML = "\74img src=# onerror=\141\154\145\162\164('xss')\76";
}
var hexEncode = function(){
display.innerHTML = "\x3cimg src=# onerror=\x61\x6c\x65\x72\x74('xss')\x3e";
}
var unicodeEncode = function(){
display.innerHTML = "<img src=# onerror=\u0061\u006c\u0065\u0072\u0074('xss')>";
}
</script>
</html>
4. Hex编码
Hex编码是十六进制编码,以0x开头,没有结束符。可以在SQL中使用,比如:
select 0x61;
结果将会输出a。
5. utf7编码
utf7编码通常用于电子邮件传输。