File size: 1,600 Bytes
9c1c0ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Security Model

## Public demo boundaries

- CSV and Parquet only.
- Configurable upload size, row and column limits.
- No arbitrary package installation.
- No LLM-generated code is executed in Streamlit or FastAPI.
- Artifact download paths are resolved beneath the configured artifact root.
- Secrets are read from environment variables and are excluded from Git.

## Optional calculation worker

The worker is not required by the main analysis. If enabled, it accepts expressions—not
statements or programs—and applies AST validation before evaluation with empty built-ins.
The Docker Compose profile additionally applies:

- `network_mode: none`
- read-only root filesystem
- `no-new-privileges`
- all Linux capabilities dropped
- 256 MB memory limit
- 0.5 CPU limit
- PID limit
- `noexec` temporary filesystem

This is defense in depth, not a guarantee that Python is a perfect untrusted-code sandbox.
For high-risk multi-tenant operation, place jobs in short-lived microVMs or a managed sandbox.

## Production checklist

- Replace SQLite with PostgreSQL.
- Store artifacts in a private object store with expiring signed URLs.
- Add authentication, tenant isolation, rate limiting and audit retention.
- Scan images and dependencies in CI.
- Encrypt uploads at rest and define deletion/retention policies.
- Complete privacy, fairness and domain-specific legal review.

## Reporting vulnerabilities

Do not open a public issue for sensitive vulnerabilities. Contact the repository owner
privately with reproduction steps and affected versions.