配置Java XML分析器以防止XXE

本文介绍了如何防止Java XML解析器遭受XXE(XML External Entity)攻击。通过启用XML外部实体,攻击者可能读取系统文件。Java的SAX解析器默认启用外部实体,容易受到此类攻击。为解决此问题,可以通过禁用xerces1或xerces2的外部实体和doctype来改变默认设置。参考OWASP XXE备忘单了解更多防御措施。
摘要由CSDN通过智能技术生成

启用XML eXternal Entity(XXE)后,可以创建恶意XML(如下所示)并读取计算机上任意文件的内容。 XXE攻击是OWASP十大漏洞的一部分,这并不奇怪。JavaXML库特别容易受到XXE注入的攻击,因为大多数XML解析器默认情况下都启用了外部实体。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE bar [
       <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<song>
   <artist> &xxe; </artist>
   <title> Bohemian Rhapsody </title>
   <album> A Night at the Opera </album>
</song>

如下所示,DefaultHandler和Java SAX解析器的简单实现实现了对该XML文件的解析并显示了passwd文件的内容。 这里以Java SAX解析器案例为主要示例,但其他解析器(如DocumentBuilder和DOM4J)具有类似的默认行为。

SAXParserFactory factory = SAXParserFactory . newInstance ();
SAXParser saxParser = factory . newSAXParser ();

DefaultHandler handler = new DefaultHandler () {

    public void startElement ( String uri , String localName , String qName , Attributes attributes ) throws SAXException {
        System . out . println ( qName );
    }

    public void characters ( char ch [], int start , int length ) throws SAXException {
        System . out . println ( new String ( ch , start , length ));
    }
};

更改默认设置以分别禁止xerces1xerces2的外部实体和doctype可以防止此类攻击。

...
SAXParserFactory factory = SAXParserFactory . newInstance ();
SAXParser saxParser = factory . newSAXParser ();

factory . setFeature ( "https://xml.org/sax/features/external-general-entities" , false );
saxParser . getXMLReader (). setFeature ( "https://xml.org/sax/features/external-general-entities" , false );
factory . setFeature ( "https://apache.org/xml/features/disallow-doctype-decl" , true ); 
...

有关防止恶意XXE注入的更多动手信息,请查看OWASP XXE备忘单

这只是10个Java安全最佳实践中的1个。 看一看完整的10页和易于打印的一页纸

From: https://dev.to/brianverm/configure-your-java-xml-parsers-to-prevent-xxe-213c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值