Skip to main content

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-wasi runtime 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.
  • 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.wasm with target/wasm32-wasi/release/py_sandbox.wasm after building to see changes.
  • To build new bindings.py from sandbox.wai, run wai-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)

Release files for wasm-py-sandbox 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wasm-py-sandbox 0.1.1
File Size Uploaded
wasm_py_sandbox-0.1.1.tar.gz 3.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for wasm-py-sandbox 0.1.1
File Interpreter ABI Platform
wasm_py_sandbox-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 7.0 MB

Release files / wasm_py_sandbox-0.1.1.tar.gz

Download URL wasm_py_sandbox-0.1.1.tar.gz
Size 3.5 MB
Tags Source
SHA-256 checksum
How to use checksums
73f11645ffc92211aed994d44538547355b75993cc468cad94d087107e5c83a2
BLAKE2b-256 checksum
How to use checksums
9aa56466821c56b73de3494a7d95240a3152d945b2c9da0ae86d78926143ef38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Release files / wasm_py_sandbox-0.1.1-py3-none-any.whl

Download URL wasm_py_sandbox-0.1.1-py3-none-any.whl
Size 3.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
4989f407bd3ebbb108601e28fe5f426a47bc12df422b7eeefa120d34b35b512d
BLAKE2b-256 checksum
How to use checksums
1a266254051a77dbec826c100b3a19a085d21856c2449c0a10b6e7ff9d9d44ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page