TarGz Validations#
Why security checks are needed#
TAR.GZ archives can embed zip bombs, path-traversal payloads (../), oversized members, symlinks, device nodes, or excessively deep directory trees. Validating an archive before extraction or further processing prevents resource exhaustion, arbitrary file writes, and other attacks that would otherwise occur only at extraction time.
Capabilities#
The validator enforces configurable limits on:
compressed file size
GZip decompression ratio (zip-bomb protection)
number of TAR members
total extracted size
individual file size
filename / path length
directory nesting depth
The validator also has the capabilities to reject or protect:
Path Traversal Protection
The function validates member names against a temporary base path to ensure nothing escapes the intended extraction directory. So it prevents extracting outside target directory.Special Files Rejected
The function also rejects symlinks/hardlinks/devices/FIFOs” intar.gzfiles.
Usage Options#
Parameters#
Parameter |
Description |
|---|---|
|
path (local or remote) to the |
|
Maximum size (in bytes) of the compressed |
|
Maximum compression ratio (uncompressed / compressed size). Protects against bombs. |
|
Maximum number of members (files + directories) in the archive. |
|
Maximum total size (in bytes) of all extracted content. |
|
Maximum size (in bytes) of any single file inside the archive. |
|
Maximum length of any filename or path component. |
|
Maximum nesting depth of directories inside the archive. |
Defaults#
Global default fallbacks:
DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024 # 10 MB
DEFAULT_MAX_UNCOMPRESSED_RATIO = 100 # 100:1 ratio
DEFAULT_MAX_TAR_MEMBERS = 1000
DEFAULT_MAX_TOTAL_EXTRACTED_SIZE = 100 * 1024 * 1024 # 100 MB
DEFAULT_MAX_INDIVIDUAL_FILE_SIZE = 10 * 1024 * 1024 # 10 MB
DEFAULT_MAX_FILENAME_LENGTH = 255
DEFAULT_MAX_DIRECTORY_DEPTH = 50
How to use the checks#
Decorator mode – validate the path argument of a function before it runs:
@validate_tar_gz
def process(archive_path):
...
@validate_tar_gz(max_tar_members=50, max_file_size=10_000_000)
def process(archive_path):
...
Direct / CLI mode – validate immediately and obtain a boolean result:
ok = validate_tar_gz("data.tar.gz", max_uncompressed_ratio=20)
Failures raise TarValidationError in decorator mode and return False (with a printed message) in direct mode.