Security Unicode输入危险

Security Unicode输入危险,security,gwt,unicode,input,Security,Gwt,Unicode,Input,用户输入unicode是否存在任何真正的危险,而这些危险不是由用户代理/浏览器等处理的 显然,从服务器到客户端,都存在欺骗的真正威胁,但我正试图找出在处理unicode输入时应该注意的具体“攻击”或不满 这个问题与语言无关,但我提出这个问题时考虑到了GWT应用程序的安全影响。我可以想到用户控制的unicode字符串的几个问题: 有多种方法可以用unicode表示等效字符串。例如,ä可以表示为单个代码点,或者表示为a后跟组合字符。Unicode规范化有助于解决大多数这些问题。 有些字符允许奇怪的插

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

显然,从服务器到客户端,都存在欺骗的真正威胁,但我正试图找出在处理unicode输入时应该注意的具体“攻击”或不满


这个问题与语言无关,但我提出这个问题时考虑到了GWT应用程序的安全影响。

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

有多种方法可以用unicode表示等效字符串。例如,ä可以表示为单个代码点,或者表示为a后跟组合字符。Unicode规范化有助于解决大多数这些问题。 有些字符允许奇怪的插入符号移动。我听说过一次聊天,你可以把你的信息放在别人的信息上。这使得他们因为说了不恰当的话而被禁止,因为管理员们不知道是谁发了这条信息。 有很多相似的角色。例如,有些俄语或希腊语字符在光学上与ASCII等效字符无法区分。这是一个非常有问题的字符串,它应该唯一地标识某些东西。例如用户名或域。与经典的l vs I问题相似,只是更糟。 使用UTF-8和UTF-16,在一个代码点中间分割一个字符串可能会引起一些问题。 对字符串的某些操作可能会意外更改其长度。例如,使用大写字母可能会使字符串变长。
可能还有更多的问题,我当然不是unicode方面的专家,我能想到用户控制的unicode字符串的几个问题:

有多种方法可以用unicode表示等效字符串。例如,ä可以表示为单个代码点,或者表示为a后跟组合字符。Unicode规范化有助于解决大多数这些问题。 有些字符允许奇怪的插入符号移动。我听说过一次聊天,你可以把你的信息放在别人的信息上。这使得他们因为说了不恰当的话而被禁止,因为管理员们不知道是谁发了这条信息。 有很多相似的角色。例如,有些俄语或希腊语字符在光学上与ASCII等效字符无法区分。这是一个非常有问题的字符串,它应该唯一地标识某些东西。例如用户名或域。与经典的l vs I问题相似,只是更糟。 使用UTF-8和UTF-16,在一个代码点中间分割一个字符串可能会引起一些问题。 对字符串的某些操作可能会意外更改其长度。例如,使用大写字母可能会使字符串变长。
可能还有更多的问题,我当然不是unicode方面的专家。任何用户输入的最大危险是在具有特殊字符的上下文中使用该输入。也就是说,天真地将其连接到SQL查询中,或者将其输出到HTML中。如果应用程序的部分行为由SQL查询或HTML页面等字符串控制,并且用户可以控制这些字符串并可以插入自己的命令,那么这是一种危险

在这方面,Unicode与其他编码相比没有什么特别之处。环境中的特殊字符定义得很好,您所需要做的就是转义、过滤或清理任何用户输入,从而使这些特殊字符变为非特殊字符。对于任何其他编码,您也需要这样做。您需要注意转义/过滤/清理功能知道正确的编码,以便它们能够正确地完成工作


除此之外,Unicode编码的文本就是文本。当您对它包含的任何特殊字符进行中性化并正确处理编码时,仅在文本中没有危险。除了你的用户之外,为了某些特定的目的使用相似的字符,但这不再是一般性的危险。

任何用户输入的最大危险是在具有特殊字符的上下文中使用该输入。也就是说,天真地将其连接到SQL查询中,或者将其输出到HTML中。如果应用程序的部分行为由SQL查询或HTML页面等字符串控制,并且用户可以控制这些字符串并可以插入自己的命令,那么这是一种危险

在这方面,Unicode与其他编码相比没有什么特别之处。环境中的特殊字符定义得很好,您所需要做的就是转义、过滤或清理任何用户输入,从而使这些特殊字符变为非特殊字符。对于任何其他编码,您也需要这样做。您需要注意转义/过滤/清理功能知道正确的编码,以便它们能够正确地完成工作

除此之外,Unicode编码的文本就是文本。当你删除它包含的任何特殊字符并正确处理编码时,就没有危险了
r仅在文本中。除了您的用户之外,您还可以使用sbuıɥpɹpɹpťbu௱uɹcɹ或为某些特定目的利用相似字符,但这不再是一般性的危险。

输出用户控制的unicode字符串可能会有很大的问题。但是我看不出输入有很多问题。输出用户控制的unicode会有什么问题?输出用户控制的unicode字符串可能会有很多问题。但是我看不出输入有什么问题。输出用户控制的unicode会有什么问题?1。这并不是真正的危险,只是一些值得考虑的问题。如果4。是一个问题,您只是没有正确处理字符串/编码。5.这是一个值得考虑的问题,这是否是一个危险很大程度上取决于你的语言是多么低级。我同意。三,。这就引出了一个后续问题,其中有多少问题已经由GWT这样的语言/框架在内部解决了?我正在考虑实例的unicode规范化这里可能有帮助函数,但您仍然需要注意这些问题的大部分。它们无法自动解决。我要强调的是,8位字节或16位单词的数量≠ 代码点的数量,代码点的数量≠ 字形/字符/等的数量。错误计算和混淆这些内容可能导致缓冲区溢出和各种令人讨厌的事情,并导致数据泄露,例如,用户输入可能无法完全覆盖陈旧的缓冲区数据。此外,输入的格式可能不正确,即包含无效的代码点,或者仅在UTF8/16编码方面无效。代码必须能够处理此问题。1。这并不是真正的危险,只是一些值得考虑的问题。如果4。是一个问题,您只是没有正确处理字符串/编码。5.这是一个值得考虑的问题,这是否是一个危险很大程度上取决于你的语言是多么低级。我同意。三,。这就引出了一个后续问题,其中有多少问题已经由GWT这样的语言/框架在内部解决了?我正在考虑实例的unicode规范化这里可能有帮助函数,但您仍然需要注意这些问题的大部分。它们无法自动解决。我要强调的是,8位字节或16位单词的数量≠ 代码点的数量,代码点的数量≠ 字形/字符/等的数量。错误计算和混淆这些内容可能导致缓冲区溢出和各种令人讨厌的事情,并导致数据泄露,例如,用户输入可能无法完全覆盖陈旧的缓冲区数据。此外,输入的格式可能不正确,即包含无效的代码点,或者仅在UTF8/16编码方面无效。代码必须能够处理这个问题。