今天在写测分的过程中,写到了非法字符这个词,我突然问自己,什么是非法字符??联想到之前的一个SIT的BUG,是由于我们在取MAC的时候,MAC被篡改了,我们得到的是非法字符,从而导致我们分发事件失败,从而导致线上大量报错,因此我们需要对“非法字符”有一个清醒的认识了。
什么是字符编码?
字符编码(Character encoding)是指将某一字符序列对应到一指定集合中某一东西,再将其对应到另一个给定的集合中的其它东西,如一个自然数序列、8位字节或者电脉冲,以便于文本在计算机中存储和通过通信网络的发送。
什么是字符集?
字符集(Character Set)是一个系统支持的所有抽象字符的集合。
关于字符编码与字符集,我们通常认为是等同的,使用相同字符编码方式进行编码的所有抽象字符就是一个字符集。
常用的字符编码分类:
ASCII(AmericanStandardCode forInformationInterchange,美国信息交换标准代码)
Unicode(统一码、万国码、单一码、标准万国码)
GB 2312或GB 2312-80是中国国家标准简体中文字符集
GB 18030,最新版本为GB 18030-2005,其全称为中华人民共和国国家标准GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集,是GB
18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》的修订版。
上述资料来源于维基百科,详细内容请参考下面URL地址:http://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81
那么到底什么是“非法字符”呢?
没有字符是非法的,所谓的非法字符只是这些字符不在我们的字符集里面。从而导致我们在处理的时候不能识别,就认为他们是非法的了。换一种说法是我们认识你你就是合法的,我们不认识你你就是非法的。
非法字符出错的原因:
以两种编码方式为例,ASCII码与GBK码,我们在程序中约定了所有的符号都用ASCII方式进行编码,但你给我传了一个以GBK编码方式编码的字符,但是我仍旧用ASCII方式进行解码,此时我解出来的就肯定是错的,这样解码过程就出错了,就会抛出异常或者直接出错。
OK,那么对于测试及开发同学,我们应该关注什么呢?
1. 关注代码限制的特殊字符。
比如,如果我们的系统中涉及到XML,而XML指定的是UTF-8的编码方式,此时如果传入的XML中节点内容为ǜòēì的GBK编码格式,那么解析的过程就会出错,会抛异常出来。
2. 关注DB中的特殊字符。
比如,DB中的编码格式只支持ASCII,那么当存入汉字类型时就会失败。
3. 业务需求确定的特殊字符。
比如,对于注册账户之类,只允许英文字母+数字+@._这三个标点符号,其它的字符对我们而言都属于非法字符。
BUG分享
相关背景:C系统接收到外围系统发送的事件,使用xfire协议传送给S系统。Xfire协议使用了XML的数据传输格式,支持的编码类型为utf-8.
BUG描述:业务系统会拿到机器的MAC地址(MAC被篡改,包含ǜòēì等GBK字符),作为事件信息中的环境变量传给C系统,C系统收到事件信息后会通过xfire协议转给S系统, 此时xfire协议中的xml解析出错,从而大量抛出异常,导致事件信息转发给S系统出错。
经验及教训:
1.虽然是测试,但是也要对我们的框架熟悉,至少原理要懂,了解在哪些点需要关注字符编码格式。
2.明确哪些情况下需要模拟特殊数据,模拟哪些特殊数据,特殊数据可能会导致我们的系统处理出错。
分享到:
相关推荐
非法字符库、限制。非法字符是对网站或应用程序中非法输入的限制字符库
使用java解决 java: 非法字符: '\ufeff“ 问题
检测数据表字段非法字符:官方正版工具,请放心使用啊
易语言非法字符检测源码,非法字符检测
一个php过滤非法字符类,参数检查并写日志,提交的参数非法,系统会记录您的本次操作,SQL注入日志
禁止输入非法字符例如禁止“*/-+”等字符串。
用监听器实现在线人数统计,过滤器实现页面自动编码 非法字符过滤
java非法字符过滤器,对非法字符进行过滤
可以操作创建非法字符文件夹,包括里面的文件
易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码...
VB 自动删除文本中的非法字符 VB 自动删除文本中的非法字符
asp.net用于验证用户注册登录时非法字符的输入。简单易学。
导网表非法字符转化器.转换ORCAD非法字符专用软件
介绍一个php过滤非法字符类,参数检查并写日志,提交的参数非法,系统会记录您的本次操作,SQL注入日志 ,需要的朋友可以下载学习参考,希望对朋友们有所帮助。
php判断非法字符函数 php常用函数
自动删除非法字符.rar自动删除非法字符.rar自动删除非法字符.rar
过滤器过滤用户输入的非法字符,如“” “%” “+”等需要的两个类XssFilter.java和XssHttpServletRequestWrapper.java
文本框非法字符的验证(文本框验证都要加这个更准确)
自己写的用python过滤文件中的非法字符的小程序。
一个函数。做asp表单时,用来判断验证用户名是否包含有非法字符。将文件扩展名.txt删除即可。