Security Policy

August 19, 2026 ยท View on GitHub

Supported versions

Security fixes are provided for the latest release on the default branch. This project is pre-1.0; users should upgrade to the newest patch release before reporting a problem.

Reporting a vulnerability

Please do not disclose a suspected vulnerability in a public issue. Use GitHub's Security โ†’ Report a vulnerability flow for this repository. If private vulnerability reporting is not available yet, contact the maintainer privately and allow reasonable time for a fix before public disclosure.

Include the affected version, impact, reproduction steps and any suggested mitigation. Do not include real API keys, identity tokens or private game data.

Deployment boundary

dsh-poker is designed for a loopback-only DSH Web instance and Play Tokens. Do not expose the DSH listener on 0.0.0.0, a LAN or the public internet without adding deployment-specific authentication, TLS, rate limiting and access controls.

The optional AI player uses the operator's paid API account. For interactive local play, the operator may enter a key through AI settings. That command is accepted only from a same-origin browser whose socket peer and requested Host are both loopback. The key is passed directly into an in-memory provider closure: it is never written to table state, snapshots, the ledger, logs, browser storage or profile files, and the browser receives only a configured / not-configured boolean. The in-memory key is lost when dsh web restarts.

For unattended startup, use DEEPSEEK_API_KEY. Avoid the deepseekApiKey profile field because profile configuration is persisted. Review provider usage and allow only trusted local players to add AI seats; each AI turn may consume paid provider tokens.

Room deletion is also limited to a same-origin loopback browser. It requires a two-step UI confirmation, cancels any unfinished hand, refunds each seat's currently owned table chips through idempotent ledger entries, and uses a durable deletion tombstone so restart cannot expose a partially deleted room.