P16 Enrolment Security
Security & Data Protection

Built to protect the students who trust you

Educoda handles sensitive personal data for thousands of students across England. Security is built into every layer — from how passwords are stored to how student documents are accessed, from audit logs to encrypted connections.

Report a Vulnerability Privacy Policy
TLS 1.2 & 1.3
everywhere
Multi-factor
authentication
Role-based
access controls
ICO registered
ZB949031

Security controls in place today

Every control listed here is implemented and active in the production system.

Encryption in transit

All connections are encrypted using TLS 1.2 or TLS 1.3. Weak protocols and ciphers are explicitly disabled. HTTP traffic is redirected to HTTPS automatically, and HSTS headers prevent downgrade attacks.

Argon2 password hashing

Passwords are hashed using Argon2 — the winner of the Password Hashing Competition and the recommended algorithm for password storage. Plain-text passwords are never stored or logged.

Multi-factor authentication

TOTP-based two-factor authentication is available for all users and can be made mandatory for staff roles. All superuser and admin accounts are required by policy to have MFA enabled. Recovery codes are provided at enrolment.

Role-based access controls

A granular, three-tier RBAC system controls every action in the platform. Permissions can be granted or explicitly denied per-user. Roles can be time-limited, and a full audit trail records every change to who has what access.

School data isolation

Each school operates in a fully isolated tenant. Staff can only access data belonging to their own institution — enforced at the middleware layer on every request, not just in application logic. Cross-school access is impossible without superuser rights.

Private document storage

Sensitive student documents (identification, results) are stored in a private bucket with no public URL. Access is granted only via time-limited, cryptographically signed presigned URLs generated on demand. Documents cannot be guessed or enumerated.

Audit logging

Login events, permission changes, GDPR erasure requests, and payment waivers are written to immutable audit logs. Administrators can review who took what action and when across all security-sensitive operations.

CSRF protection & bot prevention

All state-changing requests require a CSRF token. Signup forms include Cloudflare Turnstile challenge and honeypot fields to prevent automated bot registrations. CSRF tokens are transmitted only over HTTPS-secured cookies.

PCI-compliant payment processing

Payments are processed by Stripe. No card numbers, CVV codes, or payment credentials ever touch our servers. Stripe webhook events are verified using cryptographic signatures before processing. We store only payment status and Stripe-issued references.

Infrastructure

Hosted and delivered securely

The platform runs on infrastructure designed for reliability, resilience, and security.

  • Segregated object storage
    Student files and platform assets are stored in separate public and private buckets. Private files require a valid time-limited signed URL to access — no direct public access is possible.
  • EU-hosted transactional email
    Transactional emails are sent via a managed email provider operating in the EU (London) region, keeping email traffic within European infrastructure.
  • In-memory session and cache layer
    Sessions and cache are backed by a password-authenticated in-memory store. Sessions expire after 60 minutes of inactivity and are invalidated on password change.
  • Hardened reverse proxy with TLS termination
    All traffic passes through a reverse proxy configured with TLS 1.2/1.3, strong cipher suites, HSTS, and security headers before reaching the application layer. IP-based direct access is blocked.
  • Real-time error monitoring
    Application errors are captured in real time to enable rapid diagnosis and remediation. Personal data is not transmitted to monitoring infrastructure.
Secrets management

All credentials — database passwords, API keys, payment keys — are stored as environment variables and never hardcoded in source code or version control.

Mandatory email verification

All accounts must verify their email address before accessing the platform. Unverified accounts cannot log in or submit data.

Session management

Sessions expire after 60 minutes of inactivity. Password changes immediately invalidate all active sessions. Secure, HttpOnly cookies prevent client-side access.

Resilient background processing

Background tasks run with strict time and resource limits to prevent runaway processes or resource exhaustion. Workers are automatically recycled to prevent memory leaks.

How we develop and maintain security

Security is a practice, not a feature. Here is how we work.

Locked dependency management

All software dependencies are pinned in a lock file and installed from a frozen, verified state on every deployment. This prevents unintended updates and supply-chain substitution. Dependencies are reviewed before updates are applied.

Automated testing and CI

All code changes pass through an automated test suite backed by a full database before deployment. Payment processing, permission logic, and authentication flows are covered by tests. No untested code reaches production.

Static analysis on every commit

Automated static analysis and type-checking tools run on every commit before code is reviewed. These tools catch common security anti-patterns — including injection vectors and unsafe input handling — before code reaches the codebase.

Principle of least privilege

Access rights are granted at the minimum level required. Staff receive only the permissions their role requires. Permissions can expire automatically. Every grant and revocation is written to an immutable audit log with the actor, timestamp, and reason.

Injection prevention

All database queries use parameterised queries by default, making SQL injection structurally impossible in standard usage. Output is escaped by the template layer, protecting against cross-site scripting. Neither raw queries nor unescaped output are used.

Incident monitoring and alerting

Application errors are captured in real time. Critical errors trigger immediate alerts to the engineering team. Error rates are monitored continuously to detect unusual activity or degraded behaviour.

Compliance & standards alignment

