Skip to main content

fastapi-armor logo

Secure your FastAPI apps with a single line of code 🛡️

fastapi-armor is a security middleware that sets modern HTTP security headers for every response. It provides presets for common configurations (strict, relaxed, none) and allows overrides for full customization.


PyPI version Total downloads

🚀 Features

  • 📦 Simple plug-and-play integration with FastAPI
  • 🛡️ Protects your app with modern HTTP security headers
  • ⚙️ Fully customizable settings
  • 🧱 Built on top of Starlette and fully async

📦 Installation

Install via pip:

pip install fastapi-armor

⚙️ Usage Example

Here’s how to use ArmorMiddleware in a FastAPI application:

from fastapi import FastAPI
from fastapi_armor.middleware import ArmorMiddleware

app = FastAPI()

app.add_middleware(
    ArmorMiddleware,
    preset="strict",  # apply secure default set
    permissions_policy="geolocation=(), microphone=()"  # optionally override specific header
)

@app.get("/")
async def read_root():
    return {"message": "FastAPI with Armor Middleware is running!"}

▶️ Running the App

To run this FastAPI app locally using uvicorn, first install the required packages:

pip install fastapi uvicorn

Then start the app:

uvicorn example.main:app --reload

Visit your app at http://127.0.0.1:8000

You can inspect the HTTP headers in the browser or via curl:

curl -I http://127.0.0.1:8000

🎛️ Available Presets

You can use built-in presets to quickly apply a set of secure headers. These presets are designed for different use cases:

Preset Description
strict Applies all recommended security headers with strict values for maximum protection.
relaxed Applies a lighter set of headers suitable for more flexible or development environments.
none Disables all headers. Useful for debugging or local development where security is not a concern.

You can also override any individual header even when using a preset:

app.add_middleware(
    ArmorMiddleware,
    preset="strict",
    permissions_policy="geolocation=(), microphone=()"
)

🦩 Header Parameter Mapping

This table shows how to customize headers in the middleware by mapping FastAPI-Armor's parameter names to actual HTTP header fields:

Middleware Parameter Header Set Example Value
content_security_policy Content-Security-Policy "default-src 'self'; img-src *;"
frame_options X-Frame-Options "DENY" or "SAMEORIGIN"
hsts Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
x_content_type_options X-Content-Type-Options "nosniff"
referrer_policy Referrer-Policy "no-referrer" or "strict-origin"
permissions_policy Permissions-Policy "geolocation=(), microphone=()"
dns_prefetch_control X-DNS-Prefetch-Control "off" or "on"
expect_ct Expect-CT "max-age=86400, enforce"
origin_agent_cluster Origin-Agent-Cluster "?1" or "?0"
cross_origin_embedder_policy Cross-Origin-Embedder-Policy "require-corp"
cross_origin_opener_policy Cross-Origin-Opener-Policy "same-origin" or "unsafe-none"
cross_origin_resource_policy Cross-Origin-Resource-Policy "same-origin", "same-site", or "cross-origin"

Use these parameter names when configuring the middleware. For example, permissions_policy="geolocation=()" will set the Permissions-Policy HTTP header.


🛡️ Included Headers & Their Purpose

By default or optionally, ArmorMiddleware can apply the following headers:

Header Description
Content-Security-Policy Mitigates XSS and data injection attacks by specifying allowed content sources.
X-Frame-Options Prevents clickjacking by disallowing rendering inside <iframe>.
Strict-Transport-Security Forces use of HTTPS for future requests, helping prevent man-in-the-middle attacks.
X-Content-Type-Options Disables MIME-type sniffing to avoid content-type confusion.
Referrer-Policy Controls the Referer header sent in requests — reduces accidental info leakage.
Permissions-Policy Limits access to browser APIs like geolocation, camera, microphone, etc.
X-DNS-Prefetch-Control Prevents browsers from resolving DNS of external domains before user interaction.
Expect-CT Ensures valid Certificate Transparency logs for HTTPS connections.
Origin-Agent-Cluster Provides context isolation for enhanced privacy and safety.
Cross-Origin-Embedder-Policy (COEP) Blocks loading resources unless they explicitly allow being embedded.
Cross-Origin-Opener-Policy (COOP) Helps isolate browsing contexts to prevent cross-window attacks.
Cross-Origin-Resource-Policy (CORP) Restricts which origins can load resources from your site.

📚 Standards References

For more details on these headers and their standard definitions, refer to the following official resources:

Official Standards & Specifications

Security Organizations & Best Practices

Documentation & Practical Implementation

These resources represent officially accepted standards, specifications, and industry best practices for implementing security headers in modern web applications.


👥 Contributors

Special thanks to the following contributors who have helped improve this project:

If you'd like to contribute, please feel free to submit a pull request!


📄 License

This project is licensed under the MIT License. © 2025 Inan Delibas

Metadata

Release files for fastapi-armor 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-armor 1.0.2
File Size Uploaded
fastapi_armor-1.0.2.tar.gz 1.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-armor 1.0.2
File Interpreter ABI Platform
fastapi_armor-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 1.4 MB

Release files / fastapi_armor-1.0.2.tar.gz

Download URL fastapi_armor-1.0.2.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
06cf0bfc3df62db5320f01ca272b4c94e79e5b07a100ae6642d1426d80817b9e
BLAKE2b-256 checksum
How to use checksums
69b60a805134c7ddea4a969cf93159b56aa85c44159db5391d209c2d1a12f131
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.6

Release files / fastapi_armor-1.0.2-py3-none-any.whl

Download URL fastapi_armor-1.0.2-py3-none-any.whl
Size 6.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95e720c3eb2a6b0000aaadfc299eea2eba72f4495dd022fe2eb9a81a3c815b97
BLAKE2b-256 checksum
How to use checksums
dcab3bfcbf4c73b146ca36699780b66a7c72e33520520b42b2ea332e91687d9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.0

2 release files

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