Security Overview
How your department's data is protected
WATCHDESK is built to protect the sensitive personal information that volunteer fire departments entrust to it — including Social Security Numbers, personal contact details, and service records. Security is not an afterthought; it is engineered into every layer of the platform, from how data is stored and encrypted to how users authenticate and how stations are isolated from one another.
This document provides a technical overview of the security controls in place. If you have questions about any of these measures, contact admin@watchdesk.org.
Key protections built into every layer of the platform
How Social Security Numbers and sensitive PII are safeguarded
Social Security Numbers are the most sensitive data WATCHDESK handles. They are required for LOSAP retirement credit forms and Maryland State Tax Credit submissions, and they receive the highest level of protection in the system.
SSNs are encrypted before being written to the database using AES-256-GCM (Advanced Encryption Standard with 256-bit keys in Galois/Counter Mode). This is an authenticated encryption algorithm, which means it provides both confidentiality (data cannot be read without the key) and integrity (any tampering with the ciphertext is automatically detected and rejected).
***-**-1234) is shown in the interfaceProtecting data as it moves between your browser and our servers
All communication between your browser and WATCHDESK is encrypted using TLS (Transport Layer Security). This prevents anyone on the network — including ISPs, Wi-Fi operators, or other devices on the same network — from reading or modifying data in transit.
http:// in the address barThe connection between the application server and the PostgreSQL database is encrypted automatically through Google Cloud's internal networking. In the production environment, the application connects via a secure Unix domain socket provided by Google Cloud SQL, which does not traverse any external network.
How users prove their identity
WATCHDESK uses OAuth 2.0 Single Sign-On (SSO) for all member authentication. This means WATCHDESK does not store or manage user passwords. Instead, authentication is delegated to your station's existing identity provider — either Google Workspace or Microsoft 365.
Each station has its own OAuth credentials, registered under that station's own Google Workspace or Microsoft 365 tenant. This means your station's IT administrator controls which identity provider is used and maintains full ownership of those credentials.
Who can see and do what within the application
After a user is authenticated, WATCHDESK enforces role-based access control (RBAC) to determine what actions they are permitted to take. Roles are assigned per member and are checked on every request.
| Role | Capabilities |
|---|---|
| Member (default) | View own profile, activity history, and qualification points. Submit training, hours, and other records for admin review. Edit own contact information. |
| Data Entry | Everything a member can do, plus create and edit records for all station members (responses, meetings, drills, hours, training, etc.). |
| Station Admin | Everything data entry can do, plus delete records, approve or reject member submissions, manage lookup values, assign roles, and view the activity audit log. |
| Certifier | Review and certify annual LOSAP and State Tax qualification status for members. This role is separate from admin to allow segregation of duties. |
How your station's data is kept separate from every other station
WATCHDESK serves multiple fire stations from a single platform. Each station's data is logically isolated so that members and administrators at one station can never view, query, or modify data belonging to another station.
Your member roster, response history, hours, training records, meeting attendance, LOSAP and State Tax data, and uploaded documents are visible only to authorized members of your own station. No other station on the platform can access your data through the application.
Station data isolation is enforced on every query, every API call, and every file request. It is not optional, not configurable, and cannot be bypassed by end users. This is a core architectural guarantee of the platform.
Browser-level protections applied to every response
WATCHDESK sends a suite of security headers with every HTTP response. These headers instruct the browser to enable built-in protections against common web attacks.
| Header | Protection Provided |
|---|---|
| Strict-Transport-Security | Forces HTTPS for all connections for one year, preventing protocol downgrade attacks |
| X-Content-Type-Options | Prevents browsers from misinterpreting file types (MIME sniffing), reducing the risk of certain injection attacks |
| X-Frame-Options | Blocks the application from being embedded in iframes on other websites, preventing clickjacking attacks |
| Content-Security-Policy | Restricts which external resources (scripts, styles, fonts, images) the browser is allowed to load, mitigating cross-site scripting (XSS) attacks |
| Referrer-Policy | Limits the information sent in the Referer header when navigating away, preventing URL-based data leakage |
| Permissions-Policy | Disables browser APIs that WATCHDESK does not use (camera, microphone, geolocation), reducing the attack surface |
Cache-Control: no-store
headers, ensuring that sensitive data is never cached by the browser or any intermediate proxy.
Protection against brute-force and automated attacks
Sensitive endpoints are protected by rate limiting, which restricts the number of requests a single client can make within a time window. This defends against brute-force login attempts, credential stuffing, and automated data harvesting.
| Protected Action | Limit |
|---|---|
| Login and account linking | 10 attempts per 15-minute window |
| OAuth initiation | 20 attempts per 15-minute window |
| Local password authentication | 5 attempts per 15-minute window |
| SSN reveal (admin or self-service) | 10 requests per 15-minute window |
When a rate limit is exceeded, the server responds with 429 Too Many Requests and
the client must wait for the window to reset. Rate limits are applied per IP address.
Multi-layer validation for every uploaded file
Members and administrators can upload file attachments (certificates, training documents, images, etc.) to various record types. Every upload passes through three layers of validation before being accepted.
image/jpeg but named with an
.html extension is rejectedA complete record of who did what and when
WATCHDESK maintains a comprehensive audit trail of all significant actions taken within the application. This log provides accountability, supports incident investigation, and helps station administrators monitor activity.
Each audit entry records the date and time, the email address of the user who performed the action, the type of action (create, update, delete, approve, reject, etc.), and a description of what was affected. Logs are scoped to each station and viewable by station administrators through the admin dashboard.
How user sessions are managed and protected
After a user signs in, the application creates a session to maintain their authenticated state across page requests. Sessions are designed with the following protections:
Lax, which prevents the
cookie from being sent on cross-origin POST requests — a defense against cross-site
request forgery (CSRF) attacksWhere the platform runs and how the environment is secured
WATCHDESK runs entirely on Google Cloud Platform (GCP), one of the three major hyperscale cloud providers. Google Cloud's infrastructure is SOC 1/2/3 certified, ISO 27001 certified, and FedRAMP authorized.
| Component | Service | Security Benefit |
|---|---|---|
| Application Hosting | Google App Engine | Fully managed runtime with automatic patching, no OS-level access to maintain |
| Database | Google Cloud SQL (PostgreSQL) | Managed database with automated backups, encryption at rest, and private networking |
| File Storage | Google Cloud Storage | Private bucket with IAM-based access control; no public URLs |
| Secrets Management | Google Cloud Secret Manager | Encryption keys, database credentials, and OAuth secrets stored in a dedicated vault with IAM-controlled access |
| TLS Termination | Google Cloud Load Balancer | TLS 1.2+ with modern cipher suites, managed SSL certificates |
We're happy to discuss any of these measures in more detail
If you have questions about WATCHDESK's security practices, want to discuss specific compliance requirements, or need additional information for your station's evaluation, please contact:
admin@watchdesk.org
For information about what data WATCHDESK collects and how it is used, see our Privacy Statement. For a full overview of platform features, see the Platform Overview.
All protections at a glance