We are transparent about what we have implemented, what we are working towards, and what we have not yet achieved.

Active UK GDPR & DPA 2018

Educoda Ltd is registered with the Information Commissioner's Office (ICO registration ZB949031). We have published a privacy policy, support data erasure requests, and maintain a GDPR erasure log.

  • ICO registration in place
  • Published privacy policy
  • GDPR erasure requests supported
  • Data (Use and Access) Act 2025 reflected in policy
  • Self-service data export for students (planned)
Aligned with OWASP Top 10

The application is designed following OWASP Top 10 principles. Key risks are addressed through framework-level protections and deliberate architectural choices.

  • A01 Broken Access Control — RBAC + tenant isolation
  • A02 Cryptographic Failures — Argon2, TLS 1.3, presigned URLs
  • A03 Injection — Django ORM (parameterised queries)
  • A05 Security Misconfiguration — security headers, HSTS
  • A07 Auth Failures — MFA, session expiry, email verification
  • A09 Security Logging — audit trail active across key operations
In progress Cyber Essentials

We are working towards NCSC Cyber Essentials certification. The five key controls are partially in place across our infrastructure.

  • Firewalls — nginx with explicit host allow-listing
  • Secure configuration — no debug mode, locked-down defaults
  • User access control — RBAC, MFA, least privilege
  • Patch management — formalising update process
  • Malware protection — formal policy in development
Planned ISO 27001

We have not pursued ISO 27001 certification yet. Many of the technical controls required by the standard are already in place. Formal ISMS documentation, risk register, and third-party audit are on our roadmap.

  • Access control (A.9) — RBAC, MFA, audit logs
  • Cryptography (A.10) — Argon2, TLS, signed URLs
  • Incident management (A.16) — Sentry monitoring
  • Risk assessment documentation — planned
  • Vendor risk management — in progress
Not pursued SOC 2

SOC 2 is a US-origin framework primarily relevant to American enterprise procurement. It is not currently on our roadmap. UK and EU customers are better served by our ICO registration and Cyber Essentials certification path.

  • We do not hold or claim SOC 2 certification.
  • Many underlying controls (availability, security) are implemented.
  • Contact us if your procurement process requires this assessment.
A note on honesty: Every control listed on this page is implemented and active in production. Where we use the word aligned or planned, it means the control either follows the principles of a standard without formal certification, or is on our active roadmap. We do not claim certifications we do not hold.

Frequently asked questions

Answers based on the actual implementation, not aspirational claims.

All data is encrypted in transit using TLS 1.2 or 1.3. Sensitive documents (identification, results) are stored in a private bucket with no public URL. These files are only accessible via time-limited signed URLs — they cannot be accessed by guessing a URL or enumerating storage. Passwords are hashed using Argon2 and never stored in reversible form.

Only staff at your school with the appropriate role can access your students' data. The platform enforces strict tenant isolation — staff at one school cannot see data belonging to another. Educoda engineers can access data for support purposes, but this access is logged. You can review the school staff who have access to your portal at any time from the Users section.

Yes. TOTP-based two-factor authentication (compatible with Google Authenticator, Authy, and any TOTP app) is available for all users. You can configure specific roles to require MFA — users in those roles will be forced to set up 2FA before they can access the platform. All superuser and platform admin accounts require MFA by policy.

Not currently. SSO (SAML / OIDC) integration is on our product roadmap for schools that require it as part of their IT policy. At present, authentication is handled via email and password with optional TOTP 2FA. Contact us if SSO is a requirement for your procurement process.

Payments are processed entirely by Stripe. When a student pays, they are redirected to a Stripe-hosted checkout page. No card numbers, CVV codes, or bank details ever pass through or are stored on our servers. We store only the payment status (paid, waived, refunded) and a Stripe-issued session reference. Stripe is PCI DSS Level 1 certified.

School administrators can submit a GDPR erasure request for any student directly from the platform. The request is logged (who requested it, when, and why) and the student's personal data is erased. The erasure log is retained as required for compliance accountability. For erasure requests from students directly, please contact [email protected].

We operate a responsible disclosure policy. If you discover a security vulnerability, please email [email protected]. We ask that you give us reasonable time to investigate and remediate before public disclosure. We will acknowledge your report within 2 business days and aim to resolve critical issues within 7 days. We do not currently offer financial rewards but will credit researchers who report valid issues if they wish to be acknowledged.

Primary database and application infrastructure is hosted within the EU. Transactional email is sent via a managed provider operating in the EU (London) region. File storage is hosted in Europe. Error monitoring may process error metadata outside the UK — personal data transmission to monitoring infrastructure is disabled. Please refer to our privacy policy for a complete description of data flows and sub-processors.

Found a security issue?

We welcome responsible disclosure. If you have found a vulnerability, please email us directly. We take all reports seriously and respond within 2 business days.

Security contact
[email protected]
Privacy contact
[email protected]

Please include a clear description of the issue, steps to reproduce, and potential impact. We ask that you do not access or modify data belonging to others and give us a reasonable window to address the issue before public disclosure.