2012-04-26 79 views
1

用户输入的unicode是否存在真正的危险,这不是由用户代理/浏览器等处理的?Unicode输入危险

很明显,从服务器到客户端,有一个真正的欺骗威胁,但我试图找出具体的'攻击'(如果有的话)或对待unicode输入时应该注意的不满。

问题是语言不可知的,但我提出这个问题时要考虑GWT应用程序的安全含义。

+2

*输出*用户控制的unicode字符串可能非常成问题。但是我没有看到很多输入问题。 – CodesInChaos 2012-04-26 11:04:45

+2

输出用户控制的unicode会遇到什么样的问题? – 2012-04-26 11:09:34

回答

4

我能想到的几个问题与用户控制的unicode字符串:

  1. 有多种方式来表达的Unicode字符串等同。例如,ä可以表示为单个码点,或者可以表示为a,然后是组合¨。 Unicode规范化有助于抵御大部分这些问题。
  2. 有允许奇怪的脱口处动作的字符。我听说过一个聊天室,你可以将你的信息放在别人的信息上。由于管理员没有意识到谁实际发送了所述消息,所以他们被禁止说不适当的事情。
  3. 有看起来相似的字符。例如,有一些俄语或希腊字符在光学上与它们的ASCII等价物无法区分。这是字符串应该唯一标识的问题。例如用户名或域名。类似于传统的lI的问题,除了差很多。
  4. 使用UTF-8和UTF-16,在代码点中间拆分字符串可能会导致一些问题。
  5. 字符串的某些操作可能会意外更改其长度。例如,大写一个字符串可能会使其更长。

可能有更多的问题,我肯定对Unicode的

+1

1.这不是一个真正的“危险”,只是需要考虑的事情。如果4.是一个问题,你只是没有正确处理字符串/编码。 5.这是需要考虑的事情,这是否“危险”取决于您的语言水平如何。我同意2和3是可能导致用户问题的点。 – deceze 2012-04-26 11:30:55

+1

这给我带来了一个后续问题,这些问题中有多少已经被像GWT这样的语言/框架内部处理过了? (例如,我正在考虑unicode标准化) – 2012-04-26 11:38:10

+1

可能有帮助函数,但您仍需要了解大多数这些问题。它们不能自动解决。 – CodesInChaos 2012-04-26 11:44:19

5

与任何用户输入的最大危险是使用在具有“特殊字符”一背景下,输入没有专家。即,将它简单地连接成SQL查询或将其输出到HTML中。如果应用程序行为的一部分受字符串(如SQL查询或HTML页面)控制,并且用户可以控制这些字符串并可以注入自己的命令,那就很危险。

虽然在这方面没有什么特别的关于Unicode的其他编码。您的环境中的特殊字符已定义良好,您只需对所有用户输入进行转义,过滤或清理,以便将这些特殊字符呈现为非特殊字符。这与您需要为其他编码所做的一样。您需要注意您的转义/过滤/清理功能知道正确的编码,以便他们可以正确地完成他们的工作。

除此之外,Unicode编码的文本就是文本。当你中性化任何特殊字符并且正确处理编码时,在文本中没有危险。除了你的用户sbuıɥʇpɹıǝʍbuıʇıɹʍ或利用类似人物的特定用途,但这不是广义的危险了。