Skip to main content

A library that overrides the default behaviors of the requests library, and adds new security features.

Project description

Latest Version Supported Python Versions Supported Implementations

requests-hardened is a library that overrides the default behaviors of the requests library, and adds new security features.

Installation

The project is available on PyPI:

pip install requests-hardened

Features

  • SSRF Filters: blocks private and loopback IP ranges.

  • HTTP Redirects: can be used safely alongside the SSRF filter feature.

  • Proxy Support: proxies can be used in combination with SSRF Filters for a defense in depth.

  • Handy Overrides of Defaults: allows to enforce secure defaults globally, such as to mitigate DoS attacks.

Overrides of Defaults

This library allows to override some default values from the requests library that can have a security impact:

  • Config.never_redirect = False always reject HTTP redirects

  • Config.default_timeout = (2, 10) sets the default timeout value when no value or None is passed

  • Config.user_agent_override = None optional config to override User-Agent header. When set to None, requests library will set its default user-agent.

SSRF Filters

A SSRF IP filter can be used to reject HTTP(S) requests targeting private and loopback IP addresses.

Settings:

  • Config.ip_filter_enable whether or not to filter the IP addresses

  • ip_filter_allow_loopback_ips whether or not to allow loopback IP addresses

Proxy Support

The SSRF IP filter’s behavior with proxies are as follows:

  • Proxy’s IP Address: does not block private and loopback IP addresses (no filtering). Instead, the filter assumes that the proxy URL is never tainted with untrusted user input.

  • Target IP Address (Tunneled HTTP Requests): by default, the tunneled requests are filtered for potential SSRF attacks.

  • Protocols Supported: SOCKS4, SOCKS5, HTTP, and HTTPS proxy server protocols are supported.

Example Usage:

from requests_hardened import Config, Manager

http_manager = Manager(
    Config(
        default_timeout=(2, 10),
        never_redirect=False,
        # Enable SSRF IP filter
        ip_filter_enable=True,
        ip_filter_allow_loopback_ips=False,
    )
)

# List of proxies
proxies = {
  "https": "socks5://127.0.0.1:8888",
  "http": "socks5://127.0.0.1:8888",
}

# Sends the HTTP request using the proxy
resp = http_manager.send_request("GET", "https://example.com", proxies=proxies)
print(resp)

Full Example

from requests_hardened import Config, Manager

# Creates a global "manager" that can be used to create ``requests.Session``
# objects with hardening in place.
http_manager = Manager(
    Config(
        default_timeout=(2, 10),
        never_redirect=False,
        ip_filter_enable=True,
        ip_filter_allow_loopback_ips=False,
        user_agent_override=None
    )
)

# Sends an HTTP request without re-using ``requests.Session``:
resp = http_manager.send_request("GET", "https://example.com")
print(resp)

# Sends HTTP requests with reusable ``requests.Session``:
with http_manager.get_session() as sess:
    sess.request("GET", "https://example.com")
    sess.request("POST", "https://example.com", json={"foo": "bar"})

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

requests_hardened-1.3.0b1.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

requests_hardened-1.3.0b1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file requests_hardened-1.3.0b1.tar.gz.

File metadata

  • Download URL: requests_hardened-1.3.0b1.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for requests_hardened-1.3.0b1.tar.gz
Algorithm Hash digest
SHA256 ce68637de89c7ee7b7f62a94f589b5478ceeb832262c4fb0210d667e08b8a523
MD5 8c8c738458df227c4651f1bd3fc73a4f
BLAKE2b-256 9bb5416678b58d3743d92289f6c0d8309f8433ed981faa13233617c6c12ec07b

See more details on using hashes here.

Provenance

The following attestation bundles were made for requests_hardened-1.3.0b1.tar.gz:

Publisher: publish-pypi.yaml on saleor/requests-hardened

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file requests_hardened-1.3.0b1-py3-none-any.whl.

File metadata

File hashes

Hashes for requests_hardened-1.3.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 b64ec9dbbe42d0fc5c31f97ee67f9a161f439cbc6a106d8f72a1851725d116d9
MD5 5f47e6d67ee6fe61560d55c502af571c
BLAKE2b-256 99abc31192450edf796756d4388784abe0fd5e261783ae062b26f8813670bd68

See more details on using hashes here.

Provenance

The following attestation bundles were made for requests_hardened-1.3.0b1-py3-none-any.whl:

Publisher: publish-pypi.yaml on saleor/requests-hardened

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page