Skip to content

Security Settings

The Security Settings page in the Admin Panel lets you configure network-level restrictions, session management policies, password requirements, and automated protections against authentication attacks.

Navigate to Admin Panel > Security or go directly to /backoffice/settings/security.

IP allowlist and blocklist

Control which IP addresses or ranges can access your SetGet instance.

IP allowlist

When an allowlist is configured, only requests from listed IP addresses or CIDR ranges are permitted. All other requests receive a 403 Forbidden response.

SettingDescription
Enable IP allowlistToggle to activate allowlist enforcement
Allowed IPs / CIDRsComma-separated list of IP addresses or CIDR ranges

Example allowlist entries:

203.0.113.10
198.51.100.0/24
10.0.0.0/8
2001:db8::/32

WARNING

Be careful when enabling the IP allowlist. If you lock yourself out by not including your current IP address, you will need to modify the configuration directly in MongoDB or via environment variables to regain access.

IP blocklist

The blocklist rejects requests from specific IP addresses or ranges while allowing all others.

SettingDescription
Enable IP blocklistToggle to activate blocklist enforcement
Blocked IPs / CIDRsComma-separated list of IP addresses or CIDR ranges

TIP

The allowlist and blocklist are evaluated in order: allowlist first, then blocklist. If both are enabled, a request must be on the allowlist AND not on the blocklist to proceed.

Admin Panel IP restriction

You can restrict Admin Panel access to a narrower set of IPs than the main application:

SettingDescriptionDefault
Restrict admin access by IPApply a separate IP allowlist to /backoffice/ routesDisabled
Admin allowed IPsIPs/CIDRs that can access the Admin PanelEmpty

This is useful when you want all employees to access SetGet from any network but limit Admin Panel access to the office network or VPN.

Session management

Configure how user sessions are created, maintained, and expired.

SettingDescriptionDefault
Session timeout (inactive)Time of inactivity before session expires24 hours
Session timeout (absolute)Maximum session duration regardless of activity7 days
Remember me durationExtended session when "Remember me" is checked30 days
Max concurrent sessionsMaximum active sessions per user (0 = unlimited)0
Terminate on password changeInvalidate all sessions when a user changes their passwordEnabled

Session timeout behavior

  • Inactive timeout: If a user does not make any API requests within this period, their session expires and they must log in again.
  • Absolute timeout: Even with continuous activity, the session expires after this duration. The user must re-authenticate.
  • Remember me: When a user checks "Remember me" at login, the inactive timeout extends to this value.

TIP

For high-security environments, set the inactive timeout to 1-4 hours and the absolute timeout to 24 hours. Disable "Remember me" or set it to a short duration.

Force logout

Instance administrators can terminate individual user sessions or all sessions for a user from the User Management page. This is useful when:

  • A user reports a compromised account.
  • An employee leaves the organization.
  • You need to enforce a policy change immediately.

Password complexity requirements

Configure minimum standards for user passwords. These apply to local (email + password) authentication only and do not affect OAuth, SAML, or LDAP users.

RequirementDescriptionDefault
Minimum lengthMinimum number of characters8
Maximum lengthMaximum number of characters128
Require uppercaseAt least one uppercase letter (A-Z)Disabled
Require lowercaseAt least one lowercase letter (a-z)Disabled
Require digitAt least one number (0-9)Disabled
Require special characterAt least one of !@#$%^&*()-_=+Disabled
Disallow common passwordsReject passwords from a known-compromised listEnabled
Password historyNumber of previous passwords that cannot be reused0 (disabled)
Password expiry (days)Days until password change is required (0 = never)0

TIP

A password policy of 12+ characters with mixed case, digits, and special characters, combined with a 90-day expiry and 5-password history, meets most enterprise compliance requirements (SOC 2, ISO 27001, NIST 800-63B).

Password change enforcement

When you increase password complexity requirements, existing passwords are not immediately invalidated. You have two options:

OptionDescription
Enforce on next loginUsers with non-compliant passwords are prompted to change at next login
Grace periodAllow a configurable number of days before enforcing new requirements

Brute-force protection

Automated protection against credential-stuffing and brute-force attacks.

SettingDescriptionDefault
Enable brute-force protectionActivate rate limiting on login attemptsEnabled
Max failed attemptsNumber of failed login attempts before lockout5
Lockout windowTime window for counting failed attempts15 minutes
Lockout durationHow long the account is locked after max failures15 minutes
Progressive lockoutIncrease lockout duration with repeated violationsEnabled
CAPTCHA after failuresShow CAPTCHA after N failed attempts (0 = disabled)3

How brute-force protection works

  1. A user (identified by email + IP) fails to log in.
  2. The failure is recorded in Redis with a TTL equal to the lockout window.
  3. After reaching the max failed attempts, the account is locked for the lockout duration.
  4. During lockout, all login attempts for that account are rejected with a clear message.
  5. If progressive lockout is enabled, the lockout duration doubles with each consecutive lockout event.
  6. After a successful login, the failure counter resets.

WARNING

Brute-force protection applies to both email+password and LDAP authentication. OAuth and SAML logins are not affected because authentication happens at the identity provider.

IP-based rate limiting

In addition to per-account protection, SetGet applies IP-based rate limiting:

SettingDescriptionDefault
Max login attempts per IPMaximum login attempts from a single IP per window20
IP rate limit windowTime window for counting IP-based attempts15 minutes
IP block durationHow long the IP is blocked after exceeding the limit30 minutes

This prevents distributed attacks that target multiple accounts from the same IP.

Account lockout policies

PolicyDescriptionDefault
Auto-unlock after durationAccounts unlock automatically after the lockout periodEnabled
Admin manual unlockAdmins can manually unlock accounts from User ManagementAlways available
Notify user on lockoutSend an email to the user when their account is lockedEnabled
Notify admins on lockoutSend an alert to instance admins when any account is lockedDisabled

Security audit

The Security Settings page includes a security posture summary that highlights areas needing attention:

CheckRecommendedStatus Indicator
HTTPS enabledYesGreen / Red
IP allowlist configuredRecommendedGreen / Yellow
Brute-force protection activeYesGreen / Red
Password complexity enabledRecommendedGreen / Yellow
Session timeout configuredYesGreen / Red
SMTP configured (for lockout notifications)YesGreen / Red

CORS configuration

Control which origins can make cross-origin requests to the SetGet API:

SettingDescriptionDefault
Allowed originsList of origins permitted for CORS requestsInstance URL only
Allow credentialsWhether cookies and auth headers are sent cross-originYes

TIP

If you use a CDN or custom domain for your frontend, add it to the allowed origins list. Do not use * (wildcard) in production as it disables credential support and weakens security.

HTTP security headers

SetGet sets the following security headers on all responses. These are not configurable through the Admin Panel but are documented here for security auditors:

HeaderValuePurpose
X-Content-Type-OptionsnosniffPrevents MIME-type sniffing
X-Frame-OptionsDENYPrevents clickjacking
X-XSS-Protection1; mode=blockEnables browser XSS filter
Strict-Transport-Securitymax-age=31536000; includeSubDomainsForces HTTPS
Content-Security-PolicyRestrictive policyPrevents XSS and injection attacks
Referrer-Policystrict-origin-when-cross-originLimits referrer information