Foxpro:是否可以禁用外部实体解析?

时间:2017-08-07 18:56:39

标签: xml visual-foxpro foxpro xxe

根据此处的文档: https://msdn.microsoft.com/en-us/library/we9s91f8(v=vs.71).aspx

Microsoft Visual FoxPro似乎能够从外部源进行DTD解析。

  

“当您使用XMLTOCURSOR()导入XML时,Visual FoxPro使用   外部或内部模式来确定游标或表   结构体。当没有提供架构时,Visual FoxPro使用“最好的   猜测“解释XML数据的方法。这涉及两次通过   XML,一个用于确定数据结构,另一个用于执行实际数据   转换。请注意,XML必须是格式良好的   通常符合可以解释为表格的格式。   格式良好的XML,不易解构为表格格式   将无法导入“

但是,没有给出关于如何禁用外部文档模式的解析以防止XML外部实体注入的信息。是否可以禁用外部模式的解析,或者是否必须使用语言本身之外的策略来防止漏洞?

1 个答案:

答案 0 :(得分:1)

正如艾伦所说,如果您提供8192作为参数,那么它将附加到现有光标。如果没有现有游标,则: 如果XML本身不包含外部模式,它将无法解析外部模式。如果XML中存在内联架构,那么您仍然可以使用字符串操作将其删除。即:

lcXML = FileToStr('c:\myfolder\my.xml')
lcXML = Strtran(m.lcXML, ;
   StrExtract(m.lcXML,'<xsd:schema','</xsd:schema>',1,1+4), '')

使用XmlAdapter类,您可以使用自己的外部架构加载此XML。

注意:CursorToXML()和XMLToCursor()早于XMLAdapter类,并且功能有限。为了获得更好的体验并使用复杂的有效XML,请使用XMLAdapter类(我相信我已经在foxite上发布了关于如何使用XMLAdapter多年前解析复杂XML的代码)。

注意2:虽然文档说它使用外部或内部架构,但我不知道提供外部架构的方法(如果只是使用同名的.xsd文件就可以尝试,如果是,那么你可以简单地删除它或读取xml并使用XMLToCursor()中的字符串在内存中。

相关问题