通过PHP上传和解析NBT文件的安全性


Security of uploading and parsing Named Binary Tag files (NBT) via PHP

我正在构建一个处理上传/下载命名二进制标记文件(NBT)的应用程序。

上传后,我需要解析它们并获取一些信息。

我有点担心安全问题,因为我没有必要的知识来正确理解它们是如何构建的,或者期望从它们获得什么样的数据。

  • 当文件上传时,我可以执行哪些完整性检查,以确保它们确实是NBT文件

  • 在解析它们时我应该关注吗?

我知道这些都是模糊的问题。谷歌上没有很多答案,否则我也不会在这里。

NBT的文件格式非常简单紧凑。它是一个二进制流(未压缩或gzip),由Notch指定。

一个"问题"来自于特殊制作的nbt文件,其中包含许多空列表和列表的列表……解析这些条目的内存开销可能导致服务失败(主要是因为为每个条目创建的对象只会填满您的内存)。

一种解决方案可能是限制您正在读取的条目数量,当达到该限制时,只需删除已解析的文件。

我最近发布了一个用于读取nbt文件的java库(但没有限制),也许它可以帮助您理解文件格式。

编辑:忘记分享这个网站的"漏洞":http://arstechnica.com/security/2015/04/just-released-minecraft-exploit-makes-it-easy-to-crash-game-servers/