`
he91_com
  • 浏览: 399395 次
文章分类
社区版块
存档分类
最新评论

你的字符非法了吗?

 
阅读更多

今天在写测分的过程中,写到了非法字符这个词,我突然问自己,什么是非法字符??联想到之前的一个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非法字符过滤器:深度解析与应用 在软件开发中,确保数据的完整性和安全性是至关重要的。尤其是在处理用户输入或外部数据源时,非法字符的过滤成为了必不可少的环节。本文将深入探讨一个Java非法字符过滤器...

    检测数据表字段非法字符

    非法字符通常是指那些不符合数据库系统规定或者可能导致解析错误的字符。本工具专注于检测数据表字段中可能存在的非法字符,确保数据结构的合规性。 一、非法字符的类型与影响 1. 特殊字符:例如 `(反引号)、;...

    禁止输入非法字符

    "禁止输入非法字符"这个话题直接关乎到数据的正确性、系统的稳定运行以及安全性。在编程和开发过程中,我们需要对用户输入进行严格的控制,防止他们输入可能导致程序错误、数据损坏或安全漏洞的特殊字符。 非法字符...

    易语言非法字符检测

    在易语言中,非法字符是指在编程过程中不被允许或者不符合语法规则的字符,这些字符可能会导致编译错误或者运行时问题。非法字符检测源码则是用于检查和识别这些非法字符的代码片段。 易语言非法字符检测通常涉及...

    一个php过滤非法字符类

    1. **非法字符检测**:类会定义一个非法字符集合,如SQL关键字、特殊符号等,然后通过对比用户提交的数据,找出并替换或移除这些字符。这样可以有效防止SQL注入,因为注入的SQL语句将无法包含执行恶意操作的关键字。...

    VB 自动删除文本中的非法字符

    通过掌握这些知识点,你就可以在VB中编写一个有效的函数,自动检测并删除文本中的非法字符,从而保证数据处理的正确性和一致性。在实际编程中,记得结合错误处理和异常处理机制,以应对可能出现的特殊情况。

    处理非法字符文件夹

    3. **第三方软件**:市场上有一些专门用于处理非法字符的工具,如Bulk Rename Utility(Windows)或NameChanger(macOS),它们提供了图形化的界面,让用户可以方便地查找和替换非法字符。 4. **安全模式**:如果...

    java: 非法字符

    使用java解决 java: 非法字符: '\ufeff“ 问题

    监听器访问计数过滤非法字符

    本文将详细讲解如何利用监听器进行访问计数以及通过过滤器来过滤非法字符,以确保系统的安全性和用户体验。 首先,我们来看监听器。在Java的Servlet规范中,监听器是一种特殊的Servlet组件,它能够监听特定的事件并...

    过滤器过滤用户输入的非法字符

    在网络安全领域,过滤用户输入的非法字符是防止跨站脚本攻击(Cross-Site Scripting,简称XSS)和防止SQL注入等恶意攻击的重要措施。本文将深入探讨标题中的两个关键类:`XssFilter.java` 和 `...

    php过滤非法字符类.zip

    在上下文中,非法字符通常指的是可能导致安全问题的特殊字符,如SQL语句中的分隔符、注释符号、特殊运算符等。这些字符如果未经处理就直接用于数据库查询,可能会导致SQL注入攻击,使得攻击者能够执行恶意SQL命令。...

    验证非法字符

    非法字符的验证主要用于防止恶意用户提交可能破坏系统或导致安全漏洞的数据。本教程将详细讲解如何在ASP.NET中实现非法字符的验证,以保护用户注册和登录过程。 首先,我们需要理解非法字符的概念。在注册和登录...

    ORACLE存储过程判断非法字符

    在创建或更新表、插入数据、更新数据或执行其他数据库操作时,我们有时需要确保输入的数据不包含任何非法或特殊字符,以避免引发错误或破坏数据的完整性。本话题将深入探讨如何在Oracle存储过程中检查和处理非法字符...

    ASP源码 验证用户名是否包含有非法字符

    本文将详细解析一段ASP(Active Server Pages)脚本代码,该脚本用于验证用户输入的用户名是否包含了非法字符。通过这段代码的学习,我们可以了解到如何使用ASP进行简单的字符串处理以及条件判断。 #### 一、ASP...

    易语言源码易语言非法字符检测源码.rar

    易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码易语言非法字符检测源码.rar 易语言源码...

    自动删除非法字符.rar

    在IT领域,自动删除非法字符是一项重要的数据处理任务,它涉及到字符串操作、正则表达式、编程语言的应用等多个知识点。非法字符通常指的是那些在特定环境中不被允许或不能正常处理的字符,例如某些特殊符号、控制...

    Ant编译utf-8非法字符:\\65279

    标题“Ant编译utf-8非法字符:\\65279”涉及到的是在使用Apache Ant工具进行Java项目编译时遇到的一个字符编码问题。Ant是Java开发中的一个构建工具,它通过XML定义的构建文件来自动化构建过程,如编译、打包、测试...

    非法字符和谐并输出各个字符和谐次数

    这个任务的标题“非法字符和谐并输出各个字符和谐次数”指的是编写一个程序,它能够接收用户输入的字符串,将其中的非法字符替换为某种“和谐”字符(如星号(*)),同时统计并输出每个字符被替换的次数。在这个过程...

    文本框非法字符的验证(WEB程序)

    ### 文本框非法字符的验证(WEB程序) 在Web开发中,输入验证是确保系统安全性和数据完整性的重要步骤之一。不正确的用户输入可能导致多种安全问题,例如SQL注入、XSS攻击等。因此,在Web应用程序中对用户输入进行...

Global site tag (gtag.js) - Google Analytics