Content Security Policy add-on for Pyramid.
Project description
pyramid-csp
pyramid-csp is a simple Pyramid add-on for adding a Content-Security-Policy header your HTTP responses
For more information on Content Security Policies, see https://content-security-policy.com/
Setup
There are two ways of including pyramid-csp in your application:
The first is adding pyramid_csp to the pyramid.includes section of your application settings.
[app:main]
pyramid.includes = pyramid_csp
The second is using the Configurator.include function.
config.include("pyramid.csp")
Basic Usage
The most basic usage of pyramid-csp is to set the csp.policy setting.
This setting should be a valid CSP and will be added to the response headers.
[app:main]
csp.policy = default-src https://example.com
>> curl -i http://localhost:8000
...
Content-Security-Policy: default-src https://example.com
...
You can also create a policy by programmatically adding sources with the add_csp_source configuration method.
(This will work in addition to the csp.policy setting.)
The first argument is the directive name
config.add_csp_source("default-src", "'self'")
>> curl -i http://localhost:8000
...
Content-Security-Policy: default-src https://example.com 'self'
...
The request object also contains an add_csp_source method,
which works the same as the configurator method but will only add the source for that request.
def myview(context, request):
nonce = secrets.token_urlsafe()
request.add_csp_source("default-src", f"'nonce-{nonce}'")
return Response(body="<h1>Hello</h1>", content_type="text/html")
Note: If no sources are defined for the default-src directive, 'none' is automatically added.
Preset Sources
pyramid-src provides the CSPSources object, which contains several preset sources.
For example:
from pyramid_csp import CSPSources
def includeme(config):
config.add_csp_source("default-src", CSPSources.UNSAFE_EVAL)
The CSPSources object has the following properties:
WILDCARD—*NONE—'none'SELF—'self'DATA—data:HTTPS—https:UNSAFE_INLINE—'unsafe-inline'UNSAFE_EVAL—'unsafe-eval'STRICT_DYNAMIC—'strict-dynamic'UNSAFE_HASHES—'unsafe-hashes'
The object also offers several methods for generating sources:
https(domain)—https://{domain}nonce(nonce)—'nonce-{nonce}'hash(alg, h)—'{alg}-{h}'(hshould be a binary hash digest or a base64-encoded string. If binary, it will be base64-encoded.)sha256(h)—'sha256-{h}'sha384(h)—'sha384-{h}'sha512(h)—'sha512-{h}'
Nonces
pyramid-csp adds a csp_nonce property to the request object,
containing a crytographically secure random nonce token.
If accessed, the nonce token will be added to the CSP.
def myview(context, request):
body = '<script nonce="{ request.csp_nonce }">alert("Hello!");</script>'
return Response(body=body, content_type="text/html")
>> curl -i http://localhost:8000/
...
Content-Security-Policy: default-src 'nonce-ZtynG2MXgOPkqWgHyqf8wrR8jOeprIA2qDMKJuOfEXw'
...
<script nonce="ZtynG2MXgOPkqWgHyqf8wrR8jOeprIA2qDMKJuOfEXw">alert("Hello!")</script>
By default, the nonce will only be added to the default-src directive.
To add it to a different directive, use the csp.nonce_directives setting.
Multiple directives can be separated with a comma.
[app:main]
csp.nonce_directives = script-src, style-src
def myview(context, request):
body = '<script nonce="{ request.csp_nonce }">alert("Hello!");</script>'
return Response(body=body, content_type="text/html")
>> curl -i http://localhost:8000/
...
Content-Security-Policy: default-src 'none'; script-src 'nonce-vyjGpdvTnH6x7-eL-RvVMmxx4KNMTfX9WoLdmgijv2c'; script-src 'nonce-vyjGpdvTnH6x7-eL-RvVMmxx4KNMTfX9WoLdmgijv2c'
...
<script nonce="vyjGpdvTnH6x7-eL-RvVMmxx4KNMTfX9WoLdmgijv2c">alert("Hello!")</script>
For more information CSP nonces, see https://content-security-policy.com/nonce/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyramid-csp-0.1.0.tar.gz.
File metadata
- Download URL: pyramid-csp-0.1.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e43cef4a2c131305644e41e6709998b6fd61cc9e631c648abe33dd7d851540c
|
|
| MD5 |
652948e3179143ffa88dcd0266222d0d
|
|
| BLAKE2b-256 |
62af61ca7780c8d7bb9dc1c080242a40581d47a87ebff87c3bf8715284a9616f
|
File details
Details for the file pyramid_csp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pyramid_csp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6038cbaea48b308c8b52b318a0fd6e22e861ac86fa8b83cd2dc2f46d59926389
|
|
| MD5 |
5b62f23698017a5603bfa6fd0df649f7
|
|
| BLAKE2b-256 |
4ffbb77f7c76e3a90e5fdd49df2a24e80d199ffdef5c166908d5347e90841390
|