使用libxml2 objective c验证XML中的DTD和XXE

时间:2016-01-24 13:33:06

标签: ios objective-c libxml2 xml-dtd xxe

<?xml version="1.0" ?>
<!DOCTYPE list [
<!ELEMENT list (bsinfo+)>
<!ELEMENT bsinfo (id,title,desc,books)>
]>

<list>
<bsinfo>

在我的项目中,我想验证XML是否包含DTD。 Currenly我正在使用Libxml解析器来解析XML。

在LibXML中,我如何检查XML是否包含DTD。

向服务器发送请求XML时如何防止XXE攻击。

1 个答案:

答案 0 :(得分:0)

当你说&#34;我想验证XML是否包含DTD&#34;你的意思是(a)&#34;我想使用文档中存在的DTD,如果有的话,我想在myfine.dtd中使用DTD&#34;?或者(b)&#34;无论XML实例中存在什么,我都想验证onetrue.dtd&#34;?

在情况(a)中,测试文档类型声明的一种方法是加载文档并应用适当的正则表达式来查找字符串&#39;

在情况(b)中,您不需要检查XML是否包含对DTD的引用;你只需要告诉libxml验证onetrue.dtd,使用C API相当于xmllint --dtdvalid选项。并且,您可以通过DTD中的实体声明来保护不可接受的外部或内部实体。

这两个答案都假设当您询问&#34;在向服务器发送请求XML时如何防止XXE攻击&#34;您正在寻求保护服务器,而不是请求者,以防止XXE攻击。我不知道如何保护请求者,因为我不了解如何使用实体处理来攻击请求者。