假设我有一个表单元素,应该允许任何合理的字符串命名(IE就像这个问题的标题)。
如何验证字符串是否合理,而不是奇怪或不安全? (假设这里有类似Unicode表情符号的东西是合理的)
检查所有转义字符,如换行符,换页符等,当然是给定的。像长度这样的东西更难,因为一个英文描述性的名字很难用只有1个字符,但是中文很简单。
有大约31个Unicode类,哪些是安全的?
在Javascript或C#中,完整的正则表达式或类似检查会是什么样的?
答案 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。