Авторка: Катерина Іваненко, Invicti & Mend.io Brand Manager
Python сьогодні широко використовується для вебзастосунків, однак він не захищений від проблем безпеки.
У цій статті перелічено поширені вразливості цієї мови програмування та основні методи їх запобігання, щоб ви могли взяти під контроль безпеку своїх застосунків.
Ін’єкції
Ін’єкція – це вразливість, через яку застосунок помилково обробляє потенційно небезпечні дані користувача так, ніби вони є командами або кодом.
Приклади: SQL-ін’єкція, ін’єкція коду, ін’єкція команд, міжсайтовий скриптинг (XSS).
Ін’єкція зазначена в поточній редакції OWASP Top 10 (2025) як один із вагомих ризиків.
Надійний спосіб запобігання таким вразливостям полягає в забезпеченні розділення даних від команд і запитів.
Рекомендований підхід – використовувати безпечний API, який або уникає прямої взаємодії з інтерпретатором, або підтримує параметризовані запити, або спирається на інструменти об’єктно-реляційної проєкції (Object Relational Mapping, ORM).
Однак сама лише параметризація не усуває ризик повністю.
Збережені процедури все ще можуть призводити до SQL-ін’єкцій, якщо PL/SQL або T-SQL об’єднує запити й дані, або виконує небезпечні дані за допомогою EXECUTE IMMEDIATE чи exec().
Коли повне розділення даних і команд неможливе, ризик можна зменшити за допомогою додаткових заходів:
- Застосування суворого списку дозволених значень на стороні сервера для перевірки вхідних даних. Це не слід розглядати як повноцінний захисний механізм, оскільки багато застосунків повинні приймати спеціальні символи.
- Екранування спеціальних символів із використанням специфічного синтаксису екранування для відповідного інтерпретатора у випадку залишкових динамічних запитів. Структури SQL, такі як назви таблиць, не можна екранувати, тому назви, надані користувачами, є потенційно небезпечними.
Небезпечна десеріалізація
Це вразливість, яка виникає, коли застосунок отримує дані та реконструює (десеріалізує) їх в об’єкт без належної перевірки. Цей недолік належить до A08:2025 – Порушення цілісності ПЗ або даних в OWASP Top 10.
Механізм pickle у Python є класичним прикладом небезпечного механізму десеріалізації, якщо він використовується з недовіреними даними.
Це може призвести до виконання зловмисного коду, маніпуляцій з об’єктами, ін’єкцій або обходу контролю доступу.
Найбезпечніший підхід – уникати приймання серіалізованих об’єктів із недовірених джерел або використовувати формати серіалізації, які дозволяють лише примітивні типи даних.
Коли це неможливо, OWASP рекомендує такі заходи контролю:
- Застосування перевірок цілісності, наприклад цифрових підписів, для серіалізованих об’єктів.
- Примусове застосування суворих обмежень типів під час десеріалізації перед створенням об’єктів.
- Ізоляція та запуск коду, який виконує десеріалізацію, у середовищах із низькими привілеями, коли це можливо.
- Логування помилок і винятків десеріалізації.
- Обмеження або моніторинг вхідних і вихідних мережевих з’єднань із контейнерів або серверів, які виконують десеріалізацію.
- Моніторинг десеріалізації та налаштування сповіщень, якщо користувач постійно виконує десеріалізацію.
Обхід каталогу
Обхід каталогу, також відомий як directory traversal або path traversal, – це вразливість, яка дозволяє зловмисникам отримувати доступ і переглядати файли з обмежених областей сервера.
Вона належить до найнебезпечнішої категорії OWASP Top 10 – Порушений контроль доступу.
Їхні рекомендації щодо запобігання містять наступні заходи:
- Не покладатися на дані, надані користувачем, під час використання викликів файлової системи.
- Застосовувати індекси замість реальних фрагментів назв файлів під час роботи з шаблонами або файлами мов.
- Формувати шлях у коді застосунку та вставляти лише суворо контрольовані значення від користувачів там, де це необхідно.
- Перевіряти вхідні дані користувача за допомогою списків дозволених значень.
- Використовувати chroot jail середовища (механізм ізоляції процесу в Unix/Linux-системах, коли для програми штучно змінюється кореневий каталог) та політики доступу коду, щоб обмежити місця, з яких файли можуть бути отримані або куди вони можуть бути збережені.
- Нормалізовувати дані, надані користувачем, якщо їх необхідно використовувати в операціях із файлами.
Вразливі та застарілі залежності
Застосунки на Python зазвичай залежать від багатьох сторонніх пакетів. Одна вразлива залежність може поставити під загрозу весь додаток, особливо коли бібліотеки обробляють автентифікацію, криптографію або файли.
Для зниження ризику рекомендовано застосовувати такі кроки:
- Підтримання інвентаризації бібліотек, тобто SBOM (Software Bill of Materials).
- Зменшення поверхні атаки шляхом видалення потрібних залежностей.
- Використання надійних джерел під час пошуку нових пакетів.
Як виявити ці вразливості
Зрештою, єдиний спосіб точно дізнатися, чи мають ваші застосунки зазначені вище вразливості, – це тестування безпеки.
Для цієї мети зазвичай використовують такі автоматизовані інструменти:
- SAST – пошук вразливостей у вихідному коді.
- DAST – безпечна імітація дій зловмисника під час виконання застосунку.
- SCA – перевірка безпеки бібліотек.
Найкращий варіант – використовувати всі ці інструменти, оскільки SAST може виявляти проблеми на ранніх етапах розробки, DAST може перевіряти їх у середовищі виконання та знаходити складніші вразливості, а SCA забезпечує покриття компонентів.
Якщо ви хочете безкоштовно протестувати такі інструменти, залиште свої контактні дані нижче, і ми зв’яжемося з вами.







