`
fishermen
  • 浏览: 380938 次
社区版块
存档分类
最新评论

xml 构造及解析时的非法字符问题

阅读更多

      系统交互会用到xml,如果直接构造xml的字串,很容易出现非法字符,所以一般推荐,使用dom4j 先构造合法的xml obj,然后再转为字串。但实际上,即便如此,如果遇到xml的非法字符,即便构造xml obj成功,最后转的xml 字串也是有问题。

 

      xml的无效字符包含ascii值在32以下的三段:0x00-0x08, 0x0b-0x0c, 0x0e-0x1f。在字串中有这些特殊字符时会出现解析错误。dom4j的Element可以设置这些字符,不幸的是,却无法再解析出来。

 

      解决办法:轮询字串的char数组,找出这些字符扔掉即可。方法如下:

 

public static void main(String[] args) throws Exception{		
		String invalidStr = "测试特殊符号“”";
		String validStr = toValidXmlStr(invalidStr);
		Element e = DocumentHelper.createElement("text");		
		e.setText(validStr);
		System.out.println(validStr);
		System.out.println(DocumentHelper.parseText(e.asXML()).asXML());
		
		
	}
	
	/**
	 * filter the invalid xml characters:
	 * <ol> 
     *  <li>0x00 - 0x08</li> 
     *  <li>0x0b - 0x0c</li> 
     *  <li>0x0e - 0x1f</li> 
     * </ol> 
	 * @param xmlStr
	 * @return
	 */
	private static String toValidXmlStr(String xmlStr){
		StringBuilder sbud = new StringBuilder();
		for(char c : xmlStr.toCharArray()){
			if(!(0x00 < c && c < 0x08 
					|| 0x0b < c && c < 0x0c
					|| 0x0e < c && c < 0x1f)){
				sbud.append(c);
			}
		}
		return sbud.toString();
	}

 

      如果直接用invalidStr 进行setText(),虽然此处不报错,但是再解析的时候会报 invalid xml character的异常。

分享到:
评论
1 楼 abcdefg_abc 2010-10-28  
如果xml文件超过100k,这个过滤方法的性能就慢的可观了,期待有个更高效的办法来过滤0x00-0x08, 0x0b-0x0c, 0x0e-0x1f这三段无效字符

相关推荐

    禁止输入非法字符

    描述中提到的"/"、"*"、"-"和"+"就是常见的非法字符,它们在不同的语境下可能会引发问题。 1. **SQL注入**:非法字符如'、;、--、/*...*/等在SQL语句中可能被恶意利用,导致数据泄露、篡改或者破坏。因此,输入数据...

    C++解析xml源码

    在实际应用中,C++ XML解析可能涉及到错误处理,比如处理非法字符、缺失的结束标签、未闭合的属性等。此外,性能也是考虑的关键因素,特别是在处理大型XML文件时。为了提升性能,开发者可能会采用预编译正则表达式、...

    xml文件存储及读取

    - 对用户提供的XML输入进行验证,防止非法字符或结构。 在WindowsApplication1这个项目中,很可能包含了一个C#应用程序示例,演示了如何使用以上所述的技术来读取和存储XML文件。通过查看源代码和运行程序,你可以...

    Tinyxml 源代码(VC6 & VS2005)

    这些在XML文档读取时都会被辨认出来,并会被转化成等价的UTF-8字符。比如下面的XML文本: Far & Away 从TiXmlText 对象查询出来时会变成"Far & Away"这样的值,而写回XML流/文件时会以“&”的方式写回。老版本...

    Python常见安全漏洞及修复方法.pdf

    输入注入攻击是当程序接收用户输入并将其直接用于数据库查询或其他命令时,攻击者通过精心构造输入数据来执行非法的数据库查询或者操作系统命令。例如,一个直接使用用户输入来构造SQL查询的代码段,可能会被利用来...

    funsionchar

    在解析XML内容时,如果攻击者精心构造了含有恶意字符的数据,可能会绕过框架的安全防护,导致远程代码执行。远程代码执行意味着攻击者可以在服务器上运行任意代码,这可能导致数据泄露、服务破坏甚至整个系统的瘫痪...

    JSONObject所必须的6个包

    当JSON操作过程中发生错误,如解析错误或非法JSON结构时,会抛出这个异常。捕获并处理这个异常是编写健壮JSON处理代码的关键部分。 5. **org.json.JSONStringer** `JSONStringer` 类提供了构造JSON文本的便利方法...

    QT问题集锦-从学习Qt遇到的各种问题.docx

    本文主要针对使用Qt4.8.5版本时遇到的问题进行解答,涵盖了从初级到中级的一系列常见问题。 ### 初级问题 1. **无法打开项目文件**: - 错误:`Cannot read E:/PROJECT/Zhou-0410/testToolbar.pro: Unexpected ...

    某盟面试经验分享.pdf

    - 利用XXE通常通过构造包含恶意外部实体的XML文档,使解析器执行非法操作。 - 实战中,这可能包括读取服务器上的敏感文件或发起网络请求。 4. **CTF比赛经验**: - CTF(Capture The Flag)是网络安全竞赛,参与...

    解析android res 运行错误的问题

    在Android开发过程中,资源解析错误通常会导致应用崩溃,如标题和描述中所示的问题。这个问题涉及到多个关键知识点,包括资源管理、布局加载、异常处理以及Android系统内部的工作机制。以下是对这些知识点的详细解释...

    org.json包2015年12月

    - 验证JSON:`JSONException`是处理JSON解析过程中出现错误的异常类,如非法字符、缺失括号等。 6. XML与JSON互转 `org.json`包还提供了XML与JSON的转换功能,`JSONObject`和`JSONArray`都有对应的`toString(XML)`...

    注入式攻击的实例

    攻击者可以构造特定的XPath表达式,以篡改或非法访问XML文档的内容。 6. **XML注入**:XML数据的解析如果不安全,攻击者可以注入恶意的XML数据,触发XML解析器的错误行为,如执行外部实体、泄露敏感信息等。 7. **...

    Android面试题

    - C 选项描述的是默认情况下子类的行为,当子类没有任何构造方法时,默认会继承父类的无参构造方法。 - D 选项表述不准确,子类的无参构造方法并不会“覆盖”父类的无参构造方法。 - **正确答案**:A #### 四、...

    Android面试题及答案

    ### Android面试题及答案解析 #### 一、内存回收机制的理解 **题目**: 下列哪些语句关于内存回收的说明是正确的? - A、程序员必须创建一个线程来释放内存 - B、内存回收程序负责释放无用内存 - C、内存回收程序允许...

    linux C/C++实现的通过url访问网页提取网页文字内容

    在访问网页时,应考虑处理可能的网络异常、防止缓冲区溢出、处理非法字符和注入攻击等问题。此外,对于HTTPS协议,需要处理SSL/TLS加密,这涉及更多复杂性,通常推荐使用OpenSSL库。 总的来说,使用C/C++在Linux下...

    android一些选择题目

    `RuntimeException`是Java中的一种异常,表示在运行时可能会发生的错误,如算术异常、非法参数异常、空指针异常等。这些异常通常是由程序逻辑错误引起的,应当在编写代码时避免。 ### 9. Math类的round方法 `Math....

    简单扼要了解python爬虫

    1. 合规问题:遵守法律法规和服务条款,不进行非法爬取。 2. 数据保护:保护用户隐私,确保数据安全,尊重知识产权。 3. 爬虫速率:遵循网站访问限制,避免对网站造成过大压力。 4. 代码可维护性:保持代码结构清晰...

    php提取网页正文内容的例子__4.docx

    在解析之前,源码会经过预处理,这一步主要是为了消除可能影响解析的非法字符和冗余标签。`preparSource`方法可能包含了清理HTML,例如去除不合法的字符,修复标签结构等操作。 3. **定义垃圾标签和属性**: `...

    php提取网页正文内容的例子__1.docx

    - `preparseSource`方法负责预处理HTML,可能包括清理非法字符、标准化编码等操作。 - 类中还包含其他方法,如遍历DOM树,计算元素得分,删除不需要的节点等,这些都是为了找出并提取正文内容。 3. **正文内容的...

    Desktop_python爬虫_股票_百度爬虫_python爬虫_

    开发者可能需要研究百度的API文档,了解如何构造请求并解析返回的数据。 在实际操作中,Python爬虫可能还会遇到反爬虫策略,如验证码、IP限制等。为了应对这些问题,我们可以使用代理IP、设置用户代理、模拟登录、...

Global site tag (gtag.js) - Google Analytics