Разработчики: | Python Software Foundation |
Дата последнего релиза: | 2023/08/25 |
Технологии: | Средства разработки приложений |
Основные статьи:
- Логическое программирование
- Доказательное программирование
- Методология программирования
- Технология программирования
- Программист
Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой набор полезных функций.
Python поддерживает структурное, обобщенное, объектно-ориентированное, функциональное и аспектно-ориентированное программирование. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений, высокоуровневые структуры данных. Поддерживается разбиение программ на модули, которые, в свою очередь, могут объединяться в пакеты.Дмитрий Бородачев, DатаРу Облако: Наше преимущество — мультивендорная модель предоставления облачных услуг
Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. Есть реализация интерпретатора для JVM с возможностью компиляции, CLR, LLVM, другие независимые реализации. Проект PyPy использует JIT-компиляцию, которая значительно увеличивает скорость выполнения Python-программ.
Python — активно развивающийся язык программирования, новые версии с добавлением/изменением языковых свойств выходят примерно раз в два с половиной года. Язык не подвергался официальной стандартизации, роль стандарта де-факто выполняет CPython, разрабатываемый под контролем автора языка.
2024: Удобный язык программирования для бэкенд-разработки
Выбор языка программирования для бэкенд-разработки играет ключевую роль в успехе проекта. ИТ-инструментов для написания кодов существует множество и у каждого есть свои особенности и области применения. Среди самых популярных языков - Java, JavaScript, Python, Ruby, C#. Если проект новый и есть возможность выбирать, то обратить внимание стоит на Python, который набирает вес за счет развития машинного обучения, уверен Кирилл Шершень, опытный ИТ-специалист, ведущий бэкенд-разработчик американского стартапа, обладатель главной награды Национальной премии `Технологии и инновации 2023`, ведущий эксперт Ассоциации технических инноваций IEEE - Института инженеров электротехники и электроники. Подробнее здесь.
2023
Около 1000 библиотек с уязвимостью, позволяющей заражать легитимное ПО
Компания МТС RED, входящая в ПАО «МТС», 1 декабря 2023 года опубликовала результаты исследования более 4,7 млн уникальных публичных репозиториев программного кода. Команда исследований МТС RED ART (Advanced Research Team) выявила около 1000 уязвимых библиотек, которыми злоумышленники могут воспользоваться для заражения легитимного программного обеспечения вредоносным кодом. Как уточнили TAdviser представители МТС RED, изученные в рамках исследования библиотеки применяются при разработке ПО на языке программирования Python.
В разработке распространено использование внешних компонентов от сторонних разработчиков — библиотек. Если они подключаются из внешнего репозитория, то существует риск захвата этого хранилища кода злоумышленником — атака типа repository hijacking или repojacking (захват репозитория).
Уязвимость при использовании внешних компонентов возникает, если их разработчик перенёс, удалил или продал свою учётную запись – например, в связи с прекращением поддержки проекта или передачей репозитория с кодом заказчику. В ряде случаев злоумышленники способны зарегистрировать на себя «заброшенное» имя учетной записи и разместить в нем вредоносный код. В этом случае программы, использующие компонент по старой ссылке, будут обращаться уже к новому содержимому, контролируемому злоумышленником. Таким образом в легитимную и популярную программу незаметно для разработчика может быть встроен код с различными вредоносными функциями — от кражи данных и слежения за пользователями до полного контроля над пользовательскими устройствами.
Эксперты МТС RED ART проанализировали свыше 6,3 миллиона репозиториев из таких популярных источников, как Google Cloud Console, PyPi, NPM. Анализ позволил выделить 4,7 миллиона уникальных репозиториев, по ссылкам на 7820 из них содержимое отсутствует. В 986 случаях аккаунт, под которым изначально создавались репозитории, неактивен. Такие репозитории уязвимы к захвату злоумышленниками, которые могут повторно зарегистрировать их на себя, в том числе с применением инструментов автоматизации.
Аккаунты, уязвимые к кибератакам класса repojacking, могли быть использованы в большом количестве программ, в том числе и российскими разработчиками, которые не подозревают о потенциальной опасности. Чтобы сторонние компоненты не стали входной точкой хакерской атаки на разработчиков, МТС RED ART опубликовала методику и ссылки на ряд инструментов, которые позволяют проверять исходный код на корректность ссылок на используемые внешние репозитории.
Мы предлагаем сообществу разработчиков присоединиться к инициативе и еще раз проверить наличие в своих зависимостях прямых ссылок на сторонние репозитории, которые могут быть уязвимы к repojacking-атакам. Наша общая цель — создание реестра доверенных зависимостей, в которых все сторонние компоненты и их артефакты проверены сообществом, — подчеркнул Денис Макрушин, технический директор компании МТС RED. |
Представлено ПО, которое ускоряет работу написанных на Python программ в тысячи раз
В конце августа 2023 года исследователи из Университета Массачусетса в Амхерсте сообщили о создании профилировщика Scalene, позволяющего многократно ускорить работу программ, написанных на языке Python. Подробнее здесь.
Устранение уязвимости в реализации TLS
Опубликованы корректирующие обновления языка программирования Python 3.11.5, 3.10.13, 3.9.18 и 3.8.18, в которых устранена уязвимость (CVE-2023-40217) в классе ssl.SSLSocket, позволяющая обойти стадию согласования TLS-соединения и связанные с ним процессы, такие как проверка сертификата. Успешная атака может привести к обработке незашифрованных данных так, как если бы они были переданы с использованием корректного TLS-соединения. Об этом стало известно 25 августа 2023 года.
Проблема вызвана тем, что после создания сокета имеется небольшое окно, во время которого принятые и помещённые в буфер сокета данные будут обработаны как прочитанные от клиента, если соединение будет закрыто до того, как начнётся процесс согласования TLS-соединения. Для совершения атаки достаточно установить соединение, сразу отправить данные и закрыть сокет, не дожидаясь ответа для согласования TLS-соединения. Размер данных, который может быть отправлен в ходе атаки ограничен размером сетевого буфера.
Уязвимость затрагивает серверные приложения (например, HTTPS-серверы), использующие штатную Python-библиотеку ssl для организации защищённого канала связи, в котором применяется аутентификация по клиентским сертификатам (например, mTLS). Уязвимость может использоваться только для отправки данных в обход аутентификации по сертификатам - так как соединение сразу закрывается, ответ на запрос не будет отправлен клиенту. При этом уязвимость вполне может применяться для атак на API, через которые можно внести изменения или удалить данные.
Уязвимость также может быть использована для атаки на клиентов, подключаемых к контролируемому атакующими серверу, если эти клиенты сразу переходят к чтению данных из сокета, без предварительной отправки запроса (обычные клиентские приложения, такие как pip, которые используют HTTPS для отправки запросов, уязвимость не затрагивает).
Кроме того, в ветке Python 3.11 устранена ещё одна уязвимость (CVE-2023-41105), позволяющая обойти проверки допустимых файловых путей, выполняемые с использованием функции os.path.normpath(). Уязвимость вызвана тем, что если в пути присутствуют символы с нулевым кодом ('\0'), то функция os.path.normpath() обрезает путь после первого нулевого символа. При этом в последующих функциях работы с файлами может использоваться полный, а не обрезанный путь. Проблема проявляется только в ветке 3.11.x, т.е. код на базе os.path.normpath(), корректно блокирующий недопустимые пути при выполнении в Python 3.10.x, можно обойти при выполнении этого кода в Python 3.11.x[1].
Интеграция в Excel
Компания Microsoft, в которой с 2020 года работает Гвидо ван Россум, создатель языка программирования Python, объявила об интеграции Python в табличный процессор Excel. Python можно использовать в Excel для написания формул, работы с данными, анализа информации и формирования диаграмм. Python-код добавляется в ячейки, обрабатывается по аналогии с макросами и функциями, но выполняется не локально, а в облаке Microsoft Cloud. Об этом стало известно 22 августа 2023 года. Подробнее здесь.
Поддержка обработчика в бета-релизи ispmanager 6.74
В бета-релизе 6.74 панели управления ispmanager 6 от 16 мая появилась поддержка обработчика Python. Об этом компания Ispmanager (ИСПменеджер) сообщила 18 мая 2023 года. Данная возможность доступна для версий lite, host и pro. Подробнее здесь.
Создание инструмента для автоматического исправления ошибок в скриптах Python
В середине марта 2023 года разработчик BioBootloader выпустил специализированный инструмент для автоматического исправления ошибок в скриптах Python. Решение получило название Wolverine. Подробнее здесь.
2022
Python 3.11
24 октября 2022 года стало известно о том, что после года разработки опубликовано значительное обновление языка программирования Python (с версией 3.11). Обновленная ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.
Как сообщалось, одновременно началось альфа-тестирование ветки Python 3.12 (в соответствии с графиком разработки работа над обновленной веткой начинается за пять месяцев до релиза предыдущей ветки и к моменту очередного релиза достигает стадии альфа-тестирования). Ветка Python 3.12 будет находиться на стадии альфа-выпусков в течение семи месяцев, во время которых будут добавляться возможности и производиться исправление ошибок. После этого в течение трёх месяцев будет проводиться тестирование бета-версий, во время которого добавление возможностей будет запрещено и всё внимание будет уделяться исправлению ошибок. Последние два месяца перед релизом ветка будет находиться на стадии кандидата в релизы, на которой будет выполнена финальная стабилизация.
Среди добавленных в Python 3.11 изменений:
- Проведена работа по оптимизации производительности. В обновленную ветку включены изменения, связанные с ускорением и inline-развёртыванием вызова функций, применением быстрых интерпретаторов типовых операций (x+x, x*x, x-x, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), а также оптимизациями, подготовленными проектами Cinder и HotPy. В зависимости от вида нагрузки отмечается прирост скорости выполнения кода на 10-60%. В среднем производительность при прохождении тестового набора pyperformance увеличилась на 25%.
- Переработан механизм кэширования байткода, что позволило сократить время запуска интерпретатора на 10-15%. Объекты с кодом и байткод теперь статически размещаются интерпретатором, что дало возможность исключить стадии демаршалинга извлечённого из кэша байткода и преобразования объектов с кодом для размещения в динамической памяти.
- При отображении трассировки вызовов в диагностических сообщениях обеспечен вывод информации о выражении, из-за которого возникла ошибка (ранее подсвечивалась лишь строка без детализации, какая именно часть строки стала причиной ошибки). Расширенную информацию о трассировке также можно получить через API и использовать для сопоставления отдельных инструкций байткода с конкретной позицией в исходном коде, используя метод codeobject.co_positions() или функцию C API PyCode_Addr2Location(). Изменение оптимизирует отладку проблем, связанных с вложенными объектами словарей, множественными вызовами функций и сложными арифметическими выражениями.
- Добавлена поддержка групп исключений, дающих программе возможность генерировать и обрабатывать сразу несколько разных исключений одновременно. Для группировки нескольких исключений и их совместного вызова предложены дополнительные типы исключений ExceptionGroup и BaseExceptionGroup, а для выделения отдельных исключений из группы добавлено выражение "except*".
- В класс BaseException добавлен метод add_note(), позволяющий прикрепить текстовое примечание к исключению, например, добавить контекстную информацию, недоступную во время генерации исключения.
- Добавлен специальный тип Self, представляющий текущий закрытый класс. Self может применяться для аннотирования методов, возвращающих экземпляр своего класса, более простым путём, чем при использовании TypeVar.
- Добавлен специальный тип LiteralString, который может включать только строковые литералы, совместимые с типом LiteralString (т.е. голые строки и строки с типом LiteralString, но не произвольные и не комбинированные строки с типом str). Тип LiteralString можно использовать для ограничения передачи функциям строковых аргументов, произвольная подстановка частей строк в которых может привести к уязвимостям, например, при формировании строк для SQL-запросов или shell-команд.
- Добавлен тип TypeVarTuple, позволяющий использовать вариативные дженерики, в отличие от TypeVar охватывающие не один тип, а произвольное число типов.
- В стандартную библиотеку включён модуль tomllib с функциями для разбора формата TOML.
- Предоставлена возможность пометки отдельных элементов типизованных словарей (TypedDict) метками Required и NotRequired для определения обязательных и не обязательных полей (по умолчанию все объявленные поля обязательны для заполнения, если параметр total не выставлен в значение False).
- В модуль asyncio добавлен класс TaskGroup с реализацией асинхронного контекстного менеджера, ожидающего завершения группы задач. Добавление задач в группу осуществляется при помощи метода create_task().
- Добавлен декоратор классов, методов и функций @dataclass_transform, при указании которого система проверки статических типов трактует объект как при использовании декоратора @dataclasses.dataclass. В примере ниже класс CustomerModel при проверке типов будет обработан по аналогии с классом с декоратором @dataclasses.dataclass, т.е. как имеющий метод __init__, допускающий переменные id и name.
- В регулярных выражениях добавлена возможность использования атомарной группировки ((?>…)) и ревнивых (possessive) квантификаторов (*+, ++, ?+,{m,n}+).
- Добавлена опция командной строки "-P" и переменная окружения PYTHONSAFEPATH для отключения автоматического прикрепления к sys.path потенциально небезопасных файловых путей.
- Оптимизирована утилита py.exe для платформы Windows, в которой реализована поддержка синтаксиса "-V:<company>/<tag>" в дополнение к "-<major>.<minor>".
- Многие макросы в C API преобразованы в обычные или статические inline-функции.
- Объявлены устаревшими и будут удалены в выпуске Python 3.13 модули uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev и sunau. Удалены функции PyUnicode_Encode* [2].
Давняя уязвимость в Python-модуле tarfile, затрагивающая более 350 тыс. проектов
Выяснилось, что обнаруженная в 2007 году уязвимость под идентификатором CVE-2007-4559 в Python-модуле tarfile затрагивает более 350 000 проектов с открытым исходным кодом. Об этом стало известно 22 сентября 2022 года. Брешь связана с функциями extract и extractall в модуле tarfile, позволяет хакерам провести атаку обхода каталога (path traversal) и перезаписать произвольные файлы, добавляя последовательность '..' к именам файлов в tar-архиве.
Проще говоря, злоумышленник может воспользоваться брешью, загрузив tar-архив таким образом, чтобы можно было выйти из каталога, в который должен быть извлечен файл, а потом выполнить произвольный код и получить контроль над устройством жертвы.
Необычно то, что уязвимость никто не исправил еще в 2007 году – вопрос закрыли после обновления документации. В обновлении было предупреждение: `Никогда не извлекайте архивы из ненадежных источников без предварительной проверки, так как файлы могут создаваться вне пути`.
Компания Trellix, специалисты которой и обнаружили уязвимость, создала свой инструмент под названием Creosote, помогающий искать CVE-2007-4559. Именно с его помощью исследователи нашли уязвимость в Spyder Python IDE и Polemarch.
Кроме того, эксперты Trellix уже подготовили исправления более чем для 11 000 проектов. Исследователи ожидают, что более 70 000 репозиториев получат исправления.
С дополнительными техническими подробностями и примерами эксплуатации CVE-2007-4559 в Windows-версии Spyder IDE и web-интерфейсе Polemarch можно ознакомиться в отчете Trellix[3].
Внедрение в библиотеки языка Python хакерского ПО, ворующего ключи к облаку Amazon
27 июня 2022 года стало известно, что исследователи обнаружили в официальном стороннем репозитории языка Python набор вредоносных пакетов, которые способны красть ключи доступа к облачным ресурсам Amazon Web Services и переменные окружения и выводить эти данные на внешний общедоступный эндпойнт.
Эксперт компании Sonatype Акс Шарма (Ax Sharma) обнаружил пять таких пакетов: loglib-modules, pyg-modules, pygrata, pygrata-utils и hkg-sol-utils.
Проанализировав эти пакеты, два других исследователя Sonatype, Хорхе Кардона (Jorge Cardona ) и Карлос Фернандес (Carlos Fernández) выяснили, что они содержат код, который сам считывает и выводит конфиденциальные данные или использует те или иные зависимости для осуществления этой операции.
Шарма указывает, что первые два пакета, очевидно, нацелены на пользователей легитимных библиотек loglib и pyg. Pygrata-utils содержит код, идентичный loglib-modules. На кого нацелены два других пакета, неизвестно.
Все украденные данные размещаются без шифрования в виде файлов .TXT на общедоступном эндпойнте (какого рода, не указано; это может быть сервер, это может быть ПК). То есть, фактически оказываются в открытом доступе.
Акс Шарма задается вопросом, было ли это сделано по ошибке, или же авторы вредоносных пакетов специально выкладывают все в общий доступ с демонстрационными целями.
Информация о вредоносных пакетах была передана в PyPI, и они быстро исчезли из репозитория. Эндпойнт, на который выгружали украденные данные, также исчез из Сети.[4]
Взлом Python-пакета: данные тысяч разработчиков в опасности
25 мая 2022 года стало известно, что вредоносная версия пакета ctx позволяет хакерам получить учетные данные AWS.
Инцидент был расследован Sonatype, SANS Institute и независимым исследователем. Атаке подверглись две библиотеки, но только одна из них могла нанести серьезный ущерб. Ctx имела 22 000 загрузок в неделю и была взломана 14 мая. Последнее обновление для библиотеки было загружено на Python Package Index (PyPI) в декабре 2014 года. Получив контроль над библиотекой, злоумышленники загрузили свои версии - 0.1.2 (последнюю версию оригинала), 0.2.2 и 0.2.6, включающие в себя функционал для кражи и передачи данных на серверы хакеров.
Одна из версий была нацелена на получение идентификатора ключа доступа AWS, имени компьютера и секретного ключа доступа AWS при создании словаря. Другая вредоносная версия ctx пыталась получить все переменные среды жертвы.
Второй скомпрометированной библиотекой стала PHPass - портативная PHP-система для хеширования паролей. Оригинальная PHPass была удалена в сентябре 2021 года вместе с учетной записью разработчика, но злоумышленники смогли восстановить доступ к проекту на GitHub.
На 25 мая 2022 года обе взломанные библиотеки удалены. Специалисты рекомендуют разработчикам проверить версии недавно загруженных пакетов ctx и PHPass и в случае обнаружения вредоносной версии немедленно удалить ее с устройства.[5]
2020: Второе место в рейтинге TIOBE
Язык программирования Python сумел обогнать по популярности Java и впервые за свою историю занять второе место в рейтинге TIOBE. Об этом стало известно 5 ноября 2020 года. Сам рейтинг существует с 2003 г.
В рейтинге TIOBE за ноябрь 2019 г. Java был на первом месте, а Python довольствовался третьим. Популярность Java за год упала на 4,57%, а спрос на Python возрос на 2,27%. Но пока эти языки «спорили» за «серебро», победу в актуальном рейтинге TIOBE одержал язык C.
Как пишет портал ZDnet, всплеск популярности Python может быть связан с наращиванием темпов развития тех областей, где он применяется чаще всего. В качестве примеры были приведены Data Mining, численные вычисления и машинное обучение. Генеральный директор TIOBE Пол Янсен (Paul Jansen) полагает, что интерес к Python основан еще и на том, что если раньше программированием занимались, в основном, инженеры, то теперь этот навык «требуется почти повсюду, а хороших разработчиков ПО не хватает».
Недавний всплеск популярности Python вызван тем, что он достаточно прост для использования непрограммистами, а не является языком только для продвинутых программистов, – отметил Пол Янсен. |
Если в рейтинге TIOBE на ноябрь 2020 г. Python занимал лишь вторую строчку, то, по версии сотрудников Института инженеров электротехники и электроники (Institute of Electrical and Electronics Engineers, IEEE), равных ему нет. В июле 2020 г. они опубликовали собственный рейтинг популярности языков программирования, где первая тройка состоит из тех же участников, что и в перечне TIOBE, вот только расположены они совершенно иначе.
В рейтинге IEEE Python удерживает первое место, а Java находится на втором. Языку С приходится довольствоваться «бронзой»[6].
Языки программирования
Примечания
- ↑ В Python устранена уязвимость в реализации TLS
- ↑ Выпуск языка программирования Python 3.11
- ↑ Уязвимость 15-летней давности в Python затрагивает 350 тыс. проектов
- ↑ В библиотеки языка Python внедрили хакерское ПО, ворующее ключи к облаку Amazon
- ↑ Был взломан популярный Python-пакет: данные тысяч разработчиков в опасности
- ↑ Python впервые в истории стал популярнее Java
Подрядчики-лидеры по количеству проектов
Солар (ранее Ростелеком-Солар) (46)
Финансовые Информационные Системы (ФИС, FIS, Финсофт) (15)
Форсайт (11)
Axiom JDK (БеллСофт) ранее Bellsoft (10)
Бипиум (Bpium) (10)
Другие (393)
Солар (ранее Ростелеком-Солар) (8)
Финансовые Информационные Системы (ФИС, FIS, Финсофт) (4)
Консом групп, Konsom Group (КонсОМ СКС) (2)
ЛАНИТ - Би Пи Эм (Lanit BPM) (2)
IFellow (АйФэлл) (2)
Другие (30)
Солар (ранее Ростелеком-Солар) (10)
Banks Soft Systems, BSS (Бэнкс Софт Системс, БСС) (3)
Форсайт (3)
Cloud.ru (Облачные технологии) ранее SberCloud (2)
КРИТ (KRIT) (2)
Другие (13)
Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров
Солар (ранее Ростелеком-Солар) (2, 48)
Microsoft (41, 47)
Oracle (49, 26)
Hyperledger (Open Ledger Project) (1, 23)
IBM (33, 18)
Другие (607, 308)
Солар (ранее Ростелеком-Солар) (1, 8)
Финансовые Информационные Системы (ФИС, FIS, Финсофт) (1, 4)
Microsoft (4, 3)
Oracle (2, 3)
SAP SE (2, 2)
Другие (16, 19)
Солар (ранее Ростелеком-Солар) (1, 11)
Форсайт (1, 3)
Banks Soft Systems, BSS (Бэнкс Софт Системс, БСС) (1, 3)
Cloud.ru (Облачные технологии) ранее SberCloud (1, 2)
Сбербанк (1, 2)
Другие (9, 9)
Солар (ранее Ростелеком-Солар) (1, 6)
Unlimited Production (Анлимитед Продакшен, eXpress) (1, 6)
МТС Exolve (Межрегиональный ТранзитТелеком, МТТ) (1, 4)
Мобильные ТелеСистемы (МТС) (1, 4)
SL Soft (СЛ Софт) (1, 3)
Другие (14, 24)
Unlimited Production (Анлимитед Продакшен, eXpress) (1, 4)
Мобильные ТелеСистемы (МТС) (2, 3)
Солар (ранее Ростелеком-Солар) (1, 3)
МТС Exolve (Межрегиональный ТранзитТелеком, МТТ) (1, 2)
Naumen (Наумен консалтинг) (1, 1)
Другие (14, 14)
Распределение систем по количеству проектов, не включая партнерские решения
Solar appScreener (ранее Solar inCode) - 48
Hyperledger Fabric - 23
Windows Azure - 20
FIS Platform - 15
EXpress Защищенный корпоративный мессенджер - 12
Другие 328
Solar appScreener (ранее Solar inCode) - 8
FIS Platform - 4
Java - 2
Турбо X - 2
Парадокс: MES Builder - 2
Другие 22
Solar appScreener (ранее Solar inCode) - 11
Форсайт. Мобильная платформа (ранее HyperHive) - 3
BSS Digital2Go - 3
Cloud ML Space - 2
Leroy Merlin Platformeco - 1
Другие 8