【问题标题】:Foxpro: Is it possible to disable external entity resolution?Foxpro:是否可以禁用外部实体解析?
【发布时间】:2017-08-07 18:56:38
【问题描述】:

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

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

"当您使用 XMLTOCURSOR( ) 导入 XML 时,Visual FoxPro 使用 确定游标或表的外部或内部架构 结构体。当没有提供模式时,Visual FoxPro 使用“最佳 guess" 方法来解释 XML 数据。这涉及到两个传递 XML,一个用于确定数据结构,一个用于执行实际操作 转换。请注意,XML 除了格式正确之外,还必须 通常符合可以解释为表格的格式。 格式良好的 XML,不易解构为表格格式 将无法导入”

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

【问题讨论】:

  • 我想你所能做的就是设置 8192 的相关标志,使其完全忽略外部模式。

标签: xml visual-foxpro foxpro xxe


【解决方案1】:

正如 Alan 所说,如果您提供 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()) 使用内存中的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多