Проверьте магический номер файла паркета в Python - PullRequest
0 голосов
/ 26 февраля 2019

В Python мы можем проверить zip-файл, используя метод zipfile.is_zipfile https://docs.python.org/2/library/zipfile.html

Аналогично, я хочу проверить сторонний файл Parquet на основе его магического номера, прежде чем я его использую.Есть ли API, который я могу использовать для проверки файла Parquet на основе Magic Number, и это может быть угрозой безопасности, если я не проверю

1 Ответ

0 голосов
/ 27 февраля 2019

Как правило, магические числа, обозначающие различные типы файлов, - это первые четыре байта файла.То же самое верно и для Parquet, но Parquet также записывает магические байты в конце файлов, так что вы можете проверить любой (или оба).Волшебная строка в обоих местах - «PAR1».

Вы можете сделать это вручную, но если вы используете pyarrow, проверка файлов Parquet автоматически происходит за кулисами.Вы можете проверить это с помощью простого эксперимента.Сначала попробуйте загрузить фактический файл Parquet:

>>> import pyarrow.parquet as pq
>>> parquet_file = pq.ParquetFile('data.parquet')

Эта операция выполнена успешно, и вы можете использовать parquet_file любым способом, например, для доступа к его метаданным как parquet_file.metadata.С другой стороны, если вы попытаетесь открыть файл, не принадлежащий Паркету, вы получите ошибку:

>>> 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.

Что касается второй части вашего вопроса, то не проверка магического числа не является угрозой безопасности, посколькуесли злоумышленники могут подделать вредоносные файлы с целью вызвать какую-либо уязвимость, они могут сделать это так же легко, одновременно используя правильную магическую строку.Это больше похоже на вопрос о том, как рано вы узнаете, что есть какая-то проблема с файлом, и насколько полезным будет сообщение об ошибке.

Например, если код не проверяет магические байты и сразу же начинает с чтениясмещение нижнего колонтитула, а затем пытается прочитать нижний колонтитул из этого смещения, вы можете получить не очень полезное сообщение об ошибке, сообщающее о недопустимом смещении, вместо гораздо более полезного с жалобой на неправильный тип файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...