我正在构建一个处理上传/下载命名二进制标记文件(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/