Skip to main content

Django Content Security Policy Reports

Build Status

A Django app for handling reports from web browsers of violations of your website's content security policy.

This app does not handle the setting of the Content-Security-Policy HTTP headers, but deals with handling the reports that web browsers may submit to your site (via the report-uri) when the stated content security policy is violated.

It is recommended that you use an app such as django-csp (Github) to set the Content-Security-Policy headers.

So What Does This Thing Do?

It receives the reports from the browser and does any/all of the following with them:

  • Logs them using the python logging module.
  • Sends them to you via email.
  • Saves them to the database via a Django model.
  • Runs any of your own custom functions on them.
  • Can generate a summary of a reports.

Supported Django Versions

Supports Python 3.8 to 3.12 and Django 3.2 to 5.x (latest).

The last version to support Python 2.7 was release 1.4 (or see the python2.7-support branch).

How Do I Use This Thing?

  1. Install this app into your Django project, e.g. pip install django-csp-reports.
  2. Add 'cspreports' to your INSTALLED_APPS.
  3. Include cspreports.urls in your URL config somewhere, e.g. urlpatterns = [path('csp/', include('cspreports.urls'))].
  4. In your Content-Security-Policy HTTP headers, set reverse('report_csp') as the report-uri. (Note, with django-csp, you will want to set CSP_REPORT_URI = reverse_lazy('report_csp') in settings.py).
  5. Set all/any of the following in settings.py as you so desire, hopefully they are self-explanatory:
    • CSP_REPORTS_EMAIL_ADMINS (bool defaults to True).

    • CSP_REPORTS_LOG (bool, whether or not to log the reporting using the python logging module, defaults to True).

    • CSP_REPORTS_LOG_LEVEL (str, one of the Python logging module's available log functions, defaults to 'warning').

    • CSP_REPORTS_SAVE (bool defaults to True). Determines whether the reports are saved to the database.

    • CSP_REPORTS_ADDITIONAL_HANDLERS (iterable defaults to []).

      • Each value should be a dot-separated string path to a function which you want be called when a report is received.
      • Each function is passed the HttpRequest of the CSP report.
    • CSP_REPORTS_FILTER_FUNCTION (str of dotted path to a callable, defaults to None).

      • If set, the specificed function is passed each HttpRequest object of the CSP report before it's processed. Only requests for which the function returns True are processed.
      • You may want to set this to "cspreports.filters.filter_browser_extensions" as a starting point.
    • CSP_REPORTS_LOGGER_NAME (str defaults to CSP Reports). Specifies the logger name that will be used for logging CSP reports, if enabled.

    • CSP_REPORTS_MODEL (<app_label>.<model_name> defaults to "cspreports.CSPReport"). Specifies the model to be used for storing the CSP reports. You can easily extend the model by implementing the abstract base class cspreports.models.CSPReportBase and adding your additional fields to it:

      # your_app.model.py
      from cspreports.models import CSPReportBase
      
      class CustomCSPReport(CSPReportBase):
          # Add your fields here
          pass
      
      # settings.py
      
      CSP_REPORTS_MODEL = "your_app.CustomCSPReport"
      
  6. Set a cron to generate summaries.
  7. Enjoy.

Commands

clean_cspreports

Deletes old reports from the database.

Options:

  • --limit - timestamp that all reports created since will not be deleted. Defaults to 1 week. Accepts any string that can be parsed as a datetime.

make_csp_summary

Generates a summary of CSP reports.

By default includes reports from yesterday (00:00:00 to midnight). The summary shows the top 10 violation sources (i.e. pages from which violations were reported), the top 10 blocked URIs (banned resources which the pages tried to load), and the top 10 invalid reports (which the browser provided an invalid CSP report).

Options:

  • --since - timestamp of the oldest reports to include. Accepts any string that can be parsed as a datetime.
  • --to - timestamp of the newest reports to include. Accepts any string that can be parsed as a datetime.
  • --top - limit of how many examples to show. Default is 10.

Release files for django-csp-reports 1.11.0

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

Source distribution (sdist)

Source distribution for django-csp-reports 1.11.0
File Size Uploaded
django_csp_reports-1.11.0.tar.gz 14.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-csp-reports 1.11.0
File Interpreter ABI Platform
django_csp_reports-1.11.0-py3-none-any.whl Python 3 none any Details

Total release size: 40.7 kB

Release files / django_csp_reports-1.11.0.tar.gz

Download URL django_csp_reports-1.11.0.tar.gz
Size 14.8 kB
Tags Source
SHA-256 checksum
How to use checksums
0b11aad311236e8d2a64b1f0063b16cbf33fb9ffa59f0736ed97681f359215b5
BLAKE2b-256 checksum
How to use checksums
2afb774ede062b10be4480321771b4343e25be75e74ac616b089df1bbc54cab4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / django_csp_reports-1.11.0-py3-none-any.whl

Download URL django_csp_reports-1.11.0-py3-none-any.whl
Size 25.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d9346558d310b435429bfb91300b90c0696679cd1cf47ad609028f7b5680629e
BLAKE2b-256 checksum
How to use checksums
6297f03c70a6b8dfd8c24384b0779051c9c42d43d1a9ef4a4a18ad4e14198171
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

1.11.0 This release

2 release files

1.10.0

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.1

1 release file

1.8

1 release file

1.7

1 release file

1.6

1 release file

1.5

1 release file

1.4

1 release file

1.3

1 release file

1.2

1 release file

1.1

1 release file

1.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