Unicode输入危险

时间:2012-04-26 11:02:17

标签: security gwt unicode input

用户输入unicode是否存在任何真正的危险,用户代理/浏览器等无法处理?

显然,从服务器到客户端,存在欺骗的真正威胁,但我正在试图弄清楚在处理unicode输入时我应该注意哪些具体的“攻击”(如果有的话)或不满。

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

2 个答案:

答案 0 :(得分:5)

任何用户输入的最大危险是在具有“特殊字符”的上下文中使用该输入。即,将其简单地连接到SQL查询或将其输出到HTML中。如果应用程序的一部分行为是由字符串(如SQL查询或HTML页面)控制的,并且用户可以控制这些字符串并且可以注入自己的命令,则存在危险。

然而,在这方面,Unicode与其他编码没有什么特别之处。您环境中的特殊字符已明确定义,您只需要对任何用户输入进行转义,过滤或清理,以便将这些特殊字符呈现为非特殊字符。对于任何其他编码,您也需要这样做。您需要注意您的转义/过滤/清理功能是否知道正确的编码,以便他们能够正常工作。

除此之外,Unicode编码文本只是文本。当你中性包含任何特殊字符并正确处理编码时,只有文本没有危险。除了你的用户sbuıɥʇpɹıǝʍbuıʇıɹʍ或为某些特定目的利用相似的角色,但这不再是关于普遍的危险。

答案 1 :(得分:4)

我可以想到用户控制的unicode字符串存在的几个问题:

  1. 在unicode中有多种表达等效字符串的方法。例如,ä可以表示为单个代码点,也可以表示为a,后跟组合¨。 Unicode规范化有助于解决大多数这些问题。
  2. 有些角色允许奇怪的插入符号移动。我听说过一个聊天,你可以把你的信息放在别人的留言上。由于管理员没有意识到实际上是谁发送了这条消息,因此禁止他们说不合适的事情。
  3. 有相似的角色。例如,有一些俄语或希腊语字符与它们的ASCII等价物在光学上无法区分。字符串应该唯一地识别某些东西是非常有问题的。例如用户名或域。类似于经典的l vs I问题,除了更糟糕的情况。
  4. 使用UTF-8和UTF-16,在代码点中间拆分字符串可能会导致一些问题。
  5. 对字符串的某些操作可能会意外地改变其长度。例如,对字符串进行大写可能会使其更长。
  6. 可能还有更多问题,我当然不是unicode的专家