Skip to main content

uploadkit-security

Reusable security validators for UploadKit.

What problem does this solve?

Filename, extension, MIME, size, and checksum checks that plug into UploadPolicy.validators without modifying UploadKit Core.

When to use it

Use when uploads need a standard security validation stack.

When not to use it

  • Do not put antivirus here (see uploadkit-clamav).
  • Do not put image/PDF/office-specific checks here (see feature packages).

Installation

Requires Python 3.10+.

pip install uploadkit-security

For comprehensive MIME detection via libmagic:

pip install 'uploadkit-security[magic]'

System dependency (libmagic)

python-magic needs the OS libmagic library. Install it before using the [magic] extra:

OS Package
Ubuntu / Debian libmagic1
Fedora / RHEL file-libs
Alpine libmagic
macOS (Homebrew) libmagic
# Ubuntu / Debian
sudo apt install libmagic1

# Fedora / RHEL
sudo dnf install file-libs

# Alpine
sudo apk add libmagic

# macOS (Homebrew)
brew install libmagic

Without libmagic / python-magic, MIME checks still work via the built-in signature table for common types (images, PDF, ZIP/OOXML, etc.).

Quick Start

from uploadkit import Uploader, UploadPolicy
from uploadkit_security import ChecksumValidator, default_validators

policy = UploadPolicy(
    max_size=10 * 1024 * 1024,
    allowed_extensions=frozenset({"png", "jpg"}),
    allowed_mime_types=frozenset({"image/png", "image/jpeg"}),
    validators=default_validators(),
)
uploader = Uploader(policy, storage=my_storage)

Customize the validator stack

# All stock defaults
validators=default_validators()

# All stock defaults except checksum
validators=default_validators(exclude=ChecksumValidator)

# Only selected stock validators
validators=default_validators(include=(FileSizeValidator, FileNameValidator))

# Clear stock defaults — use only your own
validators=default_validators(include=(), extra=(MyValidator(), OtherValidator()))

# Mix stock + custom
validators=default_validators(
    include=(FileSizeValidator, ExtensionValidator),
    extra=(MyValidator(),),
)

# Or pass validators directly (no helper)
validators=(MyValidator(),)
validators=()  # no checks

Architecture

Validators implement the Core Validator protocol and attach side-channel attributes (uploader_mime_type, uploader_sha256) that Core reads when building UploadResult.

Separate async classes implement AsyncStreamingValidator for AsyncUploader (begin / feed / finalize) and write mime/sha256 onto UploadContext.

from uploadkit import UploadPolicy
from uploadkit_security import default_async_validators

policy = UploadPolicy(
    max_size=10 * 1024 * 1024,
    async_validators=default_async_validators(),
)

Public API

Symbol Kind
FileSizeValidator Public
ExtensionValidator Public
MimeTypeValidator Public
FileNameValidator Public
ChecksumValidator Public
default_validators Public
AsyncFileSizeValidator Public
AsyncExtensionValidator Public
AsyncMimeTypeValidator Public
AsyncFileNameValidator Public
AsyncChecksumValidator Public
default_async_validators Public
sanitize_filename / detect_mime_type Public

Changelog

See CHANGELOG.md.

Contributing

See CONTRIBUTING.md.

Metadata

Release files for uploadkit-security 0.2.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 uploadkit-security 0.2.1
File Size Uploaded Provenance
uploadkit_security-0.2.1.tar.gz 14.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for uploadkit-security 0.2.1
File Interpreter ABI Platform
uploadkit_security-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.8 kB

Release files / uploadkit_security-0.2.1.tar.gz

Download URL uploadkit_security-0.2.1.tar.gz
Size 14.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f95a5668570666e99e1866303ad28987d54c2196fa66b08739711dcca49372c7
BLAKE2b-256 checksum
How to use checksums
82e98e1f8fcb41d5a7ccb8f6f19c5bc361abfc75634a10ff5239f5720a6b7262
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / uploadkit_security-0.2.1-py3-none-any.whl

Download URL uploadkit_security-0.2.1-py3-none-any.whl
Size 12.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5e12d3efd8087590ffd904010afd554184f2701f4fd46828013d7936e7ce2bc2
BLAKE2b-256 checksum
How to use checksums
f5fae05d048f6d5c51eb47a260ee39a7f574703b7cce96b3ab6f612eb099cb80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for uploadkit-security 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files No provenance

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