如何确保文件是XML文件

时间:2011-07-30 01:30:13

标签: php xml multithreading security xml-parsing

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

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

2 个答案:

答案 0 :(得分:3)

你想要validate the XML。这有两件事:

  1. 确保它“格式正确” - 有效的XML文档
  2. 确保它是“有效的” - 遵循架构,dtd或其他定义 - 它具有您希望解析的元素。
  3. 用于验证XML文档的php5 the syntax是:

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

    当然,您需要使用XSD(XML架构)或DTD(文档类型定义)进行验证。

答案 1 :(得分:2)

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

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

XML文件本身就是数据。虽然有“处理指令”可用作XML,但它们的指令与直接执行脚本的方式完全相同,只是解析文件应该没有任何害处。恶意文件可以做的两件事:

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