我应该将超长UTF-8字符串转换为最短的正常形式吗?

Gra*_*ean 9 security perl encoding utf-8

我刚刚修改了我的Encoding :: FixLatin Perl模块来处理超长的UTF-8字节序列并将它们转换为最短的正常形式.

我的问题很简单" 这是一个坏主意 "吗?

许多来源(包括此RFC)表明,任何超长的UTF-8都应被视为错误并被拒绝.他们警告不要"天真的实施",并让我觉得这些东西本质上是不安全的.

由于我的模块的整个目的是用混合编码清理凌乱的数据文件并将它们转换为漂亮干净的utf8,这似乎只是我可以清理的一件事,因此应用程序层不必处理它.我的代码并不关心结果字符可能具有的任何语义含义,它只是将它们转换为规范化形式.

我错过了什么.我没有考虑过隐藏的危险吗?

bob*_*nce 4

是的,这是一个坏主意。

\n\n

也许检查了这些杂乱数据文件之一中的某些数据,发现它不包含危险的 ASCII 字符序列。

\n\n

导致许多问题的典型示例:'\\xC0\\xBCscript>'. \xe2\x80\x98将\xe2\x80\x99 的过长序列修复为纯 ASCII <,并且您不小心创建了一个安全漏洞。

\n\n

没有任何工具会出于任何合法目的而产生过长。如果您尝试修复混合编码文件,则应该考虑将遇到的文件视为您猜错了编码。

\n