From abf56914d2e9b2658b29be96811930ceedac9aa7 Mon Sep 17 00:00:00 2001
From: Kyle Javier [kj_sh604]
Date: Sat, 4 Apr 2026 02:12:07 -0400
Subject: [squash] refactor: security improvements and sane defaults (#1)
---
README.md | 12 +-
src/index.html | 21 ++--
src/main.js | 41 ++++--
src/server.py | 387 ++++++++++++++++++++++++++++++++++++++++++++++-----------
4 files changed, 365 insertions(+), 96 deletions(-)
diff --git a/README.md b/README.md
index 4c156cc..12580dc 100644
--- a/README.md
+++ b/README.md
@@ -23,11 +23,15 @@ no frills, just a public clipboard on the internet that you can use to share sni
python3 src/server.py
```
-listens on `0.0.0.0:5555` by default. configure with environment variables:
+## config
-```sh
-KJ_CLIPBOARD_PORT=8080 KJ_CLIPBOARD_BIND=127.0.0.1 python3 src/server.py
-```
+all runtime/security/sqlite values are edited directly in `src/server.py` under `# config`.
+
+- sqlite wal + retry/backoff enabled
+- moderate post rate-limit (`150/min` per ip)
+- hsts disabled by default (safe for non-https setups)
+
+if you terminate tls at nginx/caddy, enable hsts by setting `ENABLE_HSTS = True`.
## docker
diff --git a/src/index.html b/src/index.html
index dbac2f6..8d89859 100644
--- a/src/index.html
+++ b/src/index.html
@@ -68,6 +68,12 @@
word-break: break-all;
}
+ .copy-link-btn {
+ margin-left: 0.5rem;
+ font-size: 0.85rem;
+ padding: 0.25rem 0.5rem;
+ }
+
.spacer {
flex-grow: 1;
}
@@ -87,9 +93,9 @@
kj-clipboard
no frills, just a public clipboard on the internet that you can use to share snippets around... that's it.
-
encrypted with mojicrypt
- link: