Security

Built to protect the most sensitive data you hold.

Bursary applications contain financial circumstances, home addresses, and vulnerable-pupil designations. myBursary treats that data accordingly - with defence-in-depth security across every layer of the stack.

Field-level encryption at rest Encrypted in transit UK data hosting Role-based access
Data at rest

Sensitive fields are encrypted before they reach the database.

Personally identifiable information (PII) is encrypted at the field level using strong, authenticated encryption before being written to the database.

Even if an attacker gained direct database access, they would retrieve only ciphertext. Encryption keys are stored separately from the application and injected at runtime - they are never written to disk or committed to source control.

Data in transit

All traffic is encrypted. No exceptions.

Every connection - browser to application, application to database, and between internal services - is encrypted using modern protocols. Plain-HTTP requests are redirected to HTTPS automatically.

Modern TLS only
HTTPS redirect
Secure from first load
Encrypted database link
Access control

The right people see the right data - no more.

Access is controlled at every layer: authentication (who you are), authorisation (what you're allowed to do), and tenancy (which institution's data you can see). All views require authentication by default - public pages are an explicit, audited exception.

Authentication

Controlled access with optional email verification.

Students can self-register using their institution email address. Staff and admin accounts are created by an administrator only. All accounts are activated only after the user verifies their email address.

  • Student registration can be restricted to institution-recognised email domains
  • Staff accounts are invite-only - no self-registration for privileged roles
  • Passwords hashed with a strong, salted algorithm
  • Strong password policy enforced at account creation and change
  • Automated bot protection on all authentication forms
  • Rate limiting on authentication endpoints
How access is granted
Student self-registration
Students register themselves using a verified institution email address. Staff and admin accounts are provisioned by an administrator only.
Verified identity
Email ownership is verified before any access is granted.
Scoped session
Every session is limited to the authenticated user's institution and role.
Authorisation

Three distinct roles - each with its own permission boundary.

Every user is assigned one of three roles at account creation. Roles are enforced at multiple layers - a student cannot access staff views, and a staff member cannot access another institution's data.

  • Student - can view and edit only their own application
  • Staff - can assess applications within their institution
  • Admin - full access within their institution's boundary
  • All views require authentication by default
  • Cross-institution access is architecturally prevented, not just policy-controlled
Role permissions
Student Own application only
Staff Institution applications
Admin Full institution access
Cross-institution data access is architecturally impossible, not just policy-blocked.
Sessions & cookies

Sessions that expire before they can be misused.

Sessions are short-lived, reset on every request, and destroyed when the browser closes. Cookies carry full security attributes to prevent JavaScript access, cross-site forgery, and transmission over plain HTTP.

Short idle timeout

Sessions expire after a short period of inactivity. Every request resets the clock, so active users are never interrupted unexpectedly.

Browser-close expiry

Sessions do not persist beyond the browser session. Closing the browser invalidates the session immediately.

Hardened cookies

Session and CSRF cookies carry the full set of browser security attributes to block JavaScript access, cross-site transmission, and plaintext exposure.

HTTP security headers

Browsers are told exactly what to trust.

A strict set of HTTP response headers instructs browsers on where resources may be loaded from, whether the page can be framed, and how referrer information is shared. These headers defend against content injection, clickjacking, and other browser-level attacks.

Content Security Policy

Scripts, styles, fonts, and images may only be loaded from explicitly allow-listed origins. Unauthorised content injection and iframe embedding are both blocked.

HTTP Strict Transport Security

Browsers are instructed to refuse plain-HTTP connections to myBursary for an extended period, even before the server responds.

Clickjacking prevention

Pages cannot be embedded as iframes on any origin, eliminating the clickjacking attack surface entirely.

MIME type enforcement

Browsers are prevented from interpreting responses as a different content type than declared, closing a class of content-injection attacks.

Referrer control

Referrer information is restricted on cross-origin requests - external sites never receive the full URL of a page a user visited.

Cross-site request forgery protection

All state-changing requests carry server-validated anti-forgery tokens, preventing unauthorised actions from being triggered by third-party sites.

Multi-tenancy

Institution data is isolated at the architectural level.

Each institution operates on its own subdomain. Tenant context is resolved and validated on every single request. Data belonging to one institution cannot be retrieved via another institution's subdomain - this is enforced at the data model level, not just by application logic.

Subdomain isolation

Each institution gets its own subdomain. Requests on one subdomain cannot access resources or data belonging to any other institution.

Data-level enforcement

Tenant ownership is embedded in every data record. Isolation is enforced at the data model layer - not just in application logic that could be bypassed.

Request validation

Tenant context derived from incoming requests is strictly validated on every request before any data operation is performed.

Infrastructure & storage

Hardened containers, private file storage, and least-privilege everything.

The application runs in containers configured for minimal attack surface. Uploaded evidence files are stored privately and served via short-lived, signed URLs. All secrets are injected at runtime - nothing sensitive is baked into the image or committed to source control.

Least-privilege containers

All containers run as unprivileged system users and are configured to prevent privilege escalation, even if a container is compromised.

Minimal production image

The production image contains only what is needed to run the application. Build tools, source files, and development dependencies are not present at runtime.

Private file storage

Uploaded evidence documents are stored with private access controls and server-side encryption. Files are served via short-lived signed URLs - direct access is blocked entirely.

Network segmentation

Services communicate over isolated internal networks. Backend services are not exposed to the internet.

Secrets from environment

Application secrets, database credentials, and encryption keys are loaded at startup from a secure environment. They are never written to disk or committed to source control.

Pre-launch security checks

Security configuration is validated automatically before deployment. The application will not start if a misconfiguration is detected.

Bot protection

Automated attacks stopped before they reach the application.

All authentication forms are protected by invisible bot-challenge technology that distinguishes humans from automated scripts without presenting puzzles to legitimate users.

  • Bot challenge verification on every login and password-reset request
  • Rate limiting on all authentication endpoints
  • Edge-level filtering removes malicious traffic before it reaches the application
Layers of protection
Edge filtering
Malicious traffic is identified and blocked at the network edge before reaching the application.
Rate limiting
Authentication endpoints enforce strict request rate limits to prevent credential-stuffing attacks.
Bot challenge
Every authentication attempt must pass an invisible bot challenge, blocking automated scripts without friction for real users.
Responsible disclosure

Found a vulnerability? We want to hear from you.

If you believe you have found a security issue in myBursary, please report it to us privately before disclosing publicly. We commit to acknowledging your report within 2 business days and working with you to resolve it.

[email protected]