Skip to main content

Squid Security Overview

Security is foundational to Squid's design. As a data integration tool that exports potentially sensitive ServiceNow data, Squid implements multiple layers of security controls to ensure data is only accessible to authorized users and systems.

Security Philosophy

Squid's security model is built on three core principles:

  1. Defense in Depth - Multiple independent security layers that must all be satisfied
  2. Explicit Access - Data access requires explicit configuration, not implicit grants
  3. Transparency - Security decisions are visible and auditable

Security Architecture

Squid Security Architecture OverviewSquid implements a Defense in Depth security architecture with four independent layers. Every API request must pass through all layers sequentially. Compromise of one layer does not compromise the entire system. LAYER 1 - AUTHENTICATION: Verifies the user's identity through ServiceNow session authentication. The user must have the x_a46gh_squidx.rest role to access the Squid API. Without this role, all requests are rejected with HTTP 403 Forbidden. LAYER 2 - CONFIGURATION AUTHORIZATION: Controls which configurations a user can access. Users must have at least one role that is configured on the requested configuration. Predefined configurations require the x_a46gh_squidx.defaultAccess role by default. Custom configurations can specify any ServiceNow roles. LAYER 3 - DATA ACCESS CONTROLS: Controls what data is returned from configurations. Database views define which columns are available - columns not in the view cannot be accessed. View filters restrict which rows are returned - these are administrator-defined encoded queries that cannot be bypassed by API callers. Optionally, ServiceNow ACLs can provide additional row and field-level security. LAYER 4 - QUERY VALIDATION: Protects against security circumvention and performance attacks. Forbidden operators (like ^NQ for top-level OR) are always blocked to prevent bypassing view filters. Restricted operators (like CONTAINS, LIKE, javascript:) can be blocked per configuration to prevent performance-degrading queries. Relations access can be restricted to an allowed list per configuration. RESULT: After passing all four layers, the request proceeds to return a JSON response containing only the data that passed all security checks.API RequestLayer 1: Authentication• ServiceNow session authentication• User must have x_a46gh_squidx.rest roleLayer 2: Configuration Authorization• User must have at least one role configured on the configuration• Predefined configs require x_a46gh_squidx.defaultAccessLayer 3: Data Access Controls• Database views define available columns• View filters restrict rows• Optional: ServiceNow ACLsLayer 4: Query Validation• Forbidden operators blocked (circumvention prevention)• Restricted operators controlled (performance protection)• Relations access controlledJSON ResponseDEFENSE IN DEPTH

Deep dive into each layer:

Key Security Features

FeaturePurposeDocumentation
Role-Based AccessControl who can access the API and specific configurationsAuthorization
View-Based Data ControlDefine exactly which columns are available for exportData Access Controls
View FiltersRestrict rows returned per configurationData Access Controls
Forbidden OperatorsPrevent query-based security circumventionQuery Security
Restricted OperatorsPrevent performance attacksQuery Security
Relations RestrictionControl which relations callers can requestAuthorization
Audit LoggingTrack all access and security eventsAuditing

ServiceNow ACLs

Why are we talking about security? Doesn't ServiceNow have ACLs?

Squid has a nuanced relationship with ServiceNow ACLs. While ACLs are valuable for interactive UI security, they can cause significant problems for programmatic data exports due to their silent failure mode.

See: ServiceNow ACLs for a detailed explanation.

We track. Ok?