java安全编码指南之:输入注入injection( 二 )

一般来说 , 我们在解析XML的过程中 , 如果发现有重复的tag , 那么后面的tag会覆盖前面的tag 。
结果就是1个iphone20现在的价格是20块 , 非常划算 。
XML注入的java代码我们看下XML的注入在java代码中是怎么实现的:
public String createXMLInjection(String quantity){String xmlString = "\nIphone20\n"+ "5000.0\n" + "" + quantity+ "";return xmlString;}可以看到我们直接使用用户输入的quantity作为XML的拼接 , 这样做很明显是有问题的 。
怎么解决呢?有两种方法 。

  • 第一种方法
第一种方法就是对用户输入的quantity进行校验:
public String createXML(String quantity){int count = Integer.parseUnsignedInt(quantity);String xmlString = "\nIphone20\n"+ "5000.0\n" + "" + count+ "";return xmlString;}上面代码中 , 我们对quantity进行了Integer的转换 , 从而避免了用户的非法输入 。
  • 第二种方法
第二种方法是使用XML Schema , 来对生成的XML进行格式校验 。
先看一下我们改怎么定义这个XML Schema:
上面我们定义了一个XML element的序列sequence 。 如果用户输入了非定义格式的其他XML , 就会报错 。
我们看下相对应的java代码该怎么写:
StreamSource ss = new StreamSource(new File("schema.xsd"));Schema schema = sf.newSchema(ss);SAXParserFactory spf = SAXParserFactory.newInstance();spf.setSchema(schema);SAXParser saxParser = spf.newSAXParser();XMLreader reader = saxParser.getXMLReader();reader.setContentHandler(defHandler);reader.parse(xmlStream);上面我们列出了XML验证的代码 , 完整的代码可以参考文末的代码链接 , 这里就不一一贴出来了 。
本文的代码:
learn-java-base-9-to-20/tree/master/security
本文已收录于
最通俗的解读 , 最深刻的干货 , 最简洁的教程 , 众多你不知道的小技巧等你来发现!
【java安全编码指南之:输入注入injection】欢迎关注我的公众号:「程序那些事」,懂技术 , 更懂你!