【问题标题】:How to ensure the files is an XML file如何确保文件是 XML 文件
【发布时间】:2023-04-03 19:15:01
【问题描述】:

我对文件及其相关的安全性了解不多。我在 XML 文件中有很多数据,我计划解析这些数据以放入数据库中。我从第 3 方的人那里得到这些 XML 文件。我每天至少会收到大约 1000 个文件。所以我将编写一个脚本来解析它们以输入我们的数据库。现在我对此有很多疑问。

  1. 我知道如何解析单个文件。而且我可以在一个循环中将逻辑扩展到多个文件。但是,有没有更好的方法来做同样的事情?我如何使用多线程编程同时解析文件中的许多文件。将有一个脚本,给定文件,解析单个文件并输出到数据库。如何使用此脚本解析多线程/并行处理
  2. 如我所说,该文件来自第三方网站。那么我怎么能确定没有安全漏洞。我的意思是,我不太关心文件安全。但是我需要采取的最低限度的常见基本安全检查是什么?(如网络编程中的 sql 注入和 XSS 非常基本)
  3. 再次与安全相关:如何确保传入的 XML 文件是 XML 本身。我的意思是我可以使用扩展名,但是当我解析这些文件时,是否有可能注入脚本并使它们运行。以及在解析单个文件时应该采取哪些步骤

【问题讨论】:

    标签: php xml multithreading security xml-parsing


    【解决方案1】:

    你想validate the XML。这做了两件事:

    1. 确保它“格式正确” - 一个有效的 XML 文档
    2. 确保它是“有效的” - 遵循模式、dtd 或其他定义 - 它具有您希望解析的元素。

    php5 the syntax 中用于验证 XML 文档的是:

    • $dom->validate('articles.dtd');
    • $dom->relaxNGValidate('articles.rng');
    • $dom->schemaValidate('articles.xsd');

    当然,您需要一个 XSD(XML 模式)或 DTD(文档类型定义)来进行验证。

    【讨论】:

      【解决方案2】:

      我不能说第 1 点,但这听起来相当简单 - 每个文件都可以完全独立解析。

      第 2 点和第 3 点实际上是关于文件的内容。简单地说,您可以通过解析它并要求解析器验证它是否是有效的 XML,这就是您需要做的所有事情。如果您期望它遵循特定的 DTD,您可以根据它来验证它。 (有多个级别的验证,具体取决于您的数据。)

      XML 文件本身就是数据。虽然有可用作 XML 的“处理指令”,但它们与要执行的直接脚本位的指令方式不同,仅解析文件应该没有害处。恶意文件可能会做的两件事:

      • 尝试通过引用巨大外部DTD来发起拒绝服务攻击,这将使解析器使用大量带宽。如果您想防止这种情况,您可以禁用外部 DTD 解析。
      • 尝试仅通过非常大来占用大量资源。您始终可以限制脚本将处理的最大文件大小。

      【讨论】:

        猜你喜欢
        • 2012-07-07
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 2015-05-09
        相关资源
        最近更新 更多