安全的unicode字符串/名称

时间:2016-11-30 02:53:27

标签: javascript c# unicode

假设我有一个表单元素,应该允许任何合理的字符串命名(IE就像这个问题的标题)。

如何验证字符串是否合理,而不是奇怪或不安全? (假设这里有类似Unicode表情符号的东西是合理的)

检查所有转义字符,如换行符,换页符等,当然是给定的。像长度这样的东西更难,因为一个英文描述性的名字很难用只有1个字符,但是中文很简单。

有大约31个Unicode类,哪些是安全的?

在Javascript或C#中,完整的正则表达式或类似检查会是什么样的?

1 个答案:

答案 0 :(得分:0)

  

如何验证字符串是否合理,而不是奇怪或不安全?

目前尚不清楚“不安全”是什么意思。正如@gmiley所说,你不能通过过滤输入来防止像XSS这样的注入问题;这是一个输出转义问题。

至于“合理”,一个好的起点是:

  • 正如您所提到的,禁止控制字符:U + 0000-U + 001F和U + 007F-U + 009F,减去换行符,如果您想允许这些字符,可以选项卡。

  • 特别是对于Web应用程序,根据unicode-xml注释禁止“不适合用于标记”的字符。这可以防止像Right-to-Left-Override这样的布局技巧。

  • Unicode规范化(C#中的String.Normalize),例如,标准化用于组合重音的代码点的标准形式C,或者标准化形式KC,也可以平整像fullwidth文本这样的奇怪之处根据观众的不同,可能会也可能不想这样做。

  • 如果你不喜欢Zͪa̻͍lg̐ͦ͢oͬ̓ṯ̺ͮěͧ̚͞ẋ͕ṱ̢͖̩̮̆ͤ,你可能会考虑limiting consecutive combiners