根据此处的文档: 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外部实体注入的信息。是否可以禁用外部模式的解析,或者是否必须使用语言本身之外的策略来防止漏洞?
答案 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()中的字符串在内存中。