@@ -30,6 +30,11 @@ LINK_LENGTH=6
# Default value omits o, O, 0, i, I, l, 1, and j to avoid confusion when reading the URL
LINK_CUSTOM_ALPHABET=abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789
+# Optional - Tells the app that it's running behind a proxy server
+# and that it should get the IP address from that proxy server
+# if you're not using a proxy server then set this to false, otherwise users can override their IP address
+TRUST_PROXY=true
+
# Optional - Redis host and port
REDIS_ENABLED=false
REDIS_HOST=127.0.0.1
@@ -21,6 +21,7 @@ const env = cleanEnv(process.env, {
DEFAULT_DOMAIN: str({ example: "kutt.it", default: "localhost:3000" }),
LINK_LENGTH: num({ default: 6 }),
LINK_CUSTOM_ALPHABET: str({ default: "abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789" }),
+ TRUST_PROXY: bool({ default: true }),
DB_CLIENT: str({ choices: supportedDBClients, default: "sqlite3" }),
DB_FILENAME: str({ default: "db/data" }),
DB_HOST: str({ default: "localhost" }),
@@ -29,12 +29,11 @@ require("./passport");
// create express app
const app = express();
-// this tells the express app that the app is running behind a proxy server
+// this tells the express app that it's running behind a proxy server
// and thus it should get the IP address from the proxy server
-// IMPORTANT: users might be able to override their IP address and this
-// might allow users to bypass the rate limit or lead to incorrect link stats
-// read the Kutt documentation to learn how prevent users from changing their real IP address
-app.set("trust proxy", true);
+if (env.TRUST_PROXY) {
+ app.set("trust proxy", true);
+}
app.use(helmet({ contentSecurityPolicy: false }));
app.use(cookieParser());