【发布时间】:2011-05-06 00:13:35
【问题描述】:
UTF-8 单字节字符完美映射到 Latin-1 (ISO 8859-1) 字符(字符代码 128 以下的字符);基本上是默认的 ASCII 字符。 如果我有一个 UTF-8 编码的字符串并将其传递给一个函数,该函数需要一个 Latin-1 字符串,Latin-1 函数是否有可能将 UTF-8 多字节字符的一部分误解为 ASCII 字符?
我想像这样的事情可能发生:
(imagniray) UTF-8 多字节字符:0xA330
(错误)被 Latin-1 解释为两个 Latin-1 字符:0xA30x30
第一个字符不在 ASCII 集中,但第二个是 0 字符的 ASCII 码。多字节 UTF-8 字符是否有可能产生一个看起来像上面示例中的单字节 UTF-8 / ASCII 字符的工件?
根据我对 UTF-8 的理解,只有单字节字符包含未设置最高有效位的任何字节,因此基本上多字节字符不会包含可能被 Latin-1 函数误解为有效 ASCII 字符的字节(因为所有这些字符的最高有效位都未设置)。但我想确保这是真的,我不会搞砸这一点,因为这在处理数据清理时可能会产生安全隐患——我显然目前正在这样做。
【问题讨论】:
-
你自己回答了这个问题,我认为你的推理是正确的,假设它是一个有效的 UTF8 字符串。显然,用户/黑客可能会在您的示例中输入无效字符串,例如 0xA330。
-
我当然知道这一点。我的问题更多是我必须使用一个需要 Latin-1 的函数,并且首先将我的 UTF-8 字符串转换为 Latin-1 表示,但是由于 UTF-8 如何将单个字符与多字节字符分开并且因为有效字符串的字符都位于 ASCII 页面内,实际上无需执行该转换步骤,而不必担心从无效的 UTF-8 字符串中出现“有效”伪影。
标签: utf-8 character-encoding sanitization