Skip to content

Security: cssadewale/pgadmin-stimulator

Security

SECURITY.md

Security Policy — PostgreSQL (pgAdmin) Simulator

Maintainer: Adewale Samson Adeagbo
Last Updated: May 2026


Supported Versions

Version Status Recommendation
3.2.x Currently supported Use this version
3.1.x ⚠️ Limited support Upgrade to 3.2.x recommended
3.0.x ⚠️ Limited support Upgrade to 3.2.x recommended
2.x.x ❌ No longer maintained Upgrade immediately
1.x.x ❌ No longer maintained Upgrade immediately

Security Architecture

The PostgreSQL (pgAdmin) Simulator is designed with a privacy-first, zero-server architecture. Here is exactly how your data is handled:

✅ What the App Does

Concern How It's Handled
SQL Execution All SQL runs inside your browser via sql.js (SQLite WebAssembly). Not a single byte of your SQL or data leaves your device.
Data Storage Imported tables, query results, and generated data exist only in browser memory (RAM). They disappear when you close the tab.
Preferences Font size, theme, and settings stored in browser localStorage under pgas_ keys. Never transmitted anywhere.
Saved Queries Stored in localStorage. Never leave your device.
Query History Stored in localStorage (last 50-200 entries). Never leave your device.
CDN Libraries Three libraries loaded once from cdnjs.cloudflare.com on first load: sql.js (~3MB), Chart.js (~200KB), PapaParse (~60KB). These are standard, trusted, widely-used open-source libraries.
Fonts Loaded once from fonts.googleapis.com (IBM Plex Mono, DM Sans).

❌ What the App NEVER Does

Concern Guarantee
No server There is no backend. There is nothing to hack server-side because there is no server.
No data transmission Zero data leaves your browser. No analytics, no telemetry, no error reporting.
No cookies The app sets zero cookies.
No AI API No calls to ChatGPT, Claude, Gemini, or any AI service. Your queries are never sent to an AI.
No authentication There is no login system, no password database, no user accounts.
No tracking No Google Analytics, no Facebook Pixel, no usage tracking of any kind.
No third-party ads The app has no advertisements and no ad networks.

Content Security

  • User-provided SQL runs entirely inside the browser's WebAssembly sandbox (sql.js). It cannot access your filesystem, network, or other browser tabs.
  • Imported CSV/JSON data is processed entirely in memory by PapaParse (for CSV) or the browser's native JSON parser. No data is uploaded.
  • HTML escaping: All user-provided content rendered to the DOM is escaped via the eH() function (which replaces <, >, &, " with HTML entities). This prevents XSS attacks.
  • No eval(): The app uses zero dynamic code evaluation.

Recommendations for Users

✅ Safe Practices

  • ✅ Use the app locally (open the HTML file directly on your device) for sensitive/confidential data
  • ✅ Use Database Backup (Tools → Database Backup) regularly to save your work
  • ✅ Clear your browser's localStorage if using a shared/public device: Chrome → Settings → Privacy → Clear browsing data → Cookies and site data
  • ✅ Keep your browser updated to the latest version for the best WebAssembly security

⚠️ Be Aware Of

  • ⚠️ Public deployments have no authentication. If you deploy to a public URL (GitHub Pages, Netlify, etc.), anyone with the URL can access the app interface. Do not import sensitive/confidential data into a publicly-hosted instance.
  • ⚠️ localStorage data persists across sessions. If on a shared device, your saved queries and history remain until cleared. Use the local file approach (Option A in Deployment Guide) for privacy.
  • ⚠️ Browser extensions with access to all site data can technically read localStorage. This is true for all websites and is not specific to this app.
  • ⚠️ The app does not encrypt localStorage data. Saved queries and history are stored in plain text. This is fine for SQL practice queries but do not save credentials or secrets in saved queries.

Reporting a Vulnerability

If you discover a security vulnerability, please report it responsibly.

⛔ Do NOT open a public GitHub Issue for security vulnerabilities.

Instead, contact the maintainer directly through private channels:

Adewale Samson Adeagbo

Private Channel Details
📧 Email buildingmyictcareer@gmail.com · hismarvellousgrace@gmail.com
💼 LinkedIn linkedin.com/in/adewalesamsonadeagbo
📱 WhatsApp +234 810 086 6322

What to Include in Your Report

  1. Description of the vulnerability — What is affected and how
  2. Steps to reproduce — Numbered, specific instructions
  3. Potential impact — What could an attacker do?
  4. Suggested fix (if you have one)
  5. Your preferred attribution — Do you want to be credited publicly in the CHANGELOG, or remain anonymous?

Response Timeline

Stage Expected Time
Acknowledgment Within 24-48 hours
Investigation Within 72 hours
Fix development 3-7 days
Fix release As soon as tested and ready
Public disclosure After the fix is deployed

Confirmed vulnerabilities will be credited in the CHANGELOG and release notes (with attribution unless you prefer anonymity).


Known Limitations (by Design — Not Vulnerabilities)

These are intentional design choices and are not considered security vulnerabilities:

Limitation Reason
No authentication on public deployments The app is intentionally serverless. If you need access control, host on a private server with HTTP Basic Auth or behind a VPN.
localStorage is plain text The app has no encryption key infrastructure. This is acceptable for SQL queries and preferences.
No HTTPS enforcement logic The app relies on the hosting platform (GitHub Pages, Netlify, Cloudflare) to provide HTTPS — which they all do by default.
CDN libraries loaded over HTTPS All CDN URLs use https://. Mixed content is impossible in modern browsers.
No Content Security Policy (CSP) header As a single-file app, CSP headers must be set by the hosting platform. GitHub Pages, Netlify, and Cloudflare Pages all set appropriate default headers.
No Subresource Integrity (SRI) hashes The CDN URLs for sql.js, Chart.js, and PapaParse do not include integrity hashes. This is because these libraries update occasionally and SRI would break on minor version bumps. cdnjs.cloudflare.com is a trusted CDN with integrity guarantees at the infrastructure level.

For Enterprise / Sensitive Use

If you need to use this app in an environment with stricter security requirements:

  1. Host privately. Deploy the file on an internal server with your organization's authentication (LDAP, SSO, VPN).

  2. Pin CDN versions. Edit the CDN URLs in index.html to use specific version hashes or host the libraries on your own infrastructure.

  3. Add SRI hashes. Generate Subresource Integrity hashes for the CDN libraries and add integrity attributes to the <script> tags.

  4. Self-host libraries. Download sql.js, Chart.js, and PapaParse and serve them from your own domain instead of CDN.

  5. Set CSP headers. Configure your web server to send appropriate Content-Security-Policy headers.

  6. Use a private browser profile. If using on a shared device, use a separate Chrome profile or always clear data after sessions.


🐘 PostgreSQL (pgAdmin) Simulator v3.2
Security policy maintained by Adewale Samson Adeagbo
Privacy by design. Zero-server. Zero-tracking. Always.

There aren't any published security advisories