Skip to main content Required by EU law for organizations with 50+ employees →

Security #

EthicsPortal handles sensitive whistleblower data. This page documents the specific technical and organizational measures we have in place. It is written for compliance officers, DPOs, and legal teams evaluating the platform.

Last updated: April 2026.


Data encryption #

All sensitive fields are encrypted at rest using Rails ActiveRecord Encryption with non-deterministic encryption (each encryption produces a unique ciphertext, preventing pattern analysis).

FieldEncryptedDeterministic
Report descriptionYesNo
Reporter nameYesNo
Reporter contact detailsYesNo
Message body (reporter–handler communication)YesNo

Non-deterministic encryption means these fields cannot be queried by value at the database level. Even with full database access, an attacker cannot search for a specific reporter name across records.

All connections to EthicsPortal use HTTPS/TLS. Unencrypted HTTP requests are redirected.


Anonymity and privacy #

IP anonymization #

EthicsPortal never stores IP addresses. Portal routes (report submission, case lookup, messaging) use a one-way SHA256 hash of the IP address solely for rate limiting. The hash is not reversible — it is impossible to recover the original IP from the stored value.

This applies to all portal-facing endpoints. No IP address is written to any log, database field, or analytics system.

File metadata stripping #

Uploaded files are automatically stripped of identifying metadata before storage:

File typeMetadata removedMethod
Images (JPEG, PNG, TIFF, WebP)EXIF data: GPS coordinates, camera model, device serial number, author, timestampsVips image processing
PDF documentsAuthor, creator application, modification historyexiftool
Video filesGPS, device info, recording softwareexiftool
Audio filesRecording device, GPS, software tagsexiftool

Reporters are not required to trust that their files are safe — metadata is removed server-side regardless of what the file contains.

Virus scanning #

All uploaded files are automatically scanned for malware using ClamAV, an open-source antivirus engine. Scanning happens server-side in a background process after upload. Infected files are removed automatically and never reach case handlers.

Files are scanned on EthicsPortal infrastructure — no file data is sent to third-party scanning services.

Handler anonymity #

Whistleblowers never see the real names or email addresses of the people handling their report. All messages from handlers are displayed as “Case handler”. This protects handler identity and prevents social engineering.

No tracking #

EthicsPortal does not use third-party tracking cookies, advertising pixels, or fingerprinting scripts. We use Cloudflare Web Analytics on marketing pages only — it is cookie-free, collects no personal data, and is fully GDPR-compliant. The whistleblower portal itself has no analytics.


Access control #

Authorization is enforced at the application level using Pundit policies.

RoleCan view reportsCan manage organization settingsCan assign handlers
AdminAll reportsYesYes
HandlerOnly assigned reportsNoNo

Rate limiting #

Public portal endpoints are rate-limited to prevent abuse and enumeration attacks:

EndpointLimit
Report submission5 per 10 minutes per anonymized IP
Case lookup (access code)10 per 3 minutes per anonymized IP
Message submission10 per 3 minutes per anonymized IP

Rate limiting uses the one-way IP hash described above — no actual IP is stored.


Audit and compliance #

Immutable audit trail #

Every action in EthicsPortal is logged with:

Audit log entries are append-only. They cannot be edited or deleted by any user, including organization admins. The full audit trail is included in PDF case exports for regulatory review.

Data retention #

Organizations configure their own retention period: 12, 24, 36, or 60 months after a report is closed. When the retention period expires, the report and all associated data (messages, attachments, audit log entries) are automatically and permanently deleted by a background job.

This satisfies GDPR storage limitation requirements (Art. 5(1)(e)) and Directive 2019/1937 record-keeping obligations (Art. 17–18).

CSRF protection #

All form submissions are protected against cross-site request forgery using Rails’ built-in CSRF tokens.


Infrastructure #

ComponentProviderLocation
Application server and databaseHetznerNuremberg, Germany (EU)
File storageCloudflare R2EU
Transactional emailPostmarkUS (with EU processing, Standard Contractual Clauses)
Payment processingStripeEU

Responsible disclosure #

If you discover a security vulnerability in EthicsPortal, please report it to [email protected]. We ask that you:

  1. Do not publicly disclose the vulnerability before we have had a chance to address it.
  2. Provide enough detail for us to reproduce and fix the issue.
  3. Do not access or modify other customers’ data.

We will acknowledge your report within 2 business days and aim to resolve confirmed vulnerabilities promptly.