Drupal is a registered trademark of Dries Buytaert
Protected Pages 3.0.0 Major update available for module protected_pages (3.0.0). Commerce Core 3.3.8 Minor update available for module commerce (3.3.8). Search API HTML Element Filter 1.0.7 Minor update available for module search_api_html_element_filter (1.0.7). Layout Builder Reorder 2.0.1 Minor update available for module layout_builder_reorder (2.0.1). Ban 1.1.0 Minor update available for module ban (1.1.0). Field Formatter Range 2.0.0 Major update available for module field_formatter_range (2.0.0). Field Formatter Range 8.x-1.8 Minor update available for module field_formatter_range (8.x-1.8). Varbase Media Header 9.2.1 Minor update available for module varbase_media_header (9.2.1). Search API Solr 4.3.11 Module search_api_solr updated after 14 months of inactivity (4.3.11). Provus Mega Menu Module provus_mega_menu crossed 1,000 active installs.

Protected Content

9 sites No security coverage
View on drupal.org

This module provides client-side encryption using OpenPGP.js, protecting user data from administrators and external systems by encrypting content directly in the user's browser. It can be used to encrypt and decrypt files and text either in a standalone mode or integrated within fieldable forms.

A sovereignty tool for site operators and their users against external power structures.

I'm really impressed now how the download-decrypt-render works - this is really very user-friendly! And users don't realize what happens behind the scenes because it goes so smoothly. That's always the best sign when something looks so simple...

INTRODUCTION

This NIS2 Recital (95) compliant module integrates OpenPGPjs for executing client-side encryption, ensuring that even Drupal administrators or sysadmins cannot access user data. It supports two modes of usage: stand-alone mode
and field mode. In stand-alone mode, the module provides forms for encryption, decryption and re-encryption (decryption immediately followed by encryption, for updating sets of recipients and/or compliance with key rotation) of files and text. In field mode, the module provides a field type for encryption and decryption of files and text from within any fieldable form, and a field formatter and inline decryption mode that allows seamless asymmetric decryption and rendering on-the-fly.

REQUIREMENTS

OpenPGP.js v5.0.1

INSTALLATION

Install as usual. OpenPGPjs is shipped within the module.

ROADMAP

Multiple signatures per content with recursive encryption.

Recursive encryption of files by folder selection.

LEARN MORE ABOUT PROTECTED CONTENT

Protected Content, Secure open source day - Haarlem (2019)

Protected Content: end-to-end PGP encryption for Drupal, Drupal Camp - Kyiv (2019)

Protected Content by Asymmetrical Client Side Encryption, Drupal Dev Days - Ghent (2022)

A pretty good content protection (Workshop), Drupal Con - Prague (2022)

Securing Drupal Content with Client-Side Encryption: A Zero Trust Approach (Workshop), Drupal Con - Vienna (2025)

The Privacy, The Secrecy and The Contradiction of NIS2, OpenSSL Conference - Prague (2025)

SIMILAR PROJECT

Client-Side File Crypto

WARNINGS

  1. Protected Content defines a zero knowledge proof protocol, based on the brain of its users. Unless local cache is set, the passphrases defining private keys are not stored in any medium but the brain of their authors. I.e, a lost passphrase that allows for the decryption of a content no one else is a recipient of equals to a content lost for an impractical amount of time. Use it wisely.
  2. Proc uses the cache API of modern browsers for avoiding having to download twice the same cipher text. Therefore, if you are not accessing it in localhost, you might have to have https enabled on your server, otherwise the cache API will probably be disabled. If as <user> you come to have ssh access to your remote server and you access the project at http://<ip>:<port>, a convenient workaround is to bind ports with ssh. Example: ssh -L <port>:<ip>:<port> <user>@<ip>. While this ssh session is opened, you will be able to access the project at http://localhost:<port> and as such cache API will be enabled.

Activity

Total releases
41
First release
Feb 2025
Latest release
3 weeks ago
Releases (12 mo)
33 ▲ from 8
Maintenance
Active

Release Timeline

Releases

Version Type Release date
10.1.122 Stable Jun 22, 2026
10.1.121 Stable Jun 18, 2026
10.1.120 Stable Jun 16, 2026
10.1.119 Stable Jun 15, 2026
10.1.118 Stable Jun 11, 2026
10.1.117 Stable Jun 5, 2026
10.1.116 Stable Jun 4, 2026
10.1.115 Stable Jun 3, 2026
10.1.114 Stable May 23, 2026
10.1.113 Stable May 22, 2026
10.1.112 Stable May 21, 2026
10.1.111 Stable May 8, 2026
10.1.110 Stable May 5, 2026
10.1.109 Stable Apr 18, 2026
10.1.108 Stable Apr 14, 2026
10.1.107 Stable Mar 20, 2026
10.1.106 Stable Mar 16, 2026
10.1.105 Stable Mar 12, 2026
10.1.104 Stable Mar 10, 2026
10.1.103 Stable Mar 5, 2026
10.1.102 Stable Mar 3, 2026
10.1.101 Stable Mar 2, 2026
10.1.100 Stable Feb 26, 2026
10.1.99 Stable Feb 25, 2026
10.1.98 Stable Feb 25, 2026
10.1.97 Stable Jan 30, 2026
10.1.96 Stable Jan 13, 2026
10.1.95 Stable Jan 8, 2026
10.1.94 Stable Dec 5, 2025
10.1.93 Stable Dec 4, 2025
10.1.92 Stable Nov 13, 2025
10.1.91 Stable Nov 13, 2025
10.1.90 Stable Nov 4, 2025
10.1.89 Stable May 4, 2025
10.1.88 Stable Apr 30, 2025
10.1.87 Stable Apr 29, 2025
10.1.86 Stable Apr 29, 2025
10.1.85 Stable Apr 25, 2025
10.1.84 Stable Apr 25, 2025
10.1.83 Stable Apr 23, 2025
10.1.82 Stable Feb 18, 2025