Data Protection & Security

At ExForms, we understand that your templates and data may contain sensitive information. This page explains the comprehensive security measures we implement to protect your data at every stage.


Our Security Principles

πŸ”’ Zero Trust Architecture
We assume all data is sensitive and apply maximum protection by default. Your credentials, templates, and generated documents are protected using industry-standard encryption and security practices.
Principle Implementation
Encryption at Rest All uploaded templates are encrypted using AES-256 with Azure Key Vault managed keys
Encryption in Transit All connections use TLS 1.2+ (HTTPS)
Minimal Data Retention Generated documents are deleted immediately after download
Credential Isolation Connection credentials are stored in Azure Key Vault, never in our database
Container Isolation Each service runs in isolated Docker containers

Template & File Encryption

How Your Files Are Protected

When you upload a template (PDF, Word, or PowerPoint), the file is immediately encrypted before being stored:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    FILE UPLOAD PROCESS                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. You upload a template file                                  β”‚
β”‚                 β”‚                                               β”‚
β”‚                 β–Ό                                               β”‚
β”‚  2. File is encrypted using AES-256                             β”‚
β”‚     β€’ Unique encryption key generated per file                  β”‚
β”‚     β€’ Key is wrapped using Azure Key Vault RSA key              β”‚
β”‚                 β”‚                                               β”‚
β”‚                 β–Ό                                               β”‚
β”‚  3. Encrypted file stored in database                           β”‚
β”‚     β€’ Only ciphertext is stored                                 β”‚
β”‚     β€’ Original plaintext never persisted                        β”‚
β”‚                 β”‚                                               β”‚
β”‚                 β–Ό                                               β”‚
β”‚  4. When you generate documents:                                β”‚
β”‚     β€’ File is decrypted in memory                               β”‚
β”‚     β€’ Processing occurs in isolated container                   β”‚
β”‚     β€’ Decrypted data never written to disk                      β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Encryption Technology

We use envelope encryption, the same approach used by major cloud providers:

Layer Technology Purpose
Data Encryption Key (DEK) AES-256-CBC Encrypts your actual file content
Key Encryption Key (KEK) RSA-OAEP (Azure Key Vault) Protects the DEK
Key Management Azure Key Vault (HSM-backed) Secure key storage with access logging

Why this matters:

  • Each file has its own unique encryption key
  • Even if the database were compromised, encrypted data is useless without the Key Vault
  • Azure Key Vault provides hardware security module (HSM) protection
  • All key access is logged and auditable

Immediate Data Deletion

Generated Documents

When you click "Send Data to Templates" and download the filled documents:

  1. Processing occurs in memory - Your data and templates are processed in RAM
  2. Temporary ZIP created - The output ZIP file is created temporarily
  3. Download begins - File streams directly to your browser
  4. Immediate cleanup - The ZIP file is deleted from the server immediately after download
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  DOCUMENT GENERATION LIFECYCLE                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Generate Documents                                             β”‚
β”‚         β”‚                                                       β”‚
β”‚         β–Ό                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                            β”‚
β”‚  β”‚ Process in RAM  β”‚ ← Templates decrypted in memory only       β”‚
β”‚  β”‚ (never on disk) β”‚                                            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                            β”‚
β”‚           β”‚                                                     β”‚
β”‚           β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                            β”‚
β”‚  β”‚ Create ZIP      β”‚ ← Temporary file, unique random name       β”‚
β”‚  β”‚ (temp folder)   β”‚                                            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                            β”‚
β”‚           β”‚                                                     β”‚
β”‚           β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                            β”‚
β”‚  β”‚ Stream download β”‚ ← Direct to your browser                   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                            β”‚
β”‚           β”‚                                                     β”‚
β”‚           β–Ό                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                            β”‚
β”‚  β”‚ DELETE FILE     β”‚ ← Immediately after download completes     β”‚
β”‚  β”‚ (automatic)     β”‚                                            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                            β”‚
β”‚                                                                 β”‚
β”‚  ⏱️ Total time on server: seconds, not stored                   β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

API Downloads

For API users, download URLs are:

  • Time-limited - Valid for 1 hour maximum
  • Single-use - Can only be downloaded once
  • Auto-deleted - Cleaned up automatically on expiration or after download

Connection Credential Security

When you configure connections to databases, SharePoint, Salesforce, or other services, your credentials require special protection.

The Problem We Solve

"I need to connect to my company's MySQL database, but I don't want my password stored in a way that could be compromised."

Our Solution: Azure Key Vault

We never store credentials in our application database. Instead:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  CREDENTIAL STORAGE ARCHITECTURE                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Our MySQL Database              Azure Key Vault                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚  β”‚                     β”‚         β”‚                     β”‚       β”‚
β”‚  β”‚ βœ“ Connection name   β”‚         β”‚ βœ“ Actual password   β”‚       β”‚
β”‚  β”‚ βœ“ Host/port         β”‚         β”‚ βœ“ OAuth tokens      β”‚       β”‚
β”‚  β”‚ βœ“ Database name     β”‚         β”‚ βœ“ API keys          β”‚       β”‚
β”‚  β”‚ βœ“ Secret REFERENCE  │────────▢│ βœ“ SSH certificates  β”‚       β”‚
β”‚  β”‚   (not the secret)  β”‚         β”‚                     β”‚       β”‚
β”‚  β”‚                     β”‚         β”‚ HSM-backed          β”‚       β”‚
β”‚  β”‚ βœ— NO passwords      β”‚         β”‚ Access logged       β”‚       β”‚
β”‚  β”‚ βœ— NO tokens         β”‚         β”‚ RBAC controlled     β”‚       β”‚
β”‚  β”‚ βœ— NO certificates   β”‚         β”‚                     β”‚       β”‚
β”‚  β”‚                     β”‚         β”‚                     β”‚       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Azure Key Vault Benefits

Feature Benefit
HSM-backed storage Cryptographic keys protected by hardware security modules
Access logging Every credential access is logged and auditable
RBAC permissions Fine-grained access control
Automatic rotation Support for credential rotation without code changes
Compliance SOC 2, ISO 27001, HIPAA, and other certifications

How It Works

  1. You configure a connection - Enter database host, username, password
  2. Password sent to Key Vault - Encrypted in transit, stored securely
  3. Reference stored locally - We only keep a pointer (like conn-123-cred)
  4. When connection is used - We retrieve the credential from Key Vault just-in-time
  5. Credential never cached - Retrieved fresh each time, used in memory only

Infrastructure Security

Docker Container Isolation

Our application runs in isolated Docker containers:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    CONTAINER ARCHITECTURE                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚   NGINX     β”‚   β”‚   WebApp    β”‚   β”‚      MySQL          β”‚   β”‚
β”‚  β”‚  (reverse   │──▢│  (.NET 10)   │──▢│    (database)       β”‚   β”‚
β”‚  β”‚   proxy)    β”‚   β”‚             β”‚   β”‚                     β”‚   β”‚
β”‚  β”‚             β”‚   β”‚ Processes   β”‚   β”‚ Stores encrypted    β”‚   β”‚
β”‚  β”‚ SSL/TLS     β”‚   β”‚ templates   β”‚   β”‚ templates only      β”‚   β”‚
β”‚  β”‚ termination β”‚   β”‚ in memory   β”‚   β”‚                     β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚        β”‚                  β”‚                    β”‚                β”‚
β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚                    Isolated Docker Network                       β”‚
β”‚                    (no external access to MySQL)                 β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Network Security

  • MySQL not exposed - Database only accessible from within Docker network
  • NGINX reverse proxy - All traffic goes through hardened proxy
  • TLS 1.2+ only - Modern encryption for all connections
  • HTTPS enforced - HTTP automatically redirects to HTTPS

Server Security

  • Regular updates - Ubuntu LTS with automatic security patches
  • Firewall configured - Only ports 80 (HTTPβ†’HTTPS redirect) and 443 (HTTPS) open
  • SSH key authentication - No password-based SSH access
  • Fail2ban protection - Automatic blocking of suspicious activity

What We Don't Store

To be completely transparent, here's what we explicitly do not store:

Data Type Stored? Notes
Your Excel data ❌ No Sent for processing, never persisted
Generated PDFs/Word/PPT ❌ No Deleted immediately after download
Connection passwords ❌ No Stored in Azure Key Vault only
OAuth tokens ❌ No Stored in Azure Key Vault only
API keys for services ❌ No Stored in Azure Key Vault only
Your original template (unencrypted) ❌ No Only encrypted version stored

What We Do Store

Data Type Stored? Purpose
Template files (encrypted) βœ… Yes So you can reuse templates
Field mappings βœ… Yes Remember how fields connect to Excel
Connection settings (non-sensitive) βœ… Yes Host, port, database name
Usage logs βœ… Yes For billing and troubleshooting
Account information βœ… Yes Email, company name, subscription

Compliance & Certifications

Azure Key Vault Certifications

Our credential storage uses Azure Key Vault, which is certified for:

  • SOC 1, SOC 2, SOC 3
  • ISO 27001, ISO 27017, ISO 27018
  • HIPAA
  • FedRAMP
  • PCI DSS

Our Practices

  • GDPR compliant - Data export and deletion on request, minimal data retention
  • Security audit logging - All sensitive actions (template operations, data exports, credential access) are logged
  • 72-hour incident notification - Committed to notifying affected users within 72 hours of a security incident
  • Encryption by default - No opt-in required, all templates encrypted at upload

Audit & Compliance

Security Audit Logging

All security-sensitive actions are logged to an audit trail, including:

Action Type What's Logged
Template Operations Upload, delete, access to encrypted templates
Data Exports GDPR data export requests
Credential Access Every time connector credentials are retrieved from Key Vault
Incident Management Security incident creation and notifications

Audit logs include:

  • Timestamp
  • User ID and Company ID
  • IP address
  • Action type and target
  • Success/failure status

Data Retention

Data Type Retention Period
Generated documents Deleted immediately after download
Sync operation logs 90 days
Error logs 30 days
Security audit logs 1 year

Best Practices for Users

While we protect your data, here are additional steps you can take:

Template Security

  1. Remove unnecessary sensitive data - If test data is in your template, clear it before uploading
  2. Use field placeholders - Don't embed real SSNs or account numbers in templates

Connection Security

  1. Use least-privilege accounts - Database users should only have necessary permissions
  2. Enable SSL for databases - Always use SSL/TLS for database connections
  3. Rotate credentials regularly - Change passwords periodically

Account Security

  1. Use strong passwords - Or better, use Microsoft/Google sign-in
  2. Review team access - Periodically audit who has access to your templates
  3. Monitor usage - Check the usage logs for unexpected activity

Questions?

If you have questions about our security practices or need additional documentation for compliance purposes, please contact us:

We're happy to provide additional information for your security review or compliance requirements.