0

基于此处找到的文档: 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 外部实体注入的信息。是否可以禁用外部模式的解析,或者必须采用语言本身之外的策略来防止漏洞?

4

1 回答 1

1

正如 Alan 所说,如果您提供 8192 作为参数,那么它将附加到现有游标。如果没有现有游标,则: 如果 XML 本身不包含外部模式,则它不会使用外部模式进行解析。如果 XML 中有内联模式,那么您仍然可以使用字符串操作简单地删除它。IE:

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()) 一起使用。

于 2017-08-09T15:01:53.873 回答