Справочник по внешнему объекту Veracode XML (XXE) unmarshaling org.w3c.dom.Element

Я получаю уязвимость XML External Entity Reference (XXE) от аудита сканирования кода (Veracode) при демонтаже элемента.

    public static <T> T unMarshal(org.w3c.dom.Element content, Class<T> clazz) throws JAXBException {
    JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    return (T) unmarshaller.unmarshal(content, clazz).getValue();
}

Как я могу исправить неправильное ограничение ссылки на внешнюю сущность XML ('XXE') в приведенном выше коде?

0 ответов

Согласно вашему примеру вы можете попробовать этот код:

public static <T> T unMarshal(org.w3c.dom.Element content, Class<T> clazz) throws JAXBException, XMLStreamException {
  JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
  Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

  XMLInputFactory xmlif = XMLInputFactory.newFactory();
  xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
  xmlif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
  XMLStreamReader xsr = xmlif.createXMLStreamReader(content);

  return (T) unmarshaller.unmarshal(xsr, clazz).getValue();
}

Я думаю, что приведенное выше решение может решить проблему, связанную с (CWE 611) Ссылка на внешнюю сущность XML.

Другие вопросы по тегам