- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 480字
- 2020-10-30 17:56:37
2.1.2 UTF-8
UTF-8是一個多字節(jié)字符集,它可以表示在Unicode字符集中的每個字符,而且與美國7位ASCII字符集向后兼容。每個UTF-8字符由1~4個字節(jié)(請參閱表2.1)表示。如果某個字符僅由1個字節(jié)編碼,那么此字節(jié)最高位是0且其他位包含碼值(取值范圍為0~127)。如果某個字符由多個字節(jié)的序列編碼,那么首字節(jié)中前導(dǎo)1的位數(shù)與序列的總字節(jié)數(shù)相同,然后緊跟著一個0位,且后面的字節(jié)都被標記為一個前導(dǎo)“10”位模式。在字節(jié)序列中的其余位拼接成Unicode的碼點值(取值范圍為0x80~0x10FFFF)。因此,一個具有前導(dǎo)0位的字節(jié)是一個單字節(jié)碼,一個具有多個前導(dǎo)1位的字節(jié)是一個多字節(jié)序列的首字節(jié),而一個具有前導(dǎo)“10”位模式的字節(jié)是一個多字節(jié)序列的延續(xù)字節(jié)。這種字節(jié)格式允許檢測每個序列的開始,而無須從字符串的開頭解碼。
表2.1 形式合法的UTF-8字節(jié)序列
資料來源:[Unicode 2012]
前128個字符構(gòu)成基本執(zhí)行字符集,其中每個字符都是單字節(jié)。
UTF-8的解碼器有時會成為一個安全漏洞。在某些情況下,攻擊者可以通過向它發(fā)送UTF-8語法不允許的一個八位字節(jié)序列,來利用一個不謹慎的UTF-8解碼器。《C安全編碼標準》[Seacord 2008]包括“MSC10-C.字符編碼方式UTF-8相關(guān)的問題”,它描述這個問題以及其他與UTF-8相關(guān)的問題。
推薦閱讀
- JavaScript全程指南
- Mastering RabbitMQ
- Microsoft Application Virtualization Cookbook
- Rake Task Management Essentials
- 微服務(wù)設(shè)計原理與架構(gòu)
- Instant 960 Grid System
- SQL Server 2016數(shù)據(jù)庫應(yīng)用與開發(fā)習(xí)題解答與上機指導(dǎo)
- Python算法從菜鳥到達人
- 基于Struts、Hibernate、Spring架構(gòu)的Web應(yīng)用開發(fā)
- Linux Shell核心編程指南
- Windows Embedded CE 6.0程序設(shè)計實戰(zhàn)
- Illustrator CC平面設(shè)計實戰(zhàn)從入門到精通(視頻自學(xué)全彩版)
- MINECRAFT編程:使用Python語言玩轉(zhuǎn)我的世界
- C++程序設(shè)計教程
- 高性能PHP 7