PRO_PYTHON_CODE Telegram 1849
🧠 Сложная и интересная задача для 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 и интерпретаторов



tgoop.com/pro_python_code/1849
Create:
Last Update:

🧠 Сложная и интересная задача для 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 и интерпретаторов

BY Python RU


Share with your friend now:
tgoop.com/pro_python_code/1849

View MORE
Open in Telegram


Telegram News

Date: |

A Hong Kong protester with a petrol bomb. File photo: Dylan Hollingsworth/HKFP. The Standard Channel Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram. Channel login must contain 5-32 characters Avoid compound hashtags that consist of several words. If you have a hashtag like #marketingnewsinusa, split it into smaller hashtags: “#marketing, #news, #usa.
from us


Telegram Python RU
FROM American