Русский
Веб-версияОткрыть в Telegram

Пост🧠 Сложная и интересная задача для Python-инженеров:

25 июня 2025
P
Python RU
🧠 Сложная и интересная задача для Python-инженеров: "Запусти чужой Python-код... но так, чтобы он не сломал твой сервер" Представь, ты разрабатываешь платформу, где пользователи могут запускать произвольные Python-скрипты: например, в формате онлайн-компилятора, песочницы для тестов, или генератора графиков. 📌 Условия задачи: Ты должен написать систему, которая: • Принимает произвольный Python-код от пользователя • Выполняет его безопасно и изолированно • Ограничивает время выполнения до 2 секунд • Ограничивает память до 128 MB • Блокирует доступ к файловой системе, сети, subprocess, fork • Возвращает stdout, stderr и статус выполнения 🛡️ Безопасность — ключ: • Скрипт может попытаться сделать os.remove('/'), import socket, while True: и т.п. • Ваша система не должна пострадать. Даже если кто-то пошлёт fork-бомбу или запросит весь RAM. 📦 Технические ограничения: • Решение должно быть на Python • Можно использовать Docker, podman, или Firecracker — но обоснуй выбор • Стандартная библиотека разрешена, но доступ к os, sys.modules, inspect, eval, __import__ — должен быть отключён или переопределён • Никаких внешних HTTP-запросов, файловых сокетов или pip install 🔧 Что ожидается: 1. Функция запуска: result = run_code_safely(code="print(2 + 2)") # result = { "stdout": "4\n", "stderr": "", "exit_code": 0, "status": "ok" } Изоляция среды: • Вариант 1: через запуск контейнера с ограничениями (docker run --rm --net=none --memory=128m) • Вариант 2: через Firejail / chroot / seccomp / AppArmor профили • Вариант 3: через интерпретатор Python внутри subprocess с ограничениями через resource, signal, ast и multiprocessing.Process Блокировка опасных импортов и функций: • Запретить import os, import subprocess, import, eval, exec, open, globals() • Пример: AST-парсер удаляет запрещённые ноды до запуска Обработка ошибок и ограничений: • TimeoutExceededError — если код работает > 2 сек • MemoryLimitError — если процесс превысил лимит • SecurityViolation — при попытке запрещённого импорта или доступа Опционально — FastAPI API: POST /run { "code": "for i in range(10): print(i)" } → Ответ: { "stdout": "0\n1\n2\n...\n", "stderr": "", "status": "ok", "time": 0.032 } 🎯 Цель: Собрать систему, которая запускает потенциально опасный код от незнакомцев — и не падает, не зависает, не открывает доступ к хосту. 🤯 Challenge: • Как отследить попытку from os import system? • Что делать с __import__('os').system('ls')? • Как гарантировать остановку при while True: pass? • Как контролировать память на уровне Python? ✅ Если решишь — ты разберёшься с: • AST-парсингом и безопасностью исполнения Python • Управлением ресурсами (CPU, RAM, время) на уровне ОС • Изоляцией через контейнеры и sandbox-окружения • Построением безопасных API и интерпретаторов
❤9👍4👎2🥰1🔥1
32 · 2.6K ·

Рядом в ленте

PPython RU🧠 BREAKING: MIT опубликовал первое исследование мозга пользователей ChatGPT Результаты звучат тревожно: > 🧪 У пользователей наблюдаются измеримые изменения в моPPython RU✔️ OpenAI выложили в открытый доступ Customer Service Agent Demo Теперь у всех есть пример, как сделать продакшн-агентов с маршрутизацией, безопасностью и интер
это сообщение
PPython RU🧬 Genesys: Language Modeling by Language Models Проект от Allen Institute — Genesys (Genetic Discovery System) — это распределённая эволюционная система, в котоPPython RUWondera AI ии, который генерирует полноценные треки за минуту и заметно обходит конкурентов по качеству. Вы можете создавать, редактировать и выпускать музыку б
PPython RUPython RU@pro_python_code · канал · Технологии
12 331подписчиков716средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем