Skip to main content

Setting up security-relevant response headers in FastAPI

Project description

bacinet

Helmet-like http response Headers for FastAPI.

This is alpha software lacking testing and proper documentation. Use at your own risk!

Basic usage

Install package via pip install bacinet.

In your code, import apply from the package and add it as a middleware to your app:

from bacinet import apply
from fastapi import FastAPI, Request

app = FastAPI()


@app.middleware("http")
async def add_bacinet(request: Request, call_next):
    response = await call_next(request)
    apply(response.headers)
    return response

Alternatively, you can use an ASGI-conformant Middlware:

from bacinet import BacinetMiddleware


app = FastAPI()


app.add_middleware(BacinetMiddleware)

To change the default options, import and change the options dictionary from bacinet:

from bacinet import options

options["X-DNS-Prefetch-Control"] = "on"

You can also import individual header functions (like x_download_options) and apply those on your own applicator function that can be provided to BacinetMiddleware's constructor.

Headers

In it's standard form, the following headers will be set or removed by the middleware:

Header Default Description
Origin-Agent-Cluster ?1 https://github.com/WICG/origin-agent-cluster
X-Content-Type-Options nosniff Prevents MIME type sniffing attacks
X-XSS-Protection 1 Enables XSS filtering and page sanitation in the browser
X-Powered-By removed Header gets removed to hinder server identification
X-Download-Options noopen Prevent automated opening of downloads in legacy browsers
X-DNS-Prefetch-Control off Prevents general DNS prefetching for links
Cross-Origin-Resource-Policy same-origin disallow cross-origin no-cors requests
X-Frame-Options DENY Deny embedding in other sited
Cross-Origin-Opener-Policy same-origin Deny sharing browsing context with cross-origin documents
X-Permitted-Cross-Domain-Policies none Disallow document embedding of the resource
Cross-Origin-Embedder-Policy require-corp https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy
Referrer-Policy no-referrer Do not send referrer headers
Content-Security-Policy see below Restrict resource access
Strict-Transport-Security maxAge=15552000;includeSubDomains Make sure that the site is only accessed via https

Default content-security policies

The following content-security policies are applied in the default setting:

  • default-src 'self';base-uri 'self'
  • font-src 'self' https: data:
  • form-action 'self'
  • frame-ancestors 'self'
  • img-src 'self' data:
  • object-src 'none'
  • script-src 'self'
  • script-src-attr 'none'
  • style-src 'self' https: 'unsafe-inline'
  • upgrade-insecure-requests

Project details


Download files

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

Source Distribution

bacinet-0.0.6.tar.gz (6.1 kB view details)

Uploaded Source

File details

Details for the file bacinet-0.0.6.tar.gz.

File metadata

  • Download URL: bacinet-0.0.6.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for bacinet-0.0.6.tar.gz
Algorithm Hash digest
SHA256 6ead69ed77351731aab04b1feb9e36eb6f731e2d3dd62e4912320c2e4ad8dde8
MD5 9b2eb184d42121ddd265067e641bb06a
BLAKE2b-256 a70bfd0ba4d7fdd82119d09b8c556b113b4823738e6128c43f948d3a6660c36d

See more details on using hashes here.

Supported by

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