首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中检查拼图文件魔数

在Python中检查拼图文件魔数
EN

Stack Overflow用户
提问于 2019-02-27 04:13:13
回答 1查看 7K关注 0票数 2

在Python语言中,我们可以使用zipfile.is_zipfile https://docs.python.org/2/library/zipfile.html方法来验证zip文件

类似地,我想在消费之前根据第三方拼图文件的Magic number来验证它。有没有API可以用来验证拼图文件的基础是魔数,如果我不验证,可能会有安全风险

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-27 23:12:37

通常,标识不同文件类型的幻数是文件的前四个字节。同样的情况也适用于Parquet,但是Parquet还会在文件的末尾写入幻数字节,因此您可以检查其中一个(或两个都检查)。这两个位置的神奇字符串都是"PAR1“。

您可以手动执行此操作,但如果使用pyarrow,则会在幕后自动对拼图文件进行验证。你可以通过一个简单的实验来验证这一点。首先,尝试加载一个实际的拼图文件:

代码语言:javascript
复制
>>> import pyarrow.parquet as pq
>>> parquet_file = pq.ParquetFile('data.parquet')

此操作成功,您可以以任何想要的方式使用parquet_file,例如,以parquet_file.metadata形式访问其元数据。另一方面,如果你试图打开一个非拼图文件,你会得到一个错误:

代码语言:javascript
复制
>>> parquet_file = pq.ParquetFile('/etc/crontab')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/zi/.local/lib/python2.7/site-packages/pyarrow/parquet.py", line 128, in __init__
    self.reader.open(source, use_memory_map=memory_map, metadata=metadata)
  File "pyarrow/_parquet.pyx", line 640, in pyarrow._parquet.ParquetReader.open
  File "pyarrow/error.pxi", line 83, in pyarrow.lib.check_status
pyarrow.lib.ArrowIOError: Invalid parquet file. Corrupt footer.

关于你的问题的第二部分,不检查魔术数字不是安全风险,因为如果攻击者可以伪造恶意文件来触发一些漏洞,他们可以很容易地这样做,同时使用正确的魔术字符串。这更像是一个问题,即您多早认识到文件存在问题,以及错误消息的用处有多大。

例如,如果代码省略了对幻数字节的检查,并立即从读取脚注的偏移量开始,然后尝试从该偏移量读取脚注,那么您可能会得到一条不太有用的错误消息,抱怨一个无效的偏移量,而不是一个更有用的消息,抱怨错误的文件类型。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54893375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档