정말 좋고 나쁜 UTF-8 예제 테스트 데이터 [닫힌]
그래서 우리는 XSS 필터링을 테스트하기 위한 XSS 치트 시트 를 가지고 있습니다. 그러나 무해한 예제 페이지 외에는 내 UTF-8 코드가 잘못 작동하는 데이터를 처리 할 수 있는지 확인하기 위해 악의적이거나 잘못된 테스트 데이터를 찾을 수 없습니다.
테스트 할 좋은 음 .. 나쁜 데이터를 어디에서 찾을 수 있습니까? 또는 까다로운 문자 시퀀스는 무엇입니까?
참조 : 중국 문자의 파일이 문자 당 사용하는 방법 바이트 알고 있나요 어떻게? — 의심 할 여지없이 도움이 될 다른 SO 질문이 있습니다.
UTF-8에서는 다음 유형의 바이트를 얻습니다.
Binary Hex Comments
0xxxxxxx 0x00..0x7F Only byte of a 1-byte character encoding
10xxxxxx 0x80..0xBF Continuation bytes (1-3 continuation bytes)
110xxxxx 0xC0..0xDF First byte of a 2-byte character encoding
1110xxxx 0xE0..0xEF First byte of a 3-byte character encoding
11110xxx 0xF0..0xF4 First byte of a 4-byte character encoding
(마지막 줄은 0xF0..0xF7을 읽어야하는 것처럼 보이지만 유니 코드의 21 비트 범위 (U + 0000-U + 10FFFF)는 최대 유효 값이 0xF4임을 의미합니다. 값 0xF5..0xF7은 유효한 UTF-8.)
특정 바이트 시퀀스가 유효한 UTF-8인지 여부를 살펴보면 다음을 고려해야합니다.
- 예상하지 않은 곳에 연속 바이트가 나타남
- 연속 바이트가 예상되는 곳에 나타나는 비 연속 바이트
- 문자열 끝의 불완전한 문자 ( '예상되는 연속 바이트'의 변형)
- 최소가 아닌 시퀀스
- UTF-16 서로 게이트
유효한 UTF-8에서는 0xF5..0xFF 바이트가 발생할 수 없습니다.
최소가 아닌 시퀀스
일부 문자에 대해 여러 가지 가능한 표현이 있습니다. 예를 들어 유니 코드 문자 U + 0000 (ASCII NUL)은 다음과 같이 나타낼 수 있습니다.
0x00
0xC0 0x80
0xE0 0x80 0x80
0xF0 0x80 0x80 0x80
그러나 유니 코드 표준은 마지막 세 가지 대안이 최소한이 아니기 때문에 허용되지 않는다고 명시하고 있습니다. 따라서 0xC0 및 0xC1 바이트는 유효한 UTF-8로 표시 될 수 없습니다. 이들로 인코딩 할 수있는 유일한 문자는 0x00..0x7F 범위의 단일 바이트 문자로 최소한으로 인코딩되기 때문입니다.
UTF-16 대리
BMP (Basic Multi-lingual Plane) 내에서 유니 코드 값 U + D800-U + DFFF는 UTF-16 서로 게이트 용으로 예약되어 있으며 유효한 UTF-8로 인코딩 된 것으로 나타날 수 없습니다. UTF-8에서 유효하다면 (내가 강조하지만 그렇지 않다는 점을 강조합니다) 서로 게이트가 인코딩됩니다.
- U + D800 — 0xED 0xA0 0x80 (가장 작은 상위 대리)
- U + DBFF — 0xED 0xAF 0xBF (최대 상위 대리)
- U + DC00 — 0xED 0xB0 0x80 (가장 작은 하위 대리)
- U + DFFF — 0xED 0xBF 0xBF (가장 큰 하위 대리)
잘못된 데이터
따라서 BAD 데이터에는 이러한 다양한 처방을 위반하는 샘플이 포함되어야합니다.
- 초기 바이트 값 중 하나가 앞에없는 연속 바이트
- 다중 문자 초기 바이트 뒤에 충분한 연속 바이트가 없습니다.
- 최소가 아닌 멀티 바이트 문자
- UTF-16 서로 게이트
- 잘못된 바이트 (0xC0, 0xC1, 0xF5..0xFF)
바이트 순서 표시 (BOM) U + FEFF (ZWNBSP (zero-width no-break space)라고도 함)는 UTF-8로 인코딩되지 않은 상태로 나타날 수 없습니다. 0xFF 및 0xFE 바이트는 유효한 UTF-8에서 허용되지 않습니다. 인코딩 된 ZWNBSP는 UTF-8 파일에 0xEF 0xBB 0xBF로 나타날 수 있지만 BOM은 UTF-8에서 완전히 불필요합니다.
There are also some noncharacters in Unicode. U+FFFE and U+FFFF are two such noncharacters (and the last two code points in each plane, U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF, ... U+10FFFE, U+10FFFF are others). These should not normally appear in Unicode data for data exchange, but can appear in private use. See the Unicode FAQ link for lots of sordid details, including the rather complex history of noncharacters in Unicode. (Corrigendum #9: Clarification About Noncharacters, which was released in January 2013, does what its title suggests — clarifies the meaning of non-characters.)
You can use this handy online tool from Jeffrey Bergamini to convert any text into a really weird UTF8 string of Homoglyphs.
A typical
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
become like this:
Ḽơᶉëᶆ ȋṕšᶙṁ ḍỡḽǭᵳ ʂǐť ӓṁệẗ, ĉṓɲṩḙċťᶒțûɾ ấɖḯƥĭṩčįɳġ ḝłįʈ, șếᶑ ᶁⱺ ẽḭŭŝḿꝋď ṫĕᶆᶈṓɍ ỉñḉīḑȋᵭṵńť ṷŧ ḹẩḇőꝛế éȶ đꝍꞎôꝛȇ ᵯáꞡᶇā ąⱡîɋṹẵ.
Wikipedia’s UTF-8 article has a good summary of what byte sequences are valid/invalid. Another article that’s worth reading is W3C I18N FAQ: Multilingual Forms.
Off the top of my head:
0xff and 0xfe
Single high-bit bytes
Multi-byte representation of low-byte characters - A good way of smuggling nulls past early checks
Byte-order marks - Are you going to ignore them?
참고URL : https://stackoverflow.com/questions/1319022/really-good-bad-utf-8-example-test-data
'programing tip' 카테고리의 다른 글
브라우저가 캐시 된 CSS / JS 파일을 다시로드하도록 강제하는 방법은 무엇입니까? (0) | 2020.09.28 |
---|---|
tinyhippos 주입 스크립트의 목적은 무엇입니까? (0) | 2020.09.25 |
Django 프로젝트에 템플릿을 넣을 가장 좋은 위치는 어디입니까? (0) | 2020.09.25 |
Python : 생성기 표현식 대 수율 (0) | 2020.09.25 |
C # 스레드 종료 및 Thread.Abort () (0) | 2020.09.25 |