Encoding and Filtering
URL編碼:https://perishablepress.com/stop-using-unsafe-characters-in-urls/
HTML編碼:需要知道如何編碼以及如何解碼
-
文件字元編碼:HTTP協議或指令
https://datatracker.ietf.org/doc/html/rfc2616 Content-Type:text/html; charset=utf-8
如果未定義則預設傳送:https://en.wikipedia.org/wiki/ISO/IEC_8859-1
使用HTTP協議定義字元編碼:
PHP:header('Content-type: text/html; charset=utf-8’);
asp.net:<%Response.charset="utf-8"%>
JSP:<%@ page contentType="text/html; charset=UTF-8" %>
HTML指令:<meta http-equiv="Content-Type" Content='text/html; charset=utf-8'>
或 HTML5<meta charset="utf-8"'>
-
Character References 字元引用
HTML的特殊字元多含義:比如 <,表示標籤和比較運算子符號
HTML4:https://www.w3.org/TR/1998/REC-html40-19980424/charset.html#h-5.3
HTML5:https://html.spec.whatwg.org/#character-references
< 的編碼
命名實體 <
十進位制 <
十進位制:<
十進位制:< 或 <
十六進位制 < 或 <
十六進位制:< 或 <
十六進位制:�x3c 或 �x3c
base 36進位制編碼(web應用在使用它:reddit或域名縮短服務等,https://www.reddit.com/ https://tinyurl.com/)
PHP:<?=base convert("OHPE",36,10);?>
http://www.php.net/manual/en/function.base-convert.php
JavaScript編碼:(1142690).toString(36)
或 1142690..toString(36)
JavaScript解碼:parselnt("ohpe",36)
base64進位制編碼
[0-9][a-zA-Z]再加上 + 和 /
共計64個字元來表示。
實現時:但是不同的實現對兩個相近的或填充的地方使用 = https://en.wikipedia.org/wiki/Base64#Implementations_and_history
如果總位元數不是6的倍數,則需要新增空位元,直到總數既是6的倍,結果長度也是4的倍數。如果最新的組是“空”(000000),編碼值是=,如果後面的“空組”是兩個,將被編碼為==。
PHP編解碼:<?=base64 encode('encode this string")?>
或 <?=base64 decode(ZW5jb2RllHRoaXMgc3RyaW5n')?>
JavaScript編解碼:window.btoa('encode this string');
或 window.atob('ZW5ib2RlHRoaXMgc3RyaW5n');
https://developer.mozilla.org/en-US/docs/Web/API/Window/btoa
字元超出範圍的異常(要處理Unicode字串,需要在使用 Base64 函式之前對Unicode字串進行編碼。):https://developer.mozilla.org/en-US/docs/Web/API/Window/btoa
Unicode編碼
因為你在某個輸入框使用了AES加解密,所以payload(惡意輸入123456)自帶繞waf,以上編碼的應用同理(說白了就是web應用或中介軟體本身存在解碼)
如果你很無聊的話,論文指導一切:http://www.joelonsoftware.com/articles/Unicode.htm
對映unicode的三個點:UTF-8,UTF-16,UTF-32,utf表示Unicode轉換格式,後面的數字表示表示程式碼點的位元數。