Java 怪异实体扩张案

Java 怪异实体扩张案,java,xml,saxparser,expansion,Java,Xml,Saxparser,Expansion,我目前正在处理一个相当奇怪的实体扩展问题 SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); XMLReader xmlReader = spf.newSAXParser().getXMLReader(); InputSource inputSource = new InputSource(n

我目前正在处理一个相当奇怪的实体扩展问题

SAXParserFactory spf = SAXParserFactory.newInstance();
    spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
    XMLReader xmlReader = spf.newSAXParser().getXMLReader();
    InputSource inputSource = new InputSource(new FileReader("input.xml"));
    SAXSource source = new SAXSource(xmlReader, inputSource);

    Unmarshaller unmarshaller = jc.createUnmarshaller();
    Foo foo = (Foo) unmarshaller.unmarshal(source);
代码取自。我在我的应用程序中使用了类似的代码。现在,当我像

<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>

]>
我得到“解析器在本文档中遇到了超过“64000”个实体扩展;这是应用程序施加的限制。 线程“main”javax.xml.bind.UnmarshaleException中出现异常 这是预期的行为。我接住它,优雅地处理它。然而,我们的测试团队产生了这个例子

    <!DOCTYPE lolz [
<!ENTITY lul "lulllullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullullul">
  ]>

 <someTag>&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;&lul;  </someTag>

&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔&卢尔;
好的,原来的行要长得多:)无论如何,当我输入这种类型的xml时,应用程序不会崩溃,但是CPU使用率变得高得令人无法接受,并且不会引发异常。
我有什么办法可以防止这种情况发生吗?设定某些限制

当然,一个包含15个实体扩展的元素不会导致高CPU负载,我尝试了一个包含30000个扩展的行,但没有注意到任何显著的变化。如果您不更详细地描述您的用例,您甚至无法开始对可能的原因进行推理。-无论如何,没有理由抛出异常,而且您可以减慢许多应用程序的运行速度,因为O(n²)重新分配工作会对字符串处理造成过度影响。例如,我试图找出是否有一种方法可以限制一般实体的大小。我知道这个系统工作正常,但对我来说这是不可接受的。我需要找到一种方法来隔离这种情况,并在它占用整个cpu之前停止应用程序