Sandbox environment for executing Python code
Project description
Python Sandbox
This python sandbox uses wasmer to execute untrusted python code in a sandbox. It is expiremental and limited in functionality. This was designed to be used in an assignment autograder.
Components
- Rust WASM layer
- RustPython is used as a dependency in the rust part of this library. RustPython doesn't aim to create sandboxed environments but we can create a simple API for interacting with it while it is being run in a
wasm32-wasiruntime which would effectively sandbox it. - We use WAI to generate glue implementations that we can use to interop between a regular Python environment and RustPython.
- RustPython is used as a dependency in the rust part of this library. RustPython doesn't aim to create sandboxed environments but we can create a simple API for interacting with it while it is being run in a
- Python Layer
- The Python bindings are also generated with WAI and a helper is provided for setup.
Development
You will need Rust and wai-bindgen installed from WAI.
- To compile the Rust code to a WASI binary, run
cargo build --release --target wasm32-wasi- Replace
py_sandbox/py_sandbox.wasmwithtarget/wasm32-wasi/release/py_sandbox.wasmafter building to see changes.
- Replace
- To build new
bindings.pyfromsandbox.wai, runwai-bindgen wasmer-py --import ./sandbox.wai
Usage
from wasm_py_sandbox import create_sandbox
# each sandbox has its own memory.
sandbox = create_sandbox()
# returns stdout/err
stdout = sandbox.exec("""
def hello(x):
return x + 5
""")
# result has both stdout/err and return value
result = sandbox.eval("2+2")
print(result.value.value)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
wasm_py_sandbox-0.1.1.tar.gz
(3.5 MB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wasm_py_sandbox-0.1.1.tar.gz.
File metadata
- Download URL: wasm_py_sandbox-0.1.1.tar.gz
- Upload date:
- Size: 3.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73f11645ffc92211aed994d44538547355b75993cc468cad94d087107e5c83a2
|
|
| MD5 |
8b4fc62e5236876de68e6be27883aef6
|
|
| BLAKE2b-256 |
9aa56466821c56b73de3494a7d95240a3152d945b2c9da0ae86d78926143ef38
|
File details
Details for the file wasm_py_sandbox-0.1.1-py3-none-any.whl.
File metadata
- Download URL: wasm_py_sandbox-0.1.1-py3-none-any.whl
- Upload date:
- Size: 3.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4989f407bd3ebbb108601e28fe5f426a47bc12df422b7eeefa120d34b35b512d
|
|
| MD5 |
c7f9cb4d10f5c530fd0915f5aad32e20
|
|
| BLAKE2b-256 |
1a266254051a77dbec826c100b3a19a085d21856c2449c0a10b6e7ff9d9d44ef
|