通过 PHP 上传和解析命名二进制标签文件 (NBT) 的安全性
Security of uploading and parsing Named Binary Tag files (NBT) via PHP
我正在构建一个处理 uploading/downloading Named Binary Tag 文件 (NBT) 的应用程序。
上传后我需要解析它们并获取一些信息。
我有点担心安全问题,因为我没有必要的知识来正确理解它们的构建方式或期望从它们那里获得什么样的数据。
上传文件时,我可以执行哪些完整性检查,以确保它们确实是 NBT 文件。
解析它们时需要注意什么?
如果还有什么需要注意的,请告诉我。
我意识到这些都是模糊的问题。 Google上的回答不多,不然我也不会来了
NBT 的文件格式非常简单紧凑。它是由 Notch 指定的二进制流(未压缩或 gzip 压缩)。
一个"problem"带有特制的NBT文件,其中包含大量空列表和列表列表......解析这些的内存开销可能导致服务失败(主要是因为创建每个条目的对象只会填满你的记忆)。
一个解决方案可能是限制您正在阅读的条目数量,当达到该限制时,只删除已解析的文件。
我最近发布了一个java-library for reading nbt-files(但没有限制),也许它可以帮助您理解该文件格式。
编辑: 忘记分享关于 "exploit" 的网站:http://arstechnica.com/security/2015/04/just-released-minecraft-exploit-makes-it-easy-to-crash-game-servers/
我正在构建一个处理 uploading/downloading Named Binary Tag 文件 (NBT) 的应用程序。
上传后我需要解析它们并获取一些信息。
我有点担心安全问题,因为我没有必要的知识来正确理解它们的构建方式或期望从它们那里获得什么样的数据。
上传文件时,我可以执行哪些完整性检查,以确保它们确实是 NBT 文件。
解析它们时需要注意什么?
如果还有什么需要注意的,请告诉我。
我意识到这些都是模糊的问题。 Google上的回答不多,不然我也不会来了
NBT 的文件格式非常简单紧凑。它是由 Notch 指定的二进制流(未压缩或 gzip 压缩)。
一个"problem"带有特制的NBT文件,其中包含大量空列表和列表列表......解析这些的内存开销可能导致服务失败(主要是因为创建每个条目的对象只会填满你的记忆)。
一个解决方案可能是限制您正在阅读的条目数量,当达到该限制时,只删除已解析的文件。
我最近发布了一个java-library for reading nbt-files(但没有限制),也许它可以帮助您理解该文件格式。
编辑: 忘记分享关于 "exploit" 的网站:http://arstechnica.com/security/2015/04/just-released-minecraft-exploit-makes-it-easy-to-crash-game-servers/