Spec-Zone.ru › NumPy 2.0

Безопасность NumPy

Вопросы безопасности можно сообщать в личном порядке, как описано в файле README проекта, и при открытии новой проблемы в системе отслеживания в системе отслеживания проблем. Руководство по сообщению о проблемах безопасности Python https://www.python.org/dev/security/ — хороший ресурс, и его замечания также применимы к NumPy.

Разработчики NumPy не являются экспертами в области безопасности. Однако мы серьезно относимся к безопасности и являемся экспертами как в кодовой базе NumPy, так и в способах ее использования. Пожалуйста, сообщите нам об этом до создания консультаций по безопасности для NumPy, так как мы будем рады рассмотреть вопросы в приоритетном порядке или помочь в оценке степени тяжести ошибки. Неоповещенное заранее предупреждение о проблеме безопасности может привести к большому объему работы для всех заинтересованных сторон.

Рекомендации по использованию NumPy с ненадежными данными

Пользователь, имеющий свободный доступ к выполнению функций NumPy (или Python), должен считаться обладающим такими же привилегиями, как процесс/интерпретатор Python.

При этом NumPy, как правило, безопасен для использования с данными, предоставленными непривилегированными пользователями и прочитанными через безопасные API-функции (например, загруженными из текстового файла или .npy файла без поддержки pickle). Злонамеренные значения или размеры данных никогда не должны приводить к повышению привилегий. Обратите внимание, что вышесказанное относится к данным массивов. Мы не считаем, например, f2py безопасным: он обычно используется для компиляции программы, которая затем выполняется. Любое f2py вызов должен, таким образом, использовать те же привилегии, что и последующее выполнение.

Следующие моменты могут быть полезны или должны быть учтены при работе с ненадежными данными:

  • Использование всего объема памяти может привести к завершению программы по причине нехватки памяти, что является возможной атакой типа отказа в обслуживании. Возможными причинами могут быть:

    • Функции чтения текстовых файлов, которые могут потребовать гораздо больше памяти, чем размер исходного входного файла.
    • Если пользователи могут создавать массивы произвольной формы, векторизация NumPy означает, что промежуточные или результирующие массивы могут быть значительно больше, чем входные.
  • Структурированные типы данных NumPy допускают большой объем сложности. К счастью, большинство кода корректно обрабатывает ситуацию, когда неожиданно предоставляется структурированный тип данных. Однако код должен либо запретить непривилегированным пользователям предоставлять эти данные (например, через файлы .npy или тщательно проверить включенные поля для вложенных структурированных/подмассивов типов данных).
  • Передача пользовательского ввода обычно считается небезопасной (за исключением данных, которые считываются). Примером может служить np.dtype(user_string) или dtype=user_string.
  • Скорость операций может зависеть от значений, а порядок памяти может привести к большему использованию временной памяти и более медленному выполнению. Это означает, что операции могут быть значительно медленнее или использовать больше памяти по сравнению с простыми тестовыми случаями.
  • При чтении данных следует рассмотреть возможность применения определенной формы (например, одномерной) или типа данных, таких как float64, float32, или int64, чтобы уменьшить сложность.

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

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/security.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API