While dynamoxy is 0.x, only the latest minor release receives security fixes.
Please report vulnerabilities privately through GitHub's "Report a vulnerability" (Security advisories) on the repository, or by email to hello@carloscar.com.
- Credentials come from the AWS credential chain unless
Credentialsare passed; their secrets are hidden inrepr()and never logged. Prefer IAM roles over static keys. - No payload logging. Events, logs, spans and metrics contain operation names, table and
index names, counts, durations, error codes and request ids, never item contents or key values.
Telemetry(record_expressions=True)adds expressions with placeholders only, never values.FieldErrorkeeps the offending value but leaves it out ofstr(). - No injection. All values in expressions are expression attribute values and all attribute
names are placeholders; PartiQL helpers take
?parameters. Never format user input into PartiQL statements ordynamoxy.condition()text. - Cursors are not signed.
page.cursoris base64url JSON of the last evaluated key. It can be decoded and forged by clients. Never derive authorization from a cursor; the partition key of a query must come from trusted code. Encrypt or sign cursors yourself if key values are sensitive. - Unique constraints rely on guard items that only dynamoxy maintains; other writers must not bypass them.
- Endpoints:
endpoint_urlmust behttp://orhttps://. Usehttp://only for local emulators; credentials are sent signed (SigV4), but item data travels in clear text over HTTP. - Dependencies: the Python package has no required dependencies; the Rust core uses the AWS SDK for Rust and Tokio. Wheels are built in GitHub Actions with build provenance attestations.