You've already forked fm-dx-webserver
mirror of
https://github.com/KubaPro010/fm-dx-webserver.git
synced 2026-02-26 22:13:53 +01:00
security fixes, bugfixes
This commit is contained in:
@@ -82,7 +82,7 @@ function handleConnect(clientIp, currentUsers, ws) {
|
||||
const userLocation = `${locationInfo.city}, ${locationInfo.regionName}, ${locationInfo.countryCode}`;
|
||||
const userData = { ip: clientIp, location: userLocation, time: connectionTime, instance: ws };
|
||||
storage.connectedUsers.push(userData);
|
||||
consoleCmd.logInfo(`Web client \x1b[32mconnected\x1b[0m (${clientIp}) \x1b[90m[${currentUsers}]\x1b[0m Location: ${locationInfo.city}, ${locationInfo.region}, ${locationInfo.country}`);
|
||||
consoleCmd.logInfo(`Web client \x1b[32mconnected\x1b[0m (${clientIp}) \x1b[90m[${currentUsers}]\x1b[0m Location: ${locationInfo.city}, ${locationInfo.regionName}, ${locationInfo.country}`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
@@ -90,7 +90,7 @@ function handleConnect(clientIp, currentUsers, ws) {
|
||||
}
|
||||
});
|
||||
}).on('error', (err) => {
|
||||
consoleCmd.chunklogInfo(`Web client \x1b[32mconnected\x1b[0m (${clientIp}) \x1b[90m[${currentUsers}]\x1b[0m`);
|
||||
consoleCmd.logInfo(`Web client \x1b[32mconnected\x1b[0m (${clientIp}) \x1b[90m[${currentUsers}]\x1b[0m`);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -222,7 +222,16 @@ function antispamProtection(message, clientIp, ws, userCommands, lastWarn, userC
|
||||
return command; // Return command value for normal execution
|
||||
}
|
||||
|
||||
const escapeHtml = (unsafe) => {
|
||||
return unsafe
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
};
|
||||
|
||||
|
||||
module.exports = {
|
||||
authenticateWithXdrd, parseMarkdown, handleConnect, removeMarkdown, formatUptime, resolveDataBuffer, kickClient, checkIPv6Support, antispamProtection
|
||||
authenticateWithXdrd, parseMarkdown, handleConnect, removeMarkdown, formatUptime, resolveDataBuffer, kickClient, checkIPv6Support, antispamProtection, escapeHtml
|
||||
}
|
||||
@@ -5,6 +5,7 @@ const session = require('express-session');
|
||||
const bodyParser = require('body-parser');
|
||||
const http = require('http');
|
||||
const httpProxy = require('http-proxy');
|
||||
const readline = require('readline');
|
||||
const app = express();
|
||||
const httpServer = http.createServer(app);
|
||||
const WebSocket = require('ws');
|
||||
@@ -72,6 +73,10 @@ if (plugins.length > 0) {
|
||||
}, 3000); // Initial delay of 3 seconds for the first plugin
|
||||
}
|
||||
|
||||
const terminalWidth = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
}).output.columns;
|
||||
|
||||
|
||||
console.log(`\x1b[32m
|
||||
@@ -81,8 +86,9 @@ console.log(`\x1b[32m
|
||||
| _| | | | |_____| |_| / \\ \\ V V / __/ |_) \\__ \\ __/ | \\ V / __/ |
|
||||
|_| |_| |_| |____/_/\\_\\ \\_/\\_/ \\___|_.__/|___/\\___|_| \\_/ \\___|_|
|
||||
`);
|
||||
console.log('\x1b[0mFM-DX Webserver', pjson.version);
|
||||
console.log('\x1b[90m―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――');
|
||||
console.log('\x1b[32m\x1b[2mby Noobish @ \x1b[4mFMDX.org\x1b[0m');
|
||||
console.log("v" + pjson.version)
|
||||
console.log('\x1b[90m' + '─'.repeat(terminalWidth - 1) + '\x1b[0m');
|
||||
|
||||
// Start ffmpeg
|
||||
require('./stream/index');
|
||||
@@ -446,9 +452,9 @@ wss.on('connection', (ws, request) => {
|
||||
|
||||
const { isAdminAuthenticated, isTuneAuthenticated } = request.session || {};
|
||||
|
||||
if (serverConfig.publicTuner || (serverConfig.lockToAdmin && isAdminAuthenticated) || (!serverConfig.lockToAdmin && isTuneAuthenticated)) {
|
||||
if ((serverConfig.publicTuner && !serverConfig.lockToAdmin) || isAdminAuthenticated || (!serverConfig.publicTuner && !serverConfig.lockToAdmin && isTuneAuthenticated)) {
|
||||
output.write(`${command}\n`);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -528,6 +534,11 @@ chatWss.on('connection', (ws, request) => {
|
||||
return;
|
||||
}
|
||||
|
||||
// Escape nickname and other potentially unsafe fields
|
||||
if (messageData.nickname) {
|
||||
messageData.nickname = helpers.escapeHtml(messageData.nickname);
|
||||
}
|
||||
|
||||
messageData.ip = clientIp;
|
||||
const currentTime = new Date();
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ let serverConfig = {
|
||||
autoShutdown: false,
|
||||
enableDefaultFreq: false,
|
||||
defaultFreq: "87.5",
|
||||
TestTest: "tesst"
|
||||
bwSwitch: false
|
||||
};
|
||||
|
||||
// Function to add missing fields without overwriting existing values
|
||||
|
||||
Reference in New Issue
Block a